| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package compile_test |
| |
| import ( |
| "testing" |
| |
| "v.io/x/ref/lib/vdl/build" |
| "v.io/x/ref/lib/vdl/compile" |
| "v.io/x/ref/lib/vdl/internal/vdltest" |
| ) |
| |
| func TestIdentConflict(t *testing.T) { |
| tests := []struct { |
| Name string |
| Data string |
| }{ |
| // Test conflicting identifiers. |
| {"Type", `type foo int64; type foo int64`}, |
| {"TypeMixed", `type FoO int64; type foo int64`}, |
| |
| {"Const", `const foo = true; const foo = true`}, |
| {"ConstMixed", `const FoO = true; const foo = true`}, |
| |
| {"Interface", `type foo interface{}; type foo interface{}`}, |
| {"InterfaceMixed", `type FoO interface{}; type foo interface{}`}, |
| |
| {"Error", `error foo() {"en":"a"}; error foo() {"en":"a"}`}, |
| {"ErrorMixed", `error FoO() {"en":"a"}; error foo() {"en":"a"}`}, |
| |
| {"TypeAndConst", `type foo int64; const foo = true`}, |
| {"TypeAndConstMixed", `type FoO int64; const foo = true`}, |
| {"TypeAndInterface", `type foo int64; type foo interface{}`}, |
| {"TypeAndInterfaceMixed", `type FoO int64; type foo interface{}`}, |
| {"TypeAndError", `type foo int64; error foo() {"en":"a"}`}, |
| {"TypeAndErrorMixed", `type foo int64; error FoO() {"en":"a"}`}, |
| |
| {"ConstAndInterface", `const foo = true; type foo interface{}`}, |
| {"ConstAndInterfaceMixed", `const FoO = true; type foo interface{}`}, |
| {"ConstAndError", `const foo = true; error foo() {"en":"a"}`}, |
| {"ConstAndErrorMixed", `const foo = true; error FoO() {"en":"a"}`}, |
| |
| {"InterfaceAndError", `type foo interface{}; error foo() {"en":"a"}`}, |
| {"InterfaceAndErrorMixed", `type foo interface{}; error FoO() {"en":"a"}`}, |
| } |
| for _, test := range tests { |
| env := compile.NewEnv(-1) |
| files := map[string]string{ |
| test.Name + ".vdl": "package a\n" + test.Data, |
| } |
| buildPkg := vdltest.FakeBuildPackage(test.Name, test.Name, files) |
| if pkg := build.BuildPackage(buildPkg, env); pkg != nil { |
| t.Errorf("%s got package, want nil", test.Name) |
| } |
| vdltest.ExpectResult(t, env.Errors, test.Name, "name conflict") |
| } |
| } |