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 15package android 16 17import ( 18 "fmt" 19 "testing" 20) 21 22var vars = map[string]string{ 23 "var1": "abc", 24 "var2": "", 25 "var3": "def", 26 "": "", 27} 28 29func 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 37var 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 142func 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