1*1fa6dee9SAndroid Build Coastguard Workerpackage proptools 2*1fa6dee9SAndroid Build Coastguard Worker 3*1fa6dee9SAndroid Build Coastguard Workerimport ( 4*1fa6dee9SAndroid Build Coastguard Worker "fmt" 5*1fa6dee9SAndroid Build Coastguard Worker "reflect" 6*1fa6dee9SAndroid Build Coastguard Worker "testing" 7*1fa6dee9SAndroid Build Coastguard Worker) 8*1fa6dee9SAndroid Build Coastguard Worker 9*1fa6dee9SAndroid Build Coastguard Workerfunc TestPostProcessor(t *testing.T) { 10*1fa6dee9SAndroid Build Coastguard Worker // Same as the ascii art example in Configurable.evaluate() 11*1fa6dee9SAndroid Build Coastguard Worker prop := NewConfigurable[[]string](nil, nil) 12*1fa6dee9SAndroid Build Coastguard Worker prop.AppendSimpleValue([]string{"a"}) 13*1fa6dee9SAndroid Build Coastguard Worker prop.AppendSimpleValue([]string{"b"}) 14*1fa6dee9SAndroid Build Coastguard Worker prop.AddPostProcessor(addToElements("1")) 15*1fa6dee9SAndroid Build Coastguard Worker 16*1fa6dee9SAndroid Build Coastguard Worker prop2 := NewConfigurable[[]string](nil, nil) 17*1fa6dee9SAndroid Build Coastguard Worker prop2.AppendSimpleValue([]string{"c"}) 18*1fa6dee9SAndroid Build Coastguard Worker 19*1fa6dee9SAndroid Build Coastguard Worker prop3 := NewConfigurable[[]string](nil, nil) 20*1fa6dee9SAndroid Build Coastguard Worker prop3.AppendSimpleValue([]string{"d"}) 21*1fa6dee9SAndroid Build Coastguard Worker prop3.AppendSimpleValue([]string{"e"}) 22*1fa6dee9SAndroid Build Coastguard Worker prop3.AddPostProcessor(addToElements("2")) 23*1fa6dee9SAndroid Build Coastguard Worker 24*1fa6dee9SAndroid Build Coastguard Worker prop4 := NewConfigurable[[]string](nil, nil) 25*1fa6dee9SAndroid Build Coastguard Worker prop4.AppendSimpleValue([]string{"f"}) 26*1fa6dee9SAndroid Build Coastguard Worker 27*1fa6dee9SAndroid Build Coastguard Worker prop5 := NewConfigurable[[]string](nil, nil) 28*1fa6dee9SAndroid Build Coastguard Worker prop5.AppendSimpleValue([]string{"g"}) 29*1fa6dee9SAndroid Build Coastguard Worker prop5.AddPostProcessor(addToElements("3")) 30*1fa6dee9SAndroid Build Coastguard Worker 31*1fa6dee9SAndroid Build Coastguard Worker prop2.Append(prop3) 32*1fa6dee9SAndroid Build Coastguard Worker prop2.AddPostProcessor(addToElements("z")) 33*1fa6dee9SAndroid Build Coastguard Worker 34*1fa6dee9SAndroid Build Coastguard Worker prop.Append(prop2) 35*1fa6dee9SAndroid Build Coastguard Worker prop.AddPostProcessor(addToElements("y")) 36*1fa6dee9SAndroid Build Coastguard Worker prop.Append(prop4) 37*1fa6dee9SAndroid Build Coastguard Worker prop.Append(prop5) 38*1fa6dee9SAndroid Build Coastguard Worker 39*1fa6dee9SAndroid Build Coastguard Worker expected := []string{"a1y", "b1y", "czy", "d2zy", "e2zy", "f", "g3"} 40*1fa6dee9SAndroid Build Coastguard Worker x := prop.Get(&configurableEvalutorForTesting{}) 41*1fa6dee9SAndroid Build Coastguard Worker if !reflect.DeepEqual(x.Get(), expected) { 42*1fa6dee9SAndroid Build Coastguard Worker t.Fatalf("Expected %v, got %v", expected, x.Get()) 43*1fa6dee9SAndroid Build Coastguard Worker } 44*1fa6dee9SAndroid Build Coastguard Worker} 45*1fa6dee9SAndroid Build Coastguard Worker 46*1fa6dee9SAndroid Build Coastguard Workerfunc TestPostProcessorWhenPassedToHelperFunction(t *testing.T) { 47*1fa6dee9SAndroid Build Coastguard Worker prop := NewConfigurable[[]string](nil, nil) 48*1fa6dee9SAndroid Build Coastguard Worker prop.AppendSimpleValue([]string{"a"}) 49*1fa6dee9SAndroid Build Coastguard Worker prop.AppendSimpleValue([]string{"b"}) 50*1fa6dee9SAndroid Build Coastguard Worker 51*1fa6dee9SAndroid Build Coastguard Worker helper := func(p Configurable[[]string]) { 52*1fa6dee9SAndroid Build Coastguard Worker p.AddPostProcessor(addToElements("1")) 53*1fa6dee9SAndroid Build Coastguard Worker } 54*1fa6dee9SAndroid Build Coastguard Worker 55*1fa6dee9SAndroid Build Coastguard Worker helper(prop) 56*1fa6dee9SAndroid Build Coastguard Worker 57*1fa6dee9SAndroid Build Coastguard Worker expected := []string{"a1", "b1"} 58*1fa6dee9SAndroid Build Coastguard Worker x := prop.Get(&configurableEvalutorForTesting{}) 59*1fa6dee9SAndroid Build Coastguard Worker if !reflect.DeepEqual(x.Get(), expected) { 60*1fa6dee9SAndroid Build Coastguard Worker t.Fatalf("Expected %v, got %v", expected, x.Get()) 61*1fa6dee9SAndroid Build Coastguard Worker } 62*1fa6dee9SAndroid Build Coastguard Worker} 63*1fa6dee9SAndroid Build Coastguard Worker 64*1fa6dee9SAndroid Build Coastguard Workerfunc addToElements(s string) func([]string) []string { 65*1fa6dee9SAndroid Build Coastguard Worker return func(arr []string) []string { 66*1fa6dee9SAndroid Build Coastguard Worker for i := range arr { 67*1fa6dee9SAndroid Build Coastguard Worker arr[i] = arr[i] + s 68*1fa6dee9SAndroid Build Coastguard Worker } 69*1fa6dee9SAndroid Build Coastguard Worker return arr 70*1fa6dee9SAndroid Build Coastguard Worker } 71*1fa6dee9SAndroid Build Coastguard Worker} 72*1fa6dee9SAndroid Build Coastguard Worker 73*1fa6dee9SAndroid Build Coastguard Workertype configurableEvalutorForTesting struct { 74*1fa6dee9SAndroid Build Coastguard Worker vars map[string]string 75*1fa6dee9SAndroid Build Coastguard Worker} 76*1fa6dee9SAndroid Build Coastguard Worker 77*1fa6dee9SAndroid Build Coastguard Workerfunc (e *configurableEvalutorForTesting) EvaluateConfiguration(condition ConfigurableCondition, property string) ConfigurableValue { 78*1fa6dee9SAndroid Build Coastguard Worker if condition.functionName != "f" { 79*1fa6dee9SAndroid Build Coastguard Worker panic("Expected functionName to be f") 80*1fa6dee9SAndroid Build Coastguard Worker } 81*1fa6dee9SAndroid Build Coastguard Worker if len(condition.args) != 1 { 82*1fa6dee9SAndroid Build Coastguard Worker panic("Expected exactly 1 arg") 83*1fa6dee9SAndroid Build Coastguard Worker } 84*1fa6dee9SAndroid Build Coastguard Worker val, ok := e.vars[condition.args[0]] 85*1fa6dee9SAndroid Build Coastguard Worker if ok { 86*1fa6dee9SAndroid Build Coastguard Worker return ConfigurableValueString(val) 87*1fa6dee9SAndroid Build Coastguard Worker } 88*1fa6dee9SAndroid Build Coastguard Worker return ConfigurableValueUndefined() 89*1fa6dee9SAndroid Build Coastguard Worker} 90*1fa6dee9SAndroid Build Coastguard Worker 91*1fa6dee9SAndroid Build Coastguard Workerfunc (e *configurableEvalutorForTesting) PropertyErrorf(property, fmtString string, args ...interface{}) { 92*1fa6dee9SAndroid Build Coastguard Worker panic(fmt.Sprintf(fmtString, args...)) 93*1fa6dee9SAndroid Build Coastguard Worker} 94*1fa6dee9SAndroid Build Coastguard Worker 95*1fa6dee9SAndroid Build Coastguard Workervar _ ConfigurableEvaluator = (*configurableEvalutorForTesting)(nil) 96