| // Copyright 2013 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| // golang.org/issue/6612 | |
| // Test new scheme for deciding whether C.name is an expression, type, constant. | |
| // Clang silences some warnings when the name is a #defined macro, so test those too | |
| // (even though we now use errors exclusively, not warnings). | |
| package cgotest | |
| /* | |
| void myfunc(void) {} | |
| int myvar = 5; | |
| const char *mytext = "abcdef"; | |
| typedef int mytype; | |
| enum { | |
| myenum = 1234, | |
| }; | |
| #define myfunc_def myfunc | |
| #define myvar_def myvar | |
| #define mytext_def mytext | |
| #define mytype_def mytype | |
| #define myenum_def myenum | |
| #define myint_def 12345 | |
| #define myfloat_def 1.5 | |
| #define mystring_def "hello" | |
| */ | |
| import "C" | |
| import "testing" | |
| func testNaming(t *testing.T) { | |
| C.myfunc() | |
| C.myfunc_def() | |
| if v := C.myvar; v != 5 { | |
| t.Errorf("C.myvar = %d, want 5", v) | |
| } | |
| if v := C.myvar_def; v != 5 { | |
| t.Errorf("C.myvar_def = %d, want 5", v) | |
| } | |
| if s := C.GoString(C.mytext); s != "abcdef" { | |
| t.Errorf("C.mytext = %q, want %q", s, "abcdef") | |
| } | |
| if s := C.GoString(C.mytext_def); s != "abcdef" { | |
| t.Errorf("C.mytext_def = %q, want %q", s, "abcdef") | |
| } | |
| if c := C.myenum; c != 1234 { | |
| t.Errorf("C.myenum = %v, want 1234", c) | |
| } | |
| if c := C.myenum_def; c != 1234 { | |
| t.Errorf("C.myenum_def = %v, want 1234", c) | |
| } | |
| { | |
| const c = C.myenum | |
| if c != 1234 { | |
| t.Errorf("C.myenum as const = %v, want 1234", c) | |
| } | |
| } | |
| { | |
| const c = C.myenum_def | |
| if c != 1234 { | |
| t.Errorf("C.myenum as const = %v, want 1234", c) | |
| } | |
| } | |
| if c := C.myint_def; c != 12345 { | |
| t.Errorf("C.myint_def = %v, want 12345", c) | |
| } | |
| { | |
| const c = C.myint_def | |
| if c != 12345 { | |
| t.Errorf("C.myint as const = %v, want 12345", c) | |
| } | |
| } | |
| if c := C.myfloat_def; c != 1.5 { | |
| t.Errorf("C.myint_def = %v, want 1.5", c) | |
| } | |
| { | |
| const c = C.myfloat_def | |
| if c != 1.5 { | |
| t.Errorf("C.myint as const = %v, want 1.5", c) | |
| } | |
| } | |
| if s := C.mystring_def; s != "hello" { | |
| t.Errorf("C.mystring_def = %q, want %q", s, "hello") | |
| } | |
| } |