blob: 1659512e511e9ee59c2d7d41332c59be628f985e [file] [log] [blame]
package parser
import (
"mojom/mojom_parser/mojom"
"testing"
)
func TestAttachComments(t *testing.T) {
checkEq := func(expected, actual interface{}) {
if expected != actual {
t.Fatalf("Failed check: Expected (%v), Actual (%v)", expected, actual)
}
}
source := `
// TopComment
// NextComment
/* LeftAttrsComment */[Key1="SomeModule", // AttrsRightComment
Key2=10, // Key2AttrRightComment
Key3=12]
module hello.world;
import "import1";
import "import2";
interface InterfaceFoo {
Method1(int32 in_param1 /* InParam1Comment */, int32 in_param2); // Method1RightComment
};
// FinalComments
`
descriptor := mojom.NewMojomDescriptor()
parser := MakeParser("TestAttachComments", "TestAttachComments", source, descriptor, nil)
parser.Parse()
if !parser.OK() {
t.Errorf("Parser was not supposed to fail: %v", parser.GetError().Error())
}
mojomFile := parser.GetMojomFile()
comments := parser.GetComments()
mojom.AttachCommentsToMojomFile(mojomFile, comments)
topAttrComments := mojomFile.Attributes.AttachedComments()
checkEq("// TopComment", topAttrComments.Above[0].Text)
checkEq("// NextComment", topAttrComments.Above[1].Text)
checkEq("/* LeftAttrsComment */", topAttrComments.Left[0].Text)
checkEq("// AttrsRightComment", topAttrComments.Right[0].Text)
key2AttrComments := mojomFile.Attributes.List[1].AttachedComments()
checkEq("// Key2AttrRightComment", key2AttrComments.Right[0].Text)
interfaceFoo := mojomFile.DeclaredObjects[0].(*mojom.MojomInterface)
// Sanity-check that we got the right object.
checkEq("InterfaceFoo", interfaceFoo.SimpleName())
method1 := interfaceFoo.MethodsByOrdinal[0]
// Sanity-check that we got the right method.
checkEq("Method1", method1.SimpleName())
inParam1 := method1.Parameters.Fields[0]
// Sanity-check that we got the right field.
checkEq("in_param1", inParam1.SimpleName())
checkEq("// Method1RightComment", method1.AttachedComments().Right[0].Text)
checkEq("/* InParam1Comment */", inParam1.AttachedComments().Right[0].Text)
checkEq("// FinalComments", mojomFile.FinalComments[0].Text)
}
func TestEmptyFile(t *testing.T) {
descriptor := mojom.NewMojomDescriptor()
parser := MakeParser("TestEmptyFile", "TestEmptyFile", "", descriptor, nil)
parser.Parse()
mojomFile := parser.GetMojomFile()
comments := parser.GetComments()
mojom.AttachCommentsToMojomFile(mojomFile, comments)
}
func TestNoComments(t *testing.T) {
source := `
module hello.world;
interface InterfaceFoo {
Method1(int32 in_param1);
};
`
descriptor := mojom.NewMojomDescriptor()
parser := MakeParser("TestNoComments", "TestNoComments", source, descriptor, nil)
parser.Parse()
mojomFile := parser.GetMojomFile()
comments := parser.GetComments()
mojom.AttachCommentsToMojomFile(mojomFile, comments)
}
func TestOnlyComments(t *testing.T) {
source := `
// Hello world of comments
`
descriptor := mojom.NewMojomDescriptor()
parser := MakeParser("TestOnlyComments", "TestOnlyComments", source, descriptor, nil)
parser.Parse()
mojomFile := parser.GetMojomFile()
comments := parser.GetComments()
mojom.AttachCommentsToMojomFile(mojomFile, comments)
}