github.com/westcoastroms/westcoastroms-build@v0.0.0-20190928114312-2350e5a73030/build/soong/android/expand_test.go (about)

     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:  "$a💩c",
   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  }