github.com/westcoastroms/westcoastroms-build@v0.0.0-20190928114312-2350e5a73030/build/soong/cmd/javac_wrapper/javac_wrapper_test.go (about) 1 // Copyright 2017 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 main 16 17 import ( 18 "bytes" 19 "io/ioutil" 20 "strconv" 21 "testing" 22 ) 23 24 var testCases = []struct { 25 in, out string 26 }{ 27 { 28 in: "File.java:40: error: cannot find symbol\n", 29 out: "\x1b[1mFile.java:40: \x1b[31merror:\x1b[0m\x1b[1m cannot find symbol\x1b[0m\n", 30 }, 31 { 32 in: "import static com.blah.SYMBOL;\n", 33 out: "import static com.blah.SYMBOL;\n", 34 }, 35 { 36 in: " ^ \n", 37 out: "\x1b[1m \x1b[32m^\x1b[0m\x1b[1m \x1b[0m\n", 38 }, 39 { 40 in: "File.java:398: warning: [RectIntersectReturnValueIgnored] Return value of com.blah.function() must be checked\n", 41 out: "\x1b[1mFile.java:398: \x1b[35mwarning:\x1b[0m\x1b[1m [RectIntersectReturnValueIgnored] Return value of com.blah.function() must be checked\x1b[0m\n", 42 }, 43 { 44 in: "warning: [options] blah\n", 45 out: "\x1b[1m\x1b[35mwarning:\x1b[0m\x1b[1m [options] blah\x1b[0m\n", 46 }, 47 { 48 in: " (see http://go/errorprone/bugpattern/RectIntersectReturnValueIgnored.md)\n", 49 out: " (see http://go/errorprone/bugpattern/RectIntersectReturnValueIgnored.md)\n", 50 }, 51 { 52 in: ` 53 Note: Some input files use or override a deprecated API. 54 Note: Recompile with -Xlint:deprecation for details. 55 Note: Some input files use unchecked or unsafe operations. 56 Note: Recompile with -Xlint:unchecked for details. 57 Note: dir/file.java uses or overrides a deprecated API. 58 Note: dir/file.java uses unchecked or unsafe operations. 59 warning: [options] bootstrap class path not set in conjunction with -source 1.7 60 `, 61 out: "\n", 62 }, 63 { 64 in: "\n", 65 out: "\n", 66 }, 67 } 68 69 func TestJavacColorize(t *testing.T) { 70 for i, test := range testCases { 71 t.Run(strconv.Itoa(i), func(t *testing.T) { 72 buf := new(bytes.Buffer) 73 err := process(bytes.NewReader([]byte(test.in)), buf) 74 if err != nil { 75 t.Errorf("error: %q", err) 76 } 77 got := string(buf.Bytes()) 78 if got != test.out { 79 t.Errorf("expected %q got %q", test.out, got) 80 } 81 }) 82 } 83 } 84 85 func TestSubprocess(t *testing.T) { 86 t.Run("failure", func(t *testing.T) { 87 exitCode, err := Main(ioutil.Discard, "test", []string{"sh", "-c", "exit 9"}) 88 if err != nil { 89 t.Fatal("unexpected error", err) 90 } 91 if exitCode != 9 { 92 t.Fatal("expected exit code 9, got", exitCode) 93 } 94 }) 95 96 t.Run("signal", func(t *testing.T) { 97 exitCode, err := Main(ioutil.Discard, "test", []string{"sh", "-c", "kill -9 $$"}) 98 if err != nil { 99 t.Fatal("unexpected error", err) 100 } 101 if exitCode != 137 { 102 t.Fatal("expected exit code 137, got", exitCode) 103 } 104 }) 105 106 t.Run("success", func(t *testing.T) { 107 exitCode, err := Main(ioutil.Discard, "test", []string{"echo"}) 108 if err != nil { 109 t.Fatal("unexpected error", err) 110 } 111 if exitCode != 0 { 112 t.Fatal("expected exit code 0, got", exitCode) 113 } 114 }) 115 116 }