From 87160e8dd680453674b5290d06f0a095f451b811 Mon Sep 17 00:00:00 2001 From: iyz Date: Sat, 8 Mar 2025 17:42:08 -0500 Subject: [PATCH] change COE flag testing logic to use internal functions --- markdown/markdown_test.go | 135 +++++++++++++------------------------- 1 file changed, 47 insertions(+), 88 deletions(-) diff --git a/markdown/markdown_test.go b/markdown/markdown_test.go index 98a8ee9..3fc3aa2 100644 --- a/markdown/markdown_test.go +++ b/markdown/markdown_test.go @@ -1,10 +1,7 @@ package mark import ( - "bufio" - "bytes" "os" - "os/exec" "path" "path/filepath" "runtime" @@ -13,6 +10,8 @@ import ( "github.com/kovetskiy/mark/stdlib" "github.com/stretchr/testify/assert" + "github.com/urfave/cli/v2" + "github.com/urfave/cli/v2/altsrc" ) func loadData(t *testing.T, filename, variant string) ([]byte, string, []byte) { @@ -69,7 +68,7 @@ func TestCompileMarkdownDropH1(t *testing.T) { test := assert.New(t) - testcases, err := filepath.Glob("testdata/*.md") + testcases, err := filepath.Glob("testdata/*.md") if err != nil { panic(err) } @@ -102,7 +101,7 @@ func TestCompileMarkdownStripNewlines(t *testing.T) { test := assert.New(t) - testcases, err := filepath.Glob("testdata/*.md") + testcases, err := filepath.Glob("testdata/*.md") if err != nil { panic(err) } @@ -113,12 +112,12 @@ func TestCompileMarkdownStripNewlines(t *testing.T) { panic(err) } var variant string - switch filename { - case "testdata/quotes.md", "testdata/codes.md", "testdata/newlines.md", "testdata/macro-include.md": - variant = "-stripnewlines" - default: - variant = "" - } + switch filename { + case "testdata/quotes.md", "testdata/codes.md", "testdata/newlines.md", "testdata/macro-include.md": + variant = "-stripnewlines" + default: + variant = "" + } markdown, htmlname, html := loadData(t, filename, variant) actual, _ := CompileMarkdown(markdown, lib, filename, "", 1.0, false, true) @@ -126,88 +125,48 @@ func TestCompileMarkdownStripNewlines(t *testing.T) { } } -func TestMarkBinaryContinueOnError(t *testing.T) { - var batchTestsDir string - var markExePath string +func TestContinueOnError(t *testing.T) { + const ( + markFileName = "temp-mark" + ) - 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) + var flags = []cli.Flag{ + altsrc.NewStringFlag(&cli.StringFlag{ + Name: "files", + Aliases: []string{"f"}, + Value: "", + Usage: "use specified markdown file(s) for converting to html. Supports file globbing patterns (needs to be quoted).", + TakesFile: true, + EnvVars: []string{"MARK_FILES"}, + }), + altsrc.NewBoolFlag(&cli.BoolFlag{ + Name: "continue-on-error", + Value: false, + Usage: "don't exit if an error occurs while processing a file, continue processing remaining files.", + EnvVars: []string{"MARK_CONTINUE_ON_ERROR"}, + }), + altsrc.NewBoolFlag(&cli.BoolFlag{ + Name: "compile-only", + Value: false, + Usage: "show resulting HTML and don't update Confluence page content.", + EnvVars: []string{"MARK_COMPILE_ONLY"}, + }), } - batchTestsDir = filepath.Join(wd, "testdata/batch-tests") - - markExePath = filepath.Join(wd, "mark-temp") - if runtime.GOOS == "windows" { - markExePath += ".exe" // add .exe extension on Windows + app := &cli.App{ + Name: markFileName, + Flags: flags, + EnableBashCompletion: true, + HideHelpCommand: true, + Action: RunMark, } - 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++; - } + filePath := filepath.Join("testdata", "batch-tests", "*.md") + argList := []string{ + "--compile-only", "--continue-on-error", "-files", filePath, } + err := app.Run(argList) test := assert.New(t) - test.EqualValues(3, len(errorLines)) - test.Contains(errorLines[0], "ERROR") - test.Contains(errorLines[1], "ERROR") - test.Contains(errorLines[2], "ERROR") -} \ No newline at end of file + test.NoError(err, "App should run without errors when continue-on-error is enabled") +}