modernc.org/ccgo/v3@v3.16.14/lib/cdb_test.go (about) 1 package ccgo 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "reflect" 7 "strings" 8 "testing" 9 ) 10 11 func TestCDBWriter(t *testing.T) { 12 var b bytes.Buffer 13 14 wr := newCDBWriter(&b) 15 16 items := []cdbItem{ 17 { 18 Arguments: []string{"hello", "there"}, 19 Directory: "/work", 20 }, 21 { 22 Arguments: []string{"good", "bye"}, 23 Directory: "/work/src", 24 }, 25 } 26 27 for _, it := range items { 28 wr.add(it) 29 } 30 31 if err := wr.finish(); err != nil { 32 t.Fatal(err) 33 } 34 35 var got []cdbItem 36 if err := json.Unmarshal(b.Bytes(), &got); err != nil { 37 t.Fatal(err) 38 } 39 40 if !reflect.DeepEqual(got, items) { 41 t.Errorf("got items\n%#v\nwant\n%#v", got, items) 42 } 43 44 if !strings.HasPrefix(b.String(), "[\n ") { 45 t.Errorf("got non-pretty-printed output:\n%s", b.String()) 46 } 47 } 48 49 func TestMakeDParser(t *testing.T) { 50 in := `CreateProcess(C:\Program Files\CodeBlocks\MinGW\bin\gcc.exe,gcc -O3 -Wall -c -o adler32.o adler32.c,...)` 51 got, err := makeDParser(in) 52 if err != nil { 53 t.Fatal(err) 54 } 55 56 want := []string{`C:\Program Files\CodeBlocks\MinGW\bin\gcc.exe`, "-O3", "-Wall", "-c", "-o", "adler32.o", "adler32.c"} 57 if !reflect.DeepEqual(got, want) { 58 t.Errorf("got args %v\nwant %v", got, want) 59 } 60 } 61 62 func TestStraceParser(t *testing.T) { 63 in := `execve("/usr/bin/ar", ["ar", "cr", "libtcl8.6.a", "regcomp.o", "bn_s_mp_sqr.o", "bn_s_mp_sub.o"], 0x55e6bbf49648 /* 60 vars */) = 0` 64 got, err := straceParser(in) 65 if err != nil { 66 t.Fatal(err) 67 } 68 69 want := []string{"/usr/bin/ar", "cr", "libtcl8.6.a", "regcomp.o", "bn_s_mp_sqr.o", "bn_s_mp_sub.o"} 70 if !reflect.DeepEqual(got, want) { 71 t.Errorf("got args %v\nwant %v", got, want) 72 } 73 }