Review round 1 for the Node build module: build depth (1490), bin scripts for the test script (1491), toolchain.reported and its stream (1483, 1488); delta part 3 of 4
This commit is contained in:
@@ -2,6 +2,8 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -159,3 +161,39 @@ func TestAWorkspaceOutsideTheWorkDirectoryIsRefused(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 1491 (review 6): --no-bin-links leaves the toolchain no bin directory, so `npm run build` found no tsc or esbuild
|
||||
// and exited 127, which read as a failed test. The workspace now has a bin directory of small shell scripts (files,
|
||||
// not links) that call the toolchain's tsc and esbuild, first on the PATH of the test script.
|
||||
func TestTheTestScriptFindsTscAndEsbuildOnItsPath(t *testing.T) {
|
||||
m, f, work := newMachine(t)
|
||||
workspaceWith(t, work, map[string]string{"package.json": `{"scripts":{"test":"tsc && esbuild"}}`})
|
||||
if _, err := m.test(context.Background(), testArgs("unit")); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
bin := filepath.Join(work, "w1", "bin")
|
||||
nm := filepath.Join(m.toolchainDir(), "node_modules")
|
||||
for name, want := range map[string]string{
|
||||
"tsc": "exec node '" + nm + "/typescript/bin/tsc' \"$@\"",
|
||||
"esbuild": "exec '" + nm + "/esbuild/bin/esbuild' \"$@\"",
|
||||
} {
|
||||
info, err := os.Lstat(filepath.Join(bin, name))
|
||||
if err != nil || !info.Mode().IsRegular() || info.Mode().Perm()&0o111 == 0 {
|
||||
t.Fatalf("bin/%s: %v %v, want an executable file", name, info, err)
|
||||
}
|
||||
raw, _ := os.ReadFile(filepath.Join(bin, name))
|
||||
if !strings.HasPrefix(string(raw), "#!/bin/sh\n") || !strings.Contains(string(raw), want) {
|
||||
t.Errorf("bin/%s = %q, want a script calling the toolchain's program", name, raw)
|
||||
}
|
||||
}
|
||||
npm := f.calls[len(f.calls)-1]
|
||||
path := ""
|
||||
for _, e := range npm.env {
|
||||
if strings.HasPrefix(e, "PATH=") {
|
||||
path = strings.TrimPrefix(e, "PATH=") // the last PATH wins
|
||||
}
|
||||
}
|
||||
if npm.name != "npm" || !strings.HasPrefix(path, bin+":") {
|
||||
t.Errorf("npm ran with PATH %q, want %s first", path, bin)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user