mirror of
https://github.com/charmbracelet/crush.git
synced 2026-05-30 18:47:33 +00:00
For example, the GitHub MCP server can fetch diffs. This makes those diffs render as such, rather than just showing their raw output.
153 lines
2.4 KiB
Go
153 lines
2.4 KiB
Go
package diffdetect
|
|
|
|
import "testing"
|
|
|
|
func TestInspect(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tests := []struct {
|
|
name string
|
|
content string
|
|
want Signal
|
|
}{
|
|
{
|
|
name: "git unified diff",
|
|
content: `diff --git a/main.go b/main.go
|
|
--- a/main.go
|
|
+++ b/main.go
|
|
@@ -1,2 +1,3 @@
|
|
package main
|
|
+import "fmt"
|
|
`,
|
|
want: Signal{HasHunk: true, HasFileHeader: true, HasGitHeader: true},
|
|
},
|
|
{
|
|
name: "non-git unified diff",
|
|
content: `--- old.c
|
|
+++ old.c
|
|
@@ -1 +1 @@
|
|
-old
|
|
+new
|
|
`,
|
|
want: Signal{HasHunk: true, HasFileHeader: true, HasGitHeader: false},
|
|
},
|
|
{
|
|
name: "plain text",
|
|
content: "hello world",
|
|
want: Signal{},
|
|
},
|
|
{
|
|
name: "hunk only",
|
|
content: "@@ -1 +1 @@\n-old\n+new\n",
|
|
want: Signal{HasHunk: true},
|
|
},
|
|
{
|
|
name: "headers only",
|
|
content: "--- a/file\n+++ b/file\n",
|
|
want: Signal{HasFileHeader: true},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
got := Inspect(tt.content)
|
|
if got != tt.want {
|
|
t.Errorf("Inspect() = %+v, want %+v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestIsUnifiedDiff(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tests := []struct {
|
|
name string
|
|
content string
|
|
want bool
|
|
}{
|
|
{
|
|
name: "github-style multi-file diff",
|
|
content: `diff --git a/one.txt b/one.txt
|
|
--- a/one.txt
|
|
+++ b/one.txt
|
|
@@ -1 +1 @@
|
|
-a
|
|
+b
|
|
diff --git a/two.txt b/two.txt
|
|
--- a/two.txt
|
|
+++ b/two.txt
|
|
@@ -1 +1 @@
|
|
-c
|
|
+d
|
|
`,
|
|
want: true,
|
|
},
|
|
{
|
|
name: "non-git unified patch",
|
|
content: `--- a/old.c
|
|
+++ b/old.c
|
|
@@ -1,3 +1,4 @@
|
|
#include <stdio.h>
|
|
-int main() {
|
|
+int main(int argc, char **argv) {
|
|
return 0;
|
|
}
|
|
`,
|
|
want: true,
|
|
},
|
|
{
|
|
name: "new file from dev null",
|
|
content: `--- /dev/null
|
|
+++ newfile.txt
|
|
@@ -0,0 +1,2 @@
|
|
+hello
|
|
+world
|
|
`,
|
|
want: true,
|
|
},
|
|
{
|
|
name: "markdown false positive candidate",
|
|
content: `- Item one
|
|
- Item two
|
|
+ Bonus item
|
|
- Item three
|
|
`,
|
|
want: false,
|
|
},
|
|
{
|
|
name: "headers without hunk",
|
|
content: `--- a/somefile.txt
|
|
+++ b/somefile.txt
|
|
Just some content here
|
|
No hunk markers at all
|
|
`,
|
|
want: false,
|
|
},
|
|
{
|
|
name: "hunk without headers",
|
|
content: `@@ -1,3 +1,4 @@
|
|
some line
|
|
-another line
|
|
+changed line
|
|
`,
|
|
want: false,
|
|
},
|
|
{
|
|
name: "empty",
|
|
content: "",
|
|
want: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
if got := IsUnifiedDiff(tt.content); got != tt.want {
|
|
t.Errorf("IsUnifiedDiff() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|