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  }