12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- // Copyright 2023 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- //go:build !(windows || js || wasip1)
- package main
- import (
- "regexp"
- "strings"
- "testing"
- )
- func TestExitCodeFilter(t *testing.T) {
- // Write text to the filter one character at a time.
- var out strings.Builder
- f, exitStr := newExitCodeFilter(&out)
- // Embed a "fake" exit code in the middle to check that we don't get caught on it.
- pre := "abc" + exitStr + "123def"
- text := pre + exitStr + `1`
- for i := 0; i < len(text); i++ {
- _, err := f.Write([]byte{text[i]})
- if err != nil {
- t.Fatal(err)
- }
- }
- // The "pre" output should all have been flushed already.
- if want, got := pre, out.String(); want != got {
- t.Errorf("filter should have already flushed %q, but flushed %q", want, got)
- }
- code, err := f.Finish()
- if err != nil {
- t.Fatal(err)
- }
- // Nothing more should have been written to out.
- if want, got := pre, out.String(); want != got {
- t.Errorf("want output %q, got %q", want, got)
- }
- if want := 1; want != code {
- t.Errorf("want exit code %d, got %d", want, code)
- }
- }
- func TestExitCodeMissing(t *testing.T) {
- var wantErr *regexp.Regexp
- check := func(text string) {
- t.Helper()
- var out strings.Builder
- f, exitStr := newExitCodeFilter(&out)
- if want := "exitcode="; want != exitStr {
- t.Fatalf("test assumes exitStr will be %q, but got %q", want, exitStr)
- }
- f.Write([]byte(text))
- _, err := f.Finish()
- // We should get a no exit code error
- if err == nil || !wantErr.MatchString(err.Error()) {
- t.Errorf("want error matching %s, got %s", wantErr, err)
- }
- // And it should flush all output (even if it looks
- // like we may be getting an exit code)
- if got := out.String(); text != got {
- t.Errorf("want full output %q, got %q", text, got)
- }
- }
- wantErr = regexp.MustCompile("^no exit code")
- check("abc")
- check("exitcode")
- check("exitcode=")
- check("exitcode=123\n")
- wantErr = regexp.MustCompile("^bad exit code: .* value out of range")
- check("exitcode=999999999999999999999999")
- }
|