blob: d6349102acd896aa591ace8deb8257aa52387d42 [file] [log] [blame]
// Copyright 2021 The Fuchsia 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 fidlgen_cpp
import (
"testing"
"go.fuchsia.dev/fuchsia/tools/fidl/lib/fidlgen"
)
// Define equality of name types for testing purposes.
func (n name) Equal(o name) bool {
return n.String() == o.String()
}
// Helper to parse compound identifiers
func parseIdent(s string) fidlgen.CompoundIdentifier {
return fidlgen.EncodedCompoundIdentifier(s).Parts()
}
func TestChangeIfReserved(t *testing.T) {
ctx := structMemberContext.NameContext
assertEqual(t, changeIfReserved("not_reserved", ctx), "not_reserved")
assertEqual(t, changeIfReserved("foobar", ctx), "foobar")
// C++ keyword
assertEqual(t, changeIfReserved("switch", ctx), "switch_")
// Prevalent C constants
assertEqual(t, changeIfReserved("EPERM", ctx), "EPERM_")
// Bindings API
assertEqual(t, changeIfReserved("Unknown", ctx), "Unknown_")
}
func TestBitsMemberContext(t *testing.T) {
// allow nameVariant.String() to work:
currentVariant = testingVariant
assertEqual(t,
bitsMemberContext.transform(fidlgen.Identifier("foo")),
nameVariants{
Natural: makeName("foo"),
Unified: makeName("foo"),
Wire: makeName("kFoo"),
})
assertEqual(t,
bitsMemberContext.transform(fidlgen.Identifier("FOO_BAR")),
nameVariants{
Natural: makeName("FOO_BAR"),
Unified: makeName("FOO_BAR"),
Wire: makeName("kFooBar"),
})
assertEqual(t,
bitsMemberContext.transform(fidlgen.Identifier("kFoo")),
nameVariants{
Natural: makeName("kFoo"),
Unified: makeName("kFoo"),
Wire: makeName("kFoo"),
})
assertEqual(t,
bitsMemberContext.transform(fidlgen.Identifier("switch")),
nameVariants{
Natural: makeName("switch_"),
Unified: makeName("switch_"),
Wire: makeName("kSwitch"),
})
assertEqual(t,
bitsMemberContext.transform(fidlgen.Identifier("mask")),
nameVariants{
Natural: makeName("mask"),
Unified: makeName("mask"),
Wire: makeName("kMask_"),
})
}
func TestEnumMemberContext(t *testing.T) {
// allow nameVariant.String() to work:
currentVariant = testingVariant
assertEqual(t,
enumMemberContext.transform(fidlgen.Identifier("foo")),
nameVariants{
Natural: makeName("foo"),
Unified: makeName("foo"),
Wire: makeName("kFoo"),
})
assertEqual(t,
enumMemberContext.transform(fidlgen.Identifier("FOO_BAR")),
nameVariants{
Natural: makeName("FOO_BAR"),
Unified: makeName("FOO_BAR"),
Wire: makeName("kFooBar"),
})
assertEqual(t,
enumMemberContext.transform(fidlgen.Identifier("kFoo")),
nameVariants{
Natural: makeName("kFoo"),
Unified: makeName("kFoo"),
Wire: makeName("kFoo"),
})
assertEqual(t,
enumMemberContext.transform(fidlgen.Identifier("switch")),
nameVariants{
Natural: makeName("switch_"),
Unified: makeName("switch_"),
Wire: makeName("kSwitch"),
})
assertEqual(t,
enumMemberContext.transform(fidlgen.Identifier("mask")),
nameVariants{
Natural: makeName("mask"),
Unified: makeName("mask"),
Wire: makeName("kMask"),
})
}
func TestStructMemberContext(t *testing.T) {
// allow nameVariant.String() to work:
currentVariant = testingVariant
assertEqual(t,
structMemberContext.transform(fidlgen.Identifier("foo")),
nameVariants{
Natural: makeName("foo"),
Unified: makeName("foo"),
Wire: makeName("foo"),
})
assertEqual(t,
structMemberContext.transform(fidlgen.Identifier("FOO_BAR")),
nameVariants{
Natural: makeName("FOO_BAR"),
Unified: makeName("FOO_BAR"),
Wire: makeName("foo_bar"),
})
assertEqual(t,
structMemberContext.transform(fidlgen.Identifier("FooBar")),
nameVariants{
Natural: makeName("FooBar"),
Unified: makeName("FooBar"),
Wire: makeName("foo_bar"),
})
assertEqual(t,
structMemberContext.transform(fidlgen.Identifier("switch")),
nameVariants{
Natural: makeName("switch_"),
Unified: makeName("switch_"),
Wire: makeName("switch_"),
})
}
func TestTableMemberContext(t *testing.T) {
// allow nameVariant.String() to work:
currentVariant = testingVariant
assertEqual(t,
tableMemberContext.transform(fidlgen.Identifier("foo")),
nameVariants{
Natural: makeName("foo"),
Unified: makeName("foo"),
Wire: makeName("foo"),
})
assertEqual(t,
tableMemberContext.transform(fidlgen.Identifier("FOO_BAR")),
nameVariants{
Natural: makeName("FOO_BAR"),
Unified: makeName("FOO_BAR"),
Wire: makeName("foo_bar"),
})
assertEqual(t,
tableMemberContext.transform(fidlgen.Identifier("FooBar")),
nameVariants{
Natural: makeName("FooBar"),
Unified: makeName("FooBar"),
Wire: makeName("foo_bar"),
})
assertEqual(t,
tableMemberContext.transform(fidlgen.Identifier("switch")),
nameVariants{
Natural: makeName("switch_"),
Unified: makeName("switch_"),
Wire: makeName("switch_"),
})
}
func TestUnionMemberContext(t *testing.T) {
// allow nameVariant.String() to work:
currentVariant = testingVariant
assertEqual(t,
unionMemberContext.transform(fidlgen.Identifier("foo")),
nameVariants{
Natural: makeName("foo"),
Unified: makeName("foo"),
Wire: makeName("foo"),
})
assertEqual(t,
unionMemberContext.transform(fidlgen.Identifier("FOO_BAR")),
nameVariants{
Natural: makeName("FOO_BAR"),
Unified: makeName("FOO_BAR"),
Wire: makeName("foo_bar"),
})
assertEqual(t,
unionMemberContext.transform(fidlgen.Identifier("FooBar")),
nameVariants{
Natural: makeName("FooBar"),
Unified: makeName("FooBar"),
Wire: makeName("foo_bar"),
})
assertEqual(t,
unionMemberContext.transform(fidlgen.Identifier("switch")),
nameVariants{
Natural: makeName("switch_"),
Unified: makeName("switch_"),
Wire: makeName("switch_"),
})
}
func TestUnionMemberTagContext(t *testing.T) {
// allow nameVariant.String() to work:
currentVariant = testingVariant
assertEqual(t,
unionMemberTagContext.transform(fidlgen.Identifier("foo")),
nameVariants{
Natural: makeName("kFoo"),
Unified: makeName("kFoo"),
Wire: makeName("kFoo"),
})
assertEqual(t,
unionMemberTagContext.transform(fidlgen.Identifier("FOO_BAR")),
nameVariants{
Natural: makeName("kFooBar"),
Unified: makeName("kFooBar"),
Wire: makeName("kFooBar"),
})
assertEqual(t,
unionMemberTagContext.transform(fidlgen.Identifier("FooBar")),
nameVariants{
Natural: makeName("kFooBar"),
Unified: makeName("kFooBar"),
Wire: makeName("kFooBar"),
})
assertEqual(t,
unionMemberTagContext.transform(fidlgen.Identifier("switch")),
nameVariants{
Natural: makeName("kSwitch"),
Unified: makeName("kSwitch"),
Wire: makeName("kSwitch"),
})
}
func TestMethodNameContext(t *testing.T) {
// allow nameVariant.String() to work:
currentVariant = testingVariant
assertEqual(t,
methodNameContext.transform(fidlgen.Identifier("foo")),
nameVariants{
Natural: makeName("foo"),
Unified: makeName("foo"),
Wire: makeName("Foo"),
})
assertEqual(t,
methodNameContext.transform(fidlgen.Identifier("FOO_BAR")),
nameVariants{
Natural: makeName("FOO_BAR"),
Unified: makeName("FOO_BAR"),
Wire: makeName("FooBar"),
})
assertEqual(t,
methodNameContext.transform(fidlgen.Identifier("FooBar")),
nameVariants{
Natural: makeName("FooBar"),
Unified: makeName("FooBar"),
Wire: makeName("FooBar"),
})
assertEqual(t,
methodNameContext.transform(fidlgen.Identifier("switch")),
nameVariants{
Natural: makeName("switch_"),
Unified: makeName("switch_"),
Wire: makeName("Switch"),
})
}
func TestServiceMemberContext(t *testing.T) {
// allow nameVariant.String() to work:
currentVariant = testingVariant
assertEqual(t,
serviceMemberContext.transform(fidlgen.Identifier("foo")),
nameVariants{
Natural: makeName("foo"),
Unified: makeName("foo"),
Wire: makeName("foo"),
})
assertEqual(t,
serviceMemberContext.transform(fidlgen.Identifier("FOO_BAR")),
nameVariants{
Natural: makeName("FOO_BAR"),
Unified: makeName("FOO_BAR"),
Wire: makeName("foo_bar"),
})
assertEqual(t,
serviceMemberContext.transform(fidlgen.Identifier("FooBar")),
nameVariants{
Natural: makeName("FooBar"),
Unified: makeName("FooBar"),
Wire: makeName("foo_bar"),
})
assertEqual(t,
serviceMemberContext.transform(fidlgen.Identifier("switch")),
nameVariants{
Natural: makeName("switch_"),
Unified: makeName("switch_"),
Wire: makeName("switch_"),
})
}
func TestConstantContext(t *testing.T) {
// allow nameVariant.String() to work:
currentVariant = testingVariant
assertEqual(t,
constantContext.transform(parseIdent("fidl.test/foo")),
nameVariants{
Natural: makeName("fidl::test::foo"),
Unified: makeName("fidl_test::foo"),
Wire: makeName("fidl_test::wire::kFoo"),
})
assertEqual(t,
constantContext.transform(parseIdent("fidl.test/FOO_BAR")),
nameVariants{
Natural: makeName("fidl::test::FOO_BAR"),
Unified: makeName("fidl_test::FOO_BAR"),
Wire: makeName("fidl_test::wire::kFooBar"),
})
assertEqual(t,
constantContext.transform(parseIdent("fidl.test/kFoo")),
nameVariants{
Natural: makeName("fidl::test::kFoo"),
Unified: makeName("fidl_test::kFoo"),
Wire: makeName("fidl_test::wire::kFoo"),
})
assertEqual(t,
constantContext.transform(parseIdent("fidl.test/switch")),
nameVariants{
Natural: makeName("fidl::test::switch_"),
Unified: makeName("fidl_test::switch_"),
Wire: makeName("fidl_test::wire::kSwitch"),
})
}
func TestTypeContext(t *testing.T) {
// allow nameVariant.String() to work:
currentVariant = testingVariant
assertEqual(t,
typeContext.transform(parseIdent("fidl.test/foo")),
nameVariants{
Natural: makeName("fidl::test::foo"),
Unified: makeName("fidl_test::foo"),
Wire: makeName("fidl_test::wire::Foo"),
})
assertEqual(t,
typeContext.transform(parseIdent("fidl.test/Foo")),
nameVariants{
Natural: makeName("fidl::test::Foo"),
Unified: makeName("fidl_test::Foo"),
Wire: makeName("fidl_test::wire::Foo"),
})
assertEqual(t,
typeContext.transform(parseIdent("fidl.test/FidlType")),
nameVariants{
Natural: makeName("fidl::test::FidlType_"),
Unified: makeName("fidl_test::FidlType_"),
Wire: makeName("fidl_test::wire::FidlType_"),
})
assertEqual(t,
typeContext.transform(parseIdent("fidl.test/FOO_BAR")),
nameVariants{
Natural: makeName("fidl::test::FOO_BAR"),
Unified: makeName("fidl_test::FOO_BAR"),
Wire: makeName("fidl_test::wire::FooBar"),
})
assertEqual(t,
typeContext.transform(parseIdent("fidl.test/switch")),
nameVariants{
Natural: makeName("fidl::test::switch_"),
Unified: makeName("fidl_test::switch_"),
Wire: makeName("fidl_test::wire::Switch"),
})
}
func TestServiceContext(t *testing.T) {
// allow nameVariant.String() to work:
currentVariant = testingVariant
assertEqual(t,
serviceContext.transform(parseIdent("fidl.test/foo")),
nameVariants{
Natural: makeName("fidl::test::foo"),
Unified: makeName("fidl::test::foo"),
Wire: makeName("fidl_test::Foo"),
})
assertEqual(t,
serviceContext.transform(parseIdent("fidl.test/Foo")),
nameVariants{
Natural: makeName("fidl::test::Foo"),
Unified: makeName("fidl::test::Foo"),
Wire: makeName("fidl_test::Foo"),
})
assertEqual(t,
serviceContext.transform(parseIdent("fidl.test/FidlType")),
nameVariants{
Natural: makeName("fidl::test::FidlType_"),
Unified: makeName("fidl::test::FidlType_"),
Wire: makeName("fidl_test::FidlType_"),
})
assertEqual(t,
serviceContext.transform(parseIdent("fidl.test/FOO_BAR")),
nameVariants{
Natural: makeName("fidl::test::FOO_BAR"),
Unified: makeName("fidl::test::FOO_BAR"),
Wire: makeName("fidl_test::FooBar"),
})
assertEqual(t,
serviceContext.transform(parseIdent("fidl.test/switch")),
nameVariants{
Natural: makeName("fidl::test::switch_"),
Unified: makeName("fidl::test::switch_"),
Wire: makeName("fidl_test::Switch"),
})
}
func TestProtocolContext(t *testing.T) {
// allow nameVariant.String() to work:
currentVariant = testingVariant
assertEqual(t,
protocolContext.transform(parseIdent("fidl.test/foo")),
nameVariants{
Natural: makeName("fidl::test::foo"),
Unified: makeName("fidl::test::foo"),
Wire: makeName("fidl_test::Foo"),
})
assertEqual(t,
protocolContext.transform(parseIdent("fidl.test/Foo")),
nameVariants{
Natural: makeName("fidl::test::Foo"),
Unified: makeName("fidl::test::Foo"),
Wire: makeName("fidl_test::Foo"),
})
assertEqual(t,
protocolContext.transform(parseIdent("fidl.test/FidlType")),
nameVariants{
Natural: makeName("fidl::test::FidlType_"),
Unified: makeName("fidl::test::FidlType_"),
Wire: makeName("fidl_test::FidlType_"),
})
assertEqual(t,
protocolContext.transform(parseIdent("fidl.test/FOO_BAR")),
nameVariants{
Natural: makeName("fidl::test::FOO_BAR"),
Unified: makeName("fidl::test::FOO_BAR"),
Wire: makeName("fidl_test::FooBar"),
})
assertEqual(t,
protocolContext.transform(parseIdent("fidl.test/switch")),
nameVariants{
Natural: makeName("fidl::test::switch_"),
Unified: makeName("fidl::test::switch_"),
Wire: makeName("fidl_test::Switch"),
})
}
func TestNsComponentContext(t *testing.T) {
// allow nameVariant.String() to work:
currentVariant = testingVariant
assertEqual(t, changeIfReserved("foo", nsComponentContext), "foo")
assertEqual(t, changeIfReserved("using", nsComponentContext), "using_")
}