1*333d2b36SAndroid Build Coastguard Worker// Copyright 2016 Google Inc. All rights reserved. 2*333d2b36SAndroid Build Coastguard Worker// 3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*333d2b36SAndroid Build Coastguard Worker// 7*333d2b36SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*333d2b36SAndroid Build Coastguard Worker// 9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*333d2b36SAndroid Build Coastguard Worker// limitations under the License. 14*333d2b36SAndroid Build Coastguard Worker 15*333d2b36SAndroid Build Coastguard Workerpackage main 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Workerimport ( 18*333d2b36SAndroid Build Coastguard Worker "bytes" 19*333d2b36SAndroid Build Coastguard Worker "fmt" 20*333d2b36SAndroid Build Coastguard Worker "strings" 21*333d2b36SAndroid Build Coastguard Worker "testing" 22*333d2b36SAndroid Build Coastguard Worker 23*333d2b36SAndroid Build Coastguard Worker "android/soong/androidmk/androidmk" 24*333d2b36SAndroid Build Coastguard Worker "android/soong/bpfix/bpfix" 25*333d2b36SAndroid Build Coastguard Worker 26*333d2b36SAndroid Build Coastguard Worker _ "android/soong/partner/bpfix/extensions" 27*333d2b36SAndroid Build Coastguard Worker) 28*333d2b36SAndroid Build Coastguard Worker 29*333d2b36SAndroid Build Coastguard Workervar testCases = []struct { 30*333d2b36SAndroid Build Coastguard Worker desc string 31*333d2b36SAndroid Build Coastguard Worker in string 32*333d2b36SAndroid Build Coastguard Worker expected string 33*333d2b36SAndroid Build Coastguard Worker}{ 34*333d2b36SAndroid Build Coastguard Worker { 35*333d2b36SAndroid Build Coastguard Worker desc: "headers replacement", 36*333d2b36SAndroid Build Coastguard Worker in: ` 37*333d2b36SAndroid Build Coastguard Workerinclude $(CLEAR_VARS) 38*333d2b36SAndroid Build Coastguard WorkerLOCAL_MODULE := test 39*333d2b36SAndroid Build Coastguard WorkerLOCAL_SRC_FILES := a.c 40*333d2b36SAndroid Build Coastguard WorkerLOCAL_C_INCLUDES := test1 $(TARGET_OUT_HEADERS)/my_headers test2 41*333d2b36SAndroid Build Coastguard Workerinclude $(BUILD_SHARED_LIBRARY)`, 42*333d2b36SAndroid Build Coastguard Worker expected: ` 43*333d2b36SAndroid Build Coastguard Workercc_library_shared { 44*333d2b36SAndroid Build Coastguard Worker name: "test", 45*333d2b36SAndroid Build Coastguard Worker srcs: ["a.c"], 46*333d2b36SAndroid Build Coastguard Worker include_dirs: [ 47*333d2b36SAndroid Build Coastguard Worker "test1", 48*333d2b36SAndroid Build Coastguard Worker 49*333d2b36SAndroid Build Coastguard Worker "test2", 50*333d2b36SAndroid Build Coastguard Worker ], 51*333d2b36SAndroid Build Coastguard Worker header_libs: ["my_header_lib"] 52*333d2b36SAndroid Build Coastguard Worker}`, 53*333d2b36SAndroid Build Coastguard Worker }, 54*333d2b36SAndroid Build Coastguard Worker} 55*333d2b36SAndroid Build Coastguard Worker 56*333d2b36SAndroid Build Coastguard Workerfunc TestEndToEnd(t *testing.T) { 57*333d2b36SAndroid Build Coastguard Worker // Skip checking Android.mk path with cleaning "ANDROID_BUILD_TOP" 58*333d2b36SAndroid Build Coastguard Worker t.Setenv("ANDROID_BUILD_TOP", "") 59*333d2b36SAndroid Build Coastguard Worker 60*333d2b36SAndroid Build Coastguard Worker for i, test := range testCases { 61*333d2b36SAndroid Build Coastguard Worker expected, err := bpfix.Reformat(test.expected) 62*333d2b36SAndroid Build Coastguard Worker if err != nil { 63*333d2b36SAndroid Build Coastguard Worker t.Error(err) 64*333d2b36SAndroid Build Coastguard Worker } 65*333d2b36SAndroid Build Coastguard Worker 66*333d2b36SAndroid Build Coastguard Worker got, errs := androidmk.ConvertFile(fmt.Sprintf("<testcase %d>", i), bytes.NewBufferString(test.in)) 67*333d2b36SAndroid Build Coastguard Worker if len(errs) > 0 { 68*333d2b36SAndroid Build Coastguard Worker t.Errorf("Unexpected errors: %q", errs) 69*333d2b36SAndroid Build Coastguard Worker continue 70*333d2b36SAndroid Build Coastguard Worker } 71*333d2b36SAndroid Build Coastguard Worker 72*333d2b36SAndroid Build Coastguard Worker if got != expected { 73*333d2b36SAndroid Build Coastguard Worker t.Errorf("failed testcase '%s'\ninput:\n%s\n\nexpected:\n%s\ngot:\n%s\n", test.desc, strings.TrimSpace(test.in), expected, got) 74*333d2b36SAndroid Build Coastguard Worker } 75*333d2b36SAndroid Build Coastguard Worker } 76*333d2b36SAndroid Build Coastguard Worker} 77