public void Module()
{
ModuleDeclaration moduleDeclaration = new Parser().Module(new Lexer("module Something 1.2.3 { }"));
Assert.IsNotNull(moduleDeclaration);
Assert.AreEqual("Something", moduleDeclaration.Name.ToString());
Assert.IsNotNull(moduleDeclaration.Members);
Assert.IsFalse(moduleDeclaration.Members.Any());
Assert.AreEqual(moduleDeclaration.Version, Version.Parse("1.2.3"));
moduleDeclaration = new Parser().Module(new Lexer("module Something 1.2.0 { a: Int32 }"));
Assert.IsNotNull(moduleDeclaration);
Assert.AreEqual("Something", moduleDeclaration.Name.ToString());
Assert.AreEqual(moduleDeclaration.Version, Version.Parse("1.2.0"));
Assert.IsNotNull(moduleDeclaration.Members);
Assert.AreEqual(1, moduleDeclaration.Members.Count);
Assert.AreEqual("a", moduleDeclaration.Members[0].Name.Components[0]);
moduleDeclaration = new Parser().Module(new Lexer(@" module Something 1.0.0
{
a: Int32
b: const 5
}"));
Assert.IsNotNull(moduleDeclaration);
Assert.AreEqual("Something", moduleDeclaration.Name.ToString());
Assert.AreEqual(moduleDeclaration.Version, Version.Parse("1.0.0"));
Assert.IsNotNull(moduleDeclaration.Members);
Assert.AreEqual(2, moduleDeclaration.Members.Count);
Assert.AreEqual("a", moduleDeclaration.Members[0].Name.ToString());
Assert.AreEqual("b", moduleDeclaration.Members[1].Name.ToString());
}