Home | History | Annotate | Download | only in android
      1 // Copyright 2016 Google Inc. All rights reserved.
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 //     http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 
     15 package android
     16 
     17 import (
     18 	"fmt"
     19 	"testing"
     20 )
     21 
     22 var vars = map[string]string{
     23 	"var1": "abc",
     24 	"var2": "",
     25 	"var3": "def",
     26 	"":    "",
     27 }
     28 
     29 func expander(s string) (string, error) {
     30 	if val, ok := vars[s]; ok {
     31 		return val, nil
     32 	} else {
     33 		return "", fmt.Errorf("unknown variable %q", s)
     34 	}
     35 }
     36 
     37 var expandTestCases = []struct {
     38 	in  string
     39 	out string
     40 	err bool
     41 }{
     42 	{
     43 		in:  "$(var1)",
     44 		out: "abc",
     45 	},
     46 	{
     47 		in:  "$( var1 )",
     48 		out: "abc",
     49 	},
     50 	{
     51 		in:  "def$(var1)",
     52 		out: "defabc",
     53 	},
     54 	{
     55 		in:  "$(var1)def",
     56 		out: "abcdef",
     57 	},
     58 	{
     59 		in:  "def$(var1)def",
     60 		out: "defabcdef",
     61 	},
     62 	{
     63 		in:  "$(var2)",
     64 		out: "",
     65 	},
     66 	{
     67 		in:  "def$(var2)",
     68 		out: "def",
     69 	},
     70 	{
     71 		in:  "$(var2)def",
     72 		out: "def",
     73 	},
     74 	{
     75 		in:  "def$(var2)def",
     76 		out: "defdef",
     77 	},
     78 	{
     79 		in:  "$(var1)$(var3)",
     80 		out: "abcdef",
     81 	},
     82 	{
     83 		in:  "$(var1)g$(var3)",
     84 		out: "abcgdef",
     85 	},
     86 	{
     87 		in:  "$$",
     88 		out: "$$",
     89 	},
     90 	{
     91 		in:  "$$(var1)",
     92 		out: "$$(var1)",
     93 	},
     94 	{
     95 		in:  "$$$(var1)",
     96 		out: "$$abc",
     97 	},
     98 	{
     99 		in:  "$(var1)$$",
    100 		out: "abc$$",
    101 	},
    102 	{
    103 		in:  "$()",
    104 		out: "",
    105 	},
    106 
    107 	// Errors
    108 	{
    109 		in:  "$",
    110 		err: true,
    111 	},
    112 	{
    113 		in:  "$$$",
    114 		err: true,
    115 	},
    116 	{
    117 		in:  "$(var1)$",
    118 		err: true,
    119 	},
    120 	{
    121 		in:  "$(var1)$",
    122 		err: true,
    123 	},
    124 	{
    125 		in:  "$(var4)",
    126 		err: true,
    127 	},
    128 	{
    129 		in:  "$var1",
    130 		err: true,
    131 	},
    132 	{
    133 		in:  "$(var1",
    134 		err: true,
    135 	},
    136 	{
    137 		in:  "$ac",
    138 		err: true,
    139 	},
    140 }
    141 
    142 func TestExpand(t *testing.T) {
    143 	for _, test := range expandTestCases {
    144 		got, err := Expand(test.in, expander)
    145 		if err != nil && !test.err {
    146 			t.Errorf("%q: unexpected error %s", test.in, err.Error())
    147 		} else if err == nil && test.err {
    148 			t.Errorf("%q: expected error, got %q", test.in, got)
    149 		} else if !test.err && got != test.out {
    150 			t.Errorf("%q: expected %q, got %q", test.in, test.out, got)
    151 		}
    152 	}
    153 }
    154