123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- // Copyright 2016 Google Inc. All rights reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- package android
- import (
- "fmt"
- "testing"
- )
- var vars = map[string]string{
- "var1": "abc",
- "var2": "",
- "var3": "def",
- "💩": "😃",
- "escape": "${in}",
- }
- func expander(s string) (string, bool, error) {
- if val, ok := vars[s]; ok {
- return val, s == "escape", nil
- } else {
- return "", false, fmt.Errorf("unknown variable %q", s)
- }
- }
- var expandTestCases = []struct {
- in string
- out string
- out_escaped string
- err bool
- }{
- {
- in: "$(var1)",
- out: "abc",
- out_escaped: "abc",
- },
- {
- in: "$( var1 )",
- out: "abc",
- out_escaped: "abc",
- },
- {
- in: "def$(var1)",
- out: "defabc",
- out_escaped: "defabc",
- },
- {
- in: "$(var1)def",
- out: "abcdef",
- out_escaped: "abcdef",
- },
- {
- in: "def$(var1)def",
- out: "defabcdef",
- out_escaped: "defabcdef",
- },
- {
- in: "$(var2)",
- out: "",
- out_escaped: "",
- },
- {
- in: "def$(var2)",
- out: "def",
- out_escaped: "def",
- },
- {
- in: "$(var2)def",
- out: "def",
- out_escaped: "def",
- },
- {
- in: "def$(var2)def",
- out: "defdef",
- out_escaped: "defdef",
- },
- {
- in: "$(var1)$(var3)",
- out: "abcdef",
- out_escaped: "abcdef",
- },
- {
- in: "$(var1)g$(var3)",
- out: "abcgdef",
- out_escaped: "abcgdef",
- },
- {
- in: "$$",
- out: "$",
- out_escaped: "$$",
- },
- {
- in: "$$(var1)",
- out: "$(var1)",
- out_escaped: "$$(var1)",
- },
- {
- in: "$$$(var1)",
- out: "$abc",
- out_escaped: "$$abc",
- },
- {
- in: "$(var1)$$",
- out: "abc$",
- out_escaped: "abc$$",
- },
- {
- in: "$(💩)",
- out: "😃",
- out_escaped: "😃",
- },
- {
- in: "$$a$(escape)$$b",
- out: "$a${in}$b",
- out_escaped: "$$a${in}$$b",
- },
- // Errors
- {
- in: "$",
- err: true,
- },
- {
- in: "$$$",
- err: true,
- },
- {
- in: "$(var1)$",
- err: true,
- },
- {
- in: "$(var1)$",
- err: true,
- },
- {
- in: "$(var4)",
- err: true,
- },
- {
- in: "$var1",
- err: true,
- },
- {
- in: "$(var1",
- err: true,
- },
- {
- in: "$a💩c",
- err: true,
- },
- }
- func TestExpand(t *testing.T) {
- for _, test := range expandTestCases {
- got, err := Expand(test.in, func(s string) (string, error) {
- s, _, err := expander(s)
- return s, err
- })
- if err != nil && !test.err {
- t.Errorf("%q: unexpected error %s", test.in, err.Error())
- } else if err == nil && test.err {
- t.Errorf("%q: expected error, got %q", test.in, got)
- } else if !test.err && got != test.out {
- t.Errorf("%q: expected %q, got %q", test.in, test.out, got)
- }
- }
- }
- func TestExpandNinjaEscaped(t *testing.T) {
- for _, test := range expandTestCases {
- got, err := ExpandNinjaEscaped(test.in, expander)
- if err != nil && !test.err {
- t.Errorf("%q: unexpected error %s", test.in, err.Error())
- } else if err == nil && test.err {
- t.Errorf("%q: expected error, got %q", test.in, got)
- } else if !test.err && got != test.out_escaped {
- t.Errorf("%q: expected %q, got %q", test.in, test.out, got)
- }
- }
- }
|