diff options
author | Dan Willemsen <dwillemsen@google.com> | 2018-02-21 02:10:29 -0800 |
---|---|---|
committer | Dan Willemsen <dwillemsen@google.com> | 2018-05-07 16:21:59 -0700 |
commit | 4339853a20bc300968d0389f4f9307ec415d540d (patch) | |
tree | 3258e9b29d26cafc74123ad21cc557f28cf0c9b1 /androidmk/parser/make_strings_test.go | |
parent | 470969df19079ad1c2eeb94fcc984ca2ce5e68ab (diff) | |
download | build_soong-4339853a20bc300968d0389f4f9307ec415d540d.tar.gz build_soong-4339853a20bc300968d0389f4f9307ec415d540d.tar.bz2 build_soong-4339853a20bc300968d0389f4f9307ec415d540d.zip |
Add a dependency fixer for proto deps
protoc dependency files, at least for C++ outputs, uses the form of:
a/b.c \
a/b.h: <dep1> <dep2>...
Ninja will fail the command when it parses a dep file and there's more
than one output file (even though it doesn't care what the output file
name is). So this tool will parse the original file, and output a
version with only a single output file.
Bug: 67329638
Test: NINJA_ARGS="-t deps ...pb.c" m
Test: NINJA_ARGS="-t deps ...srcjar" m
Test: NINJA_ARGS="-t deps ...srcszip" m
Test: Run dep_fixer across all of taimen's dep files, no failures.
Test: Run dep_fixer against the processed files, no changes.
Test: Run androidmk across all of our Android.mk files, inspect the diffs
Change-Id: I4263b7d5faea37285afa6b24dedf5964aa7d19dc
Diffstat (limited to 'androidmk/parser/make_strings_test.go')
-rw-r--r-- | androidmk/parser/make_strings_test.go | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/androidmk/parser/make_strings_test.go b/androidmk/parser/make_strings_test.go index 8ad3d74c..6995e891 100644 --- a/androidmk/parser/make_strings_test.go +++ b/androidmk/parser/make_strings_test.go @@ -99,6 +99,78 @@ func TestMakeStringSplitN(t *testing.T) { } } +var valueTestCases = []struct { + in *MakeString + expected string +}{ + { + in: SimpleMakeString("a b", NoPos), + expected: "a b", + }, + { + in: SimpleMakeString("a\\ \\\tb\\\\", NoPos), + expected: "a \tb\\", + }, + { + in: SimpleMakeString("a\\b\\", NoPos), + expected: "a\\b\\", + }, +} + +func TestMakeStringValue(t *testing.T) { + for _, test := range valueTestCases { + got := test.in.Value(nil) + if got != test.expected { + t.Errorf("\nwith: %q\nwant: %q\n got: %q", test.in.Dump(), test.expected, got) + } + } +} + +var splitWordsTestCases = []struct { + in *MakeString + expected []*MakeString +}{ + { + in: SimpleMakeString("", NoPos), + expected: []*MakeString{}, + }, + { + in: SimpleMakeString(" a b\\ c d", NoPos), + expected: []*MakeString{ + SimpleMakeString("a", NoPos), + SimpleMakeString("b\\ c", NoPos), + SimpleMakeString("d", NoPos), + }, + }, + { + in: SimpleMakeString(" a\tb\\\t\\ c d ", NoPos), + expected: []*MakeString{ + SimpleMakeString("a", NoPos), + SimpleMakeString("b\\\t\\ c", NoPos), + SimpleMakeString("d", NoPos), + }, + }, + { + in: SimpleMakeString(`a\\ b\\\ c d`, NoPos), + expected: []*MakeString{ + SimpleMakeString(`a\\`, NoPos), + SimpleMakeString(`b\\\ c`, NoPos), + SimpleMakeString("d", NoPos), + }, + }, +} + +func TestMakeStringWords(t *testing.T) { + for _, test := range splitWordsTestCases { + got := test.in.Words() + gotString := dumpArray(got) + expectedString := dumpArray(test.expected) + if gotString != expectedString { + t.Errorf("with:\n%q\nexpected:\n%s\ngot:\n%s", test.in.Dump(), expectedString, gotString) + } + } +} + func dumpArray(a []*MakeString) string { ret := make([]string, len(a)) |