123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- // Copyright 2018 Google Inc. All rights reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- package status
- import (
- "testing"
- )
- type lastOutput struct {
- counterOutput
- action *Action
- result ActionResult
- msgLevel MsgLevel
- msg string
- }
- func (l *lastOutput) StartAction(a *Action, c Counts) {
- l.action = a
- l.counterOutput.StartAction(a, c)
- }
- func (l *lastOutput) FinishAction(r ActionResult, c Counts) {
- l.result = r
- l.counterOutput.FinishAction(r, c)
- }
- func (l *lastOutput) Message(level MsgLevel, msg string) {
- l.msgLevel = level
- l.msg = msg
- }
- func (l *lastOutput) Flush() {}
- func TestKatiNormalCase(t *testing.T) {
- status := &Status{}
- output := &lastOutput{}
- status.AddOutput(output)
- parser := &katiOutputParser{
- st: status.StartTool(),
- }
- msg := "*kati*: verbose msg"
- parser.parseLine(msg)
- output.Expect(t, Counts{})
- if output.msgLevel != VerboseLvl {
- t.Errorf("Expected verbose message, but got %d", output.msgLevel)
- }
- if output.msg != msg {
- t.Errorf("unexpected message contents:\nwant: %q\n got: %q\n", msg, output.msg)
- }
- parser.parseLine("out/build-aosp_arm.ninja is missing, regenerating...")
- output.Expect(t, Counts{})
- parser.parseLine("[1/1] initializing legacy Make module parser ...")
- output.Expect(t, Counts{
- TotalActions: 1,
- RunningActions: 1,
- StartedActions: 1,
- FinishedActions: 0,
- })
- parser.parseLine("[2/5] including out/soong/Android-aosp_arm.mk ...")
- output.Expect(t, Counts{
- TotalActions: 5,
- RunningActions: 1,
- StartedActions: 2,
- FinishedActions: 1,
- })
- parser.parseLine("[3/5] including a ...")
- msg = "a random message"
- parser.parseLine(msg)
- // Start the next line to flush the previous result
- parser.parseLine("[4/5] finishing legacy Make module parsing ...")
- msg += "\n"
- if output.result.Output != msg {
- t.Errorf("output for action did not match:\nwant: %q\n got: %q\n", msg, output.result.Output)
- }
- parser.parseLine("[5/5] writing legacy Make module rules ...")
- parser.parseLine("*kati*: verbose msg")
- parser.flushAction()
- if output.result.Output != "" {
- t.Errorf("expected no output for last action, but got %q", output.result.Output)
- }
- output.Expect(t, Counts{
- TotalActions: 5,
- RunningActions: 0,
- StartedActions: 5,
- FinishedActions: 5,
- })
- }
- func TestKatiExtraIncludes(t *testing.T) {
- status := &Status{}
- output := &lastOutput{}
- status.AddOutput(output)
- parser := &katiOutputParser{
- st: status.StartTool(),
- }
- parser.parseLine("[1/1] initializing legacy Make module parser ...")
- parser.parseLine("[2/5] including out/soong/Android-aosp_arm.mk ...")
- output.Expect(t, Counts{
- TotalActions: 5,
- RunningActions: 1,
- StartedActions: 2,
- FinishedActions: 1,
- })
- parser.parseLine("including a ...")
- output.Expect(t, Counts{
- TotalActions: 6,
- RunningActions: 1,
- StartedActions: 3,
- FinishedActions: 2,
- })
- parser.parseLine("including b ...")
- output.Expect(t, Counts{
- TotalActions: 7,
- RunningActions: 1,
- StartedActions: 4,
- FinishedActions: 3,
- })
- parser.parseLine("[3/5] finishing legacy Make module parsing ...")
- output.Expect(t, Counts{
- TotalActions: 7,
- RunningActions: 1,
- StartedActions: 5,
- FinishedActions: 4,
- })
- }
- func TestKatiFailOnError(t *testing.T) {
- status := &Status{}
- output := &lastOutput{}
- status.AddOutput(output)
- parser := &katiOutputParser{
- st: status.StartTool(),
- }
- parser.parseLine("[1/1] initializing legacy Make module parser ...")
- parser.parseLine("[2/5] inclduing out/soong/Android-aosp_arm.mk ...")
- parser.parseLine("build/make/tools/Android.mk:19: error: testing")
- parser.flushAction()
- if output.result.Error == nil {
- t.Errorf("Expected the last action to be marked as an error")
- }
- }
|