| // Copyright 2017 syzkaller project authors. All rights reserved. |
| // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. |
| |
| package compiler |
| |
| import ( |
| "io/ioutil" |
| "path/filepath" |
| "reflect" |
| "testing" |
| |
| "github.com/google/syzkaller/pkg/ast" |
| "github.com/google/syzkaller/sys/targets" |
| ) |
| |
| func TestExtractConsts(t *testing.T) { |
| data, err := ioutil.ReadFile(filepath.Join("testdata", "consts.txt")) |
| if err != nil { |
| t.Fatalf("failed to read input file: %v", err) |
| } |
| desc := ast.Parse(data, "test", nil) |
| if desc == nil { |
| t.Fatalf("failed to parse input") |
| } |
| target := targets.List["linux"]["amd64"] |
| info := ExtractConsts(desc, target, func(pos ast.Pos, msg string) { |
| t.Fatalf("%v: %v", pos, msg) |
| }) |
| wantConsts := []string{"CONST1", "CONST10", "CONST11", "CONST12", "CONST13", |
| "CONST14", "CONST15", "CONST16", |
| "CONST2", "CONST3", "CONST4", "CONST5", |
| "CONST6", "CONST7", "CONST8", "CONST9", "__NR_bar", "__NR_foo"} |
| if !reflect.DeepEqual(info.Consts, wantConsts) { |
| t.Fatalf("got consts:\n%q\nwant:\n%q", info.Consts, wantConsts) |
| } |
| wantIncludes := []string{"foo/bar.h", "bar/foo.h"} |
| if !reflect.DeepEqual(info.Includes, wantIncludes) { |
| t.Fatalf("got includes:\n%q\nwant:\n%q", info.Includes, wantIncludes) |
| } |
| wantIncdirs := []string{"/foo", "/bar"} |
| if !reflect.DeepEqual(info.Incdirs, wantIncdirs) { |
| t.Fatalf("got incdirs:\n%q\nwant:\n%q", info.Incdirs, wantIncdirs) |
| } |
| wantDefines := map[string]string{ |
| "CONST1": "1", |
| "CONST2": "FOOBAR + 1", |
| } |
| if !reflect.DeepEqual(info.Defines, wantDefines) { |
| t.Fatalf("got defines:\n%q\nwant:\n%q", info.Defines, wantDefines) |
| } |
| } |
| |
| func TestConstErrors(t *testing.T) { |
| name := "consts_errors.txt" |
| em := ast.NewErrorMatcher(t, filepath.Join("testdata", name)) |
| desc := ast.Parse(em.Data, name, em.ErrorHandler) |
| if desc == nil { |
| em.DumpErrors(t) |
| t.Fatalf("parsing failed") |
| } |
| target := targets.List["linux"]["amd64"] |
| ExtractConsts(desc, target, em.ErrorHandler) |
| em.Check(t) |
| } |