add batch test, test function for continue-on-error flag

This commit is contained in:
iyz 2025-03-07 14:58:28 -05:00 committed by Manuel Rüger
parent 7f5144a1d1
commit d88b81a6b8
2 changed files with 95 additions and 0 deletions

View File

@ -1,7 +1,10 @@
package mark
import (
"bufio"
"bytes"
"os"
"os/exec"
"path"
"path/filepath"
"runtime"
@ -122,3 +125,89 @@ func TestCompileMarkdownStripNewlines(t *testing.T) {
test.EqualValues(string(html), actual, filename+" vs "+htmlname)
}
}
func TestMarkBinaryContinueOnError(t *testing.T) {
var batchTestsDir string
var markExePath string
wd, err := os.Getwd()
if err != nil {
t.Fatalf("Failed to get working directory: %v", err)
}
if filepath.Base(wd) == "markdown" { // when running individual test, "go test -v ./markdown -run TestMarkBinaryContinueOnError" - move up to root project directory
wd = filepath.Dir(wd)
}
batchTestsDir = filepath.Join(wd, "testdata/batch-tests")
markExePath = filepath.Join(wd, "mark-temp")
if runtime.GOOS == "windows" {
markExePath += ".exe" // add .exe extension on Windows
}
t.Log("Building temporary mark executable...")
buildCmd := exec.Command("go", "build", "-o", markExePath)
var buildOutput bytes.Buffer
if err := buildCmd.Run(); err != nil {
t.Fatalf("Failed to build mark executable: %v\nOutput: %s", err, buildOutput.String())
}
if _, err := os.Stat(markExePath); err != nil {
t.Fatalf("Test executable not found at %s: %v", markExePath, err)
}
if runtime.GOOS != "windows" {
if err := os.Chmod(markExePath, 0755); err != nil {
t.Fatalf("Failed to make test executable executable: %v", err)
}
}
defer os.Remove(markExePath) // remove created temporary executable at end of test
t.Logf("Using temporary executable: %s", markExePath)
t.Logf("Using batch tests directory: %s", batchTestsDir)
filePath := filepath.Join(batchTestsDir, "*.md")
cmd := exec.Command(markExePath, "--compile-only", "--continue-on-error", "-files", filePath)
t.Logf("Using file pattern: %s", filePath)
t.Logf("Command: %s %s", cmd.Path, strings.Join(cmd.Args[1:], " "))
var stdout, stderr bytes.Buffer
cmd.Stdout = &stdout
cmd.Stderr = &stderr
t.Log("Running command...")
err = cmd.Run()
if err != nil {
t.Logf("Command exited with error: %v", err)
if _, ok := err.(*exec.ExitError); !ok {
t.Fatalf("Failed to run mark binary: %v", err)
}
}
combinedOutput := stdout.String() + stderr.String()
var errorLines []string
processedFiles := 0
t.Log("Complete output:")
t.Log(combinedOutput)
scanner := bufio.NewScanner(strings.NewReader(combinedOutput))
for scanner.Scan() {
line := scanner.Text()
if strings.Contains(line, "ERROR") {
errorLines = append(errorLines, line)
}
if strings.Contains(line, "processing") {
processedFiles++;
}
}
test := assert.New(t)
test.EqualValues(3, len(errorLines))
test.Contains(errorLines[0], "ERROR")
test.Contains(errorLines[1], "ERROR")
test.Contains(errorLines[2], "ERROR")
}

6
testdata/batch-tests/errord-test.md vendored Normal file
View File

@ -0,0 +1,6 @@
## Foo
> **TL;DR:** Thingy!
> More stuff
Foo