Skip to content

Commit b2980fa

Browse files
committed
More Haxe parsing tests
- Private classes. - Interfaces. - Enums. - Multiline strings. - Strings with escaped characters. Improved complex class test.
1 parent 33db80d commit b2980fa

File tree

7 files changed

+302
-1
lines changed

7 files changed

+302
-1
lines changed

Tests/External/Plugins/ASCompletion.Tests/ASCompletion.Tests.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@
128128
<EmbeddedResource Include="Test Files\haxe\RegExTest.hx" />
129129
<EmbeddedResource Include="Test Files\haxe\ImportAliasTest.hx" />
130130
<EmbeddedResource Include="Test Files\haxe\ComplexClassTest.hx" />
131+
<EmbeddedResource Include="Test Files\haxe\MultiLineStringsTest.hx" />
132+
<EmbeddedResource Include="Test Files\haxe\EscapedStringsTest.hx" />
133+
<EmbeddedResource Include="Test Files\haxe\EnumsTest.hx" />
131134
</ItemGroup>
132135
<ItemGroup>
133136
<ProjectReference Include="..\..\..\..\External\Plugins\AS2Context\AS2Context.csproj">

Tests/External/Plugins/ASCompletion.Tests/Model/ASFileParserTests.cs

Lines changed: 256 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,100 @@ public void ParseFile_SimpleClass()
100100
}
101101
}
102102

103+
[Test]
104+
public void ParseFile_PrivateClass()
105+
{
106+
using (var resourceFile = new TestFile("ASCompletion.Test_Files.haxe.PrivateClassTest.hx"))
107+
{
108+
var srcModel = new FileModel(resourceFile.DestinationFile);
109+
srcModel.Context = new HaXeContext.Context(new HaXeContext.HaXeSettings());
110+
var model = ASFileParser.ParseFile(srcModel);
111+
Assert.AreEqual(4, model.Version);
112+
Assert.IsTrue(model.HasPackage);
113+
Assert.AreEqual("test.test", model.Package);
114+
Assert.AreEqual(2, model.Classes.Count);
115+
116+
var classModel = model.Classes[0];
117+
Assert.AreEqual("Test", classModel.Name);
118+
Assert.AreEqual(FlagType.Class, classModel.Flags & FlagType.Class);
119+
Assert.AreEqual(Visibility.Public, classModel.Access & Visibility.Public);
120+
Assert.AreEqual(2, classModel.LineFrom);
121+
Assert.AreEqual(7, classModel.LineTo);
122+
Assert.AreEqual(1, classModel.Members.Count);
123+
124+
var memberModel = classModel.Members[0];
125+
Assert.AreEqual("Test", memberModel.Name);
126+
Assert.AreEqual(FlagType.Function, memberModel.Flags & FlagType.Function);
127+
Assert.AreEqual(FlagType.Constructor, memberModel.Flags & FlagType.Constructor);
128+
Assert.AreEqual(Visibility.Public, memberModel.Access & Visibility.Public);
129+
Assert.AreEqual(4, memberModel.LineFrom);
130+
Assert.AreEqual(6, memberModel.LineTo);
131+
132+
classModel = model.Classes[1];
133+
Assert.AreEqual("TestPrivate", classModel.Name);
134+
Assert.AreEqual(FlagType.Class, classModel.Flags & FlagType.Class);
135+
Assert.AreEqual(Visibility.Private, classModel.Access & Visibility.Private);
136+
Assert.AreEqual(9, classModel.LineFrom);
137+
Assert.AreEqual(14, classModel.LineTo);
138+
Assert.AreEqual(1, classModel.Members.Count);
139+
memberModel = classModel.Members[0];
140+
Assert.AreEqual("TestPrivate", memberModel.Name);
141+
Assert.AreEqual(FlagType.Function, memberModel.Flags & FlagType.Function);
142+
Assert.AreEqual(FlagType.Constructor, memberModel.Flags & FlagType.Constructor);
143+
Assert.AreEqual(Visibility.Public, memberModel.Access & Visibility.Public);
144+
Assert.AreEqual(11, memberModel.LineFrom);
145+
Assert.AreEqual(13, memberModel.LineTo);
146+
}
147+
}
148+
149+
[Test]
150+
public void ParseFile_Interface()
151+
{
152+
using (var resourceFile = new TestFile("ASCompletion.Test_Files.haxe.InterfaceTest.hx"))
153+
{
154+
var srcModel = new FileModel(resourceFile.DestinationFile);
155+
srcModel.Context = new HaXeContext.Context(new HaXeContext.HaXeSettings());
156+
var model = ASFileParser.ParseFile(srcModel);
157+
158+
Assert.AreEqual(1, model.Classes.Count);
159+
var classModel = model.Classes[0];
160+
Assert.AreEqual("Test", classModel.Name);
161+
Assert.AreEqual(Visibility.Public, classModel.Access);
162+
Assert.AreEqual(FlagType.Interface, classModel.Flags & FlagType.Interface);
163+
Assert.AreEqual(4, classModel.Members.Count);
164+
165+
var member = classModel.Members[0];
166+
Assert.AreEqual("test", member.Name);
167+
Assert.AreEqual("Int", member.Type);
168+
Assert.IsNull(member.Parameters);
169+
Assert.AreEqual(Visibility.Public, member.Access);
170+
Assert.AreEqual(FlagType.Function, member.Flags & FlagType.Function);
171+
172+
member = classModel.Members[1];
173+
Assert.AreEqual("testVar", member.Name);
174+
Assert.AreEqual("String", member.Type);
175+
Assert.IsNull(member.Parameters);
176+
Assert.AreEqual(Visibility.Public, member.Access);
177+
Assert.AreEqual(FlagType.Variable, member.Flags & FlagType.Variable);
178+
179+
member = classModel.Members[2];
180+
Assert.AreEqual("testPrivate", member.Name);
181+
Assert.AreEqual("Int", member.Type);
182+
Assert.IsNull(member.Parameters);
183+
Assert.AreEqual(Visibility.Private, member.Access);
184+
Assert.AreEqual(FlagType.Function, member.Flags & FlagType.Function);
185+
186+
member = classModel.Members[3];
187+
Assert.AreEqual("testProperty", member.Name);
188+
Assert.AreEqual("Float", member.Type);
189+
Assert.AreEqual(2, member.Parameters.Count);
190+
Assert.AreEqual(Visibility.Public, member.Access);
191+
Assert.AreEqual(FlagType.Getter, member.Flags & FlagType.Getter);
192+
Assert.AreEqual("get", member.Parameters[0].Name);
193+
Assert.AreEqual("set", member.Parameters[1].Name);
194+
}
195+
}
196+
103197
[Test(Description = "Commit 7c8718c")]
104198
public void ParseFile_OverrideFunction()
105199
{
@@ -261,6 +355,65 @@ public void ParseFile_TypeDefs()
261355
}
262356
}
263357

358+
[Test]
359+
public void ParseFile_Enums()
360+
{
361+
using (var resourceFile = new TestFile("ASCompletion.Test_Files.haxe.EnumsTest.hx"))
362+
{
363+
var srcModel = new FileModel(resourceFile.DestinationFile);
364+
srcModel.Context = new HaXeContext.Context(new HaXeContext.HaXeSettings());
365+
var model = ASFileParser.ParseFile(srcModel);
366+
Assert.AreEqual(2, model.Classes.Count);
367+
368+
var simpleEnum = model.Classes[0];
369+
Assert.AreEqual("SimpleEnum", simpleEnum.Name);
370+
Assert.AreEqual(2, simpleEnum.LineFrom);
371+
Assert.AreEqual(6, simpleEnum.LineTo);
372+
Assert.AreEqual(FlagType.Enum, simpleEnum.Flags & FlagType.Enum);
373+
Assert.AreEqual(3, simpleEnum.Members.Count);
374+
var member = simpleEnum.Members[0];
375+
Assert.AreEqual("Foo", member.Name);
376+
Assert.AreEqual(3, member.LineFrom);
377+
Assert.AreEqual(3, member.LineTo);
378+
Assert.AreEqual(FlagType.Variable, member.Flags & FlagType.Variable);
379+
member = simpleEnum.Members[1];
380+
Assert.AreEqual("Bar", member.Name);
381+
Assert.AreEqual(4, member.LineFrom);
382+
Assert.AreEqual(4, member.LineTo);
383+
Assert.AreEqual(FlagType.Variable, member.Flags & FlagType.Variable);
384+
member = simpleEnum.Members[2];
385+
Assert.AreEqual("Baz", member.Name);
386+
Assert.AreEqual(5, member.LineFrom);
387+
Assert.AreEqual(5, member.LineTo);
388+
Assert.AreEqual(FlagType.Variable, member.Flags & FlagType.Variable);
389+
390+
var complexEnum = model.Classes[1];
391+
Assert.AreEqual("ComplexEnum", complexEnum.Name);
392+
Assert.AreEqual(8, complexEnum.LineFrom);
393+
Assert.AreEqual(11, complexEnum.LineTo);
394+
Assert.AreEqual(FlagType.Enum, complexEnum.Flags & FlagType.Enum);
395+
Assert.AreEqual(2, complexEnum.Members.Count);
396+
member = complexEnum.Members[0];
397+
Assert.AreEqual("IntEnum", member.Name);
398+
Assert.AreEqual(9, member.LineFrom);
399+
Assert.AreEqual(9, member.LineTo);
400+
Assert.AreEqual("i", member.Parameters[0].Name);
401+
Assert.AreEqual("Int", member.Parameters[0].Type);
402+
Assert.AreEqual(FlagType.Function, member.Flags & FlagType.Function);
403+
member = complexEnum.Members[1];
404+
Assert.AreEqual("MultiEnum", member.Name);
405+
Assert.AreEqual(10, member.LineFrom);
406+
Assert.AreEqual(10, member.LineTo);
407+
Assert.AreEqual(FlagType.Function, member.Flags & FlagType.Function);
408+
Assert.AreEqual("i", member.Parameters[0].Name);
409+
Assert.AreEqual("Int", member.Parameters[0].Type);
410+
Assert.AreEqual("j", member.Parameters[1].Name);
411+
Assert.AreEqual("String", member.Parameters[1].Type);
412+
Assert.AreEqual("k", member.Parameters[2].Name);
413+
Assert.AreEqual("Float", member.Parameters[2].Type);
414+
}
415+
}
416+
264417
[Test(Description = "Includes Commit 51938e0")]
265418
public void ParseFile_Generics()
266419
{
@@ -533,6 +686,81 @@ public void ParseFile_RegExLiterals()
533686
}
534687
}
535688

689+
[Test(Description = "PR 680")]
690+
public void ParseFile_MultiLineStrings()
691+
{
692+
using (var resourceFile = new TestFile("ASCompletion.Test_Files.haxe.MultiLineStringsTest.hx"))
693+
{
694+
var srcModel = new FileModel(resourceFile.DestinationFile);
695+
srcModel.Context = new HaXeContext.Context(new HaXeContext.HaXeSettings());
696+
var model = ASFileParser.ParseFile(srcModel);
697+
698+
Assert.AreEqual(1, model.Classes.Count);
699+
var classModel = model.Classes[0];
700+
701+
Assert.AreEqual(2, classModel.Members.Count);
702+
var member = classModel.Members[0];
703+
Assert.AreEqual("test", member.Name);
704+
Assert.AreEqual("Int", member.Type);
705+
Assert.AreEqual(4, member.LineFrom);
706+
Assert.AreEqual(7, member.LineTo);
707+
Assert.AreEqual(1, member.Parameters.Count);
708+
var param = member.Parameters[0];
709+
Assert.AreEqual("arg", param.Name);
710+
Assert.AreEqual("String", param.Type);
711+
Assert.AreEqual("\"hello \r world\"", param.Value);
712+
Assert.AreEqual(4, param.LineFrom);
713+
Assert.AreEqual(5, param.LineTo);
714+
715+
member = classModel.Members[1];
716+
Assert.AreEqual("test2", member.Name);
717+
Assert.AreEqual("Float", member.Type);
718+
Assert.AreEqual(9, member.LineFrom);
719+
Assert.AreEqual(12, member.LineTo);
720+
Assert.AreEqual(1, member.Parameters.Count);
721+
param = member.Parameters[0];
722+
Assert.AreEqual("arg", param.Name);
723+
Assert.AreEqual("String", param.Type);
724+
Assert.AreEqual("'hello \r world'", param.Value);
725+
Assert.AreEqual(9, param.LineFrom);
726+
Assert.AreEqual(10, param.LineTo);
727+
}
728+
}
729+
730+
[Test(Description = "PR 680")]
731+
public void ParseFile_StringWithEscapedChars()
732+
{
733+
using (var resourceFile = new TestFile("ASCompletion.Test_Files.haxe.EscapedStringsTest.hx"))
734+
{
735+
var srcModel = new FileModel(resourceFile.DestinationFile);
736+
srcModel.Context = new HaXeContext.Context(new HaXeContext.HaXeSettings());
737+
var model = ASFileParser.ParseFile(srcModel);
738+
739+
Assert.AreEqual(1, model.Classes.Count);
740+
var classModel = model.Classes[0];
741+
742+
Assert.AreEqual(1, classModel.Members.Count);
743+
var member = classModel.Members[0];
744+
Assert.AreEqual("test", member.Name);
745+
Assert.AreEqual("String", member.Type);
746+
Assert.AreEqual(4, member.LineFrom);
747+
Assert.AreEqual(6, member.LineTo);
748+
Assert.AreEqual(2, member.Parameters.Count);
749+
var param = member.Parameters[0];
750+
Assert.AreEqual("arg", param.Name);
751+
Assert.AreEqual("String", param.Type);
752+
Assert.AreEqual("\"hello \\t\\r\\n\\\\\\\"\\\\\"", param.Value);
753+
Assert.AreEqual(4, param.LineFrom);
754+
Assert.AreEqual(4, param.LineTo);
755+
param = member.Parameters[1];
756+
Assert.AreEqual("arg2", param.Name);
757+
Assert.AreEqual("String", param.Type);
758+
Assert.AreEqual(@"'hello \t\r\n\\\\'", param.Value);
759+
Assert.AreEqual(4, param.LineFrom);
760+
Assert.AreEqual(4, param.LineTo);
761+
}
762+
}
763+
536764
[Test]
537765
public void ParseFile_Imports()
538766
{
@@ -716,6 +944,7 @@ public void ParseFile_ComplexClass()
716944

717945
memberModel = classModel.Members[11];
718946
Assert.AreEqual("bar", memberModel.Name);
947+
Assert.AreEqual("Void", memberModel.Type);
719948
flags = FlagType.Static | FlagType.Function;
720949
Assert.AreEqual(flags, memberModel.Flags & flags);
721950
Assert.AreEqual(Visibility.Private, memberModel.Access & Visibility.Private);
@@ -726,9 +955,18 @@ public void ParseFile_ComplexClass()
726955
Assert.AreEqual("s", param.Name);
727956
Assert.AreEqual("String", param.Type);
728957
Assert.AreEqual(FlagType.ParameterVar, param.Flags & FlagType.ParameterVar);
958+
Assert.AreEqual(31, param.LineFrom);
959+
Assert.AreEqual(31, param.LineTo);
960+
param = memberModel.Parameters[1];
961+
Assert.AreEqual("v", param.Name);
962+
Assert.AreEqual("Bool", param.Type);
963+
Assert.AreEqual(FlagType.ParameterVar, param.Flags & FlagType.ParameterVar);
964+
Assert.AreEqual(31, param.LineFrom);
965+
Assert.AreEqual(31, param.LineTo);
729966

730967
memberModel = classModel.Members[12];
731968
Assert.AreEqual("foo", memberModel.Name);
969+
Assert.AreEqual("Bool", memberModel.Type);
732970
flags = FlagType.Function;
733971
Assert.AreEqual(flags, memberModel.Flags & flags);
734972
Assert.AreEqual(Visibility.Public, memberModel.Access & Visibility.Public);
@@ -739,6 +977,15 @@ public void ParseFile_ComplexClass()
739977
Assert.AreEqual("?s", param.Name);
740978
Assert.AreEqual("String", param.Type);
741979
Assert.AreEqual(FlagType.ParameterVar, param.Flags & FlagType.ParameterVar);
980+
Assert.AreEqual(35, param.LineFrom);
981+
Assert.AreEqual(35, param.LineTo);
982+
param = memberModel.Parameters[1];
983+
Assert.AreEqual("?v", param.Name);
984+
Assert.AreEqual("Bool", param.Type);
985+
Assert.AreEqual("true", param.Value);
986+
Assert.AreEqual(FlagType.ParameterVar, param.Flags & FlagType.ParameterVar);
987+
Assert.AreEqual(35, param.LineFrom);
988+
Assert.AreEqual(35, param.LineTo);
742989

743990
memberModel = classModel.Members[13];
744991
Assert.AreEqual("boz", memberModel.Name);
@@ -752,6 +999,15 @@ public void ParseFile_ComplexClass()
752999
Assert.AreEqual("?s", param.Name);
7531000
Assert.AreEqual("String", param.Type);
7541001
Assert.AreEqual(FlagType.ParameterVar, param.Flags & FlagType.ParameterVar);
1002+
Assert.AreEqual(40, param.LineFrom);
1003+
Assert.AreEqual(40, param.LineTo);
1004+
param = memberModel.Parameters[1];
1005+
Assert.AreEqual("?v", param.Name);
1006+
Assert.AreEqual("Bool", param.Type);
1007+
Assert.AreEqual("true", param.Value);
1008+
Assert.AreEqual(FlagType.ParameterVar, param.Flags & FlagType.ParameterVar);
1009+
Assert.AreEqual(41, param.LineFrom);
1010+
Assert.AreEqual(41, param.LineTo);
7551011
}
7561012
}
7571013
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package;
2+
3+
class Test
4+
{
5+
public function new()
6+
{
7+
}
8+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package;
2+
3+
enum SimpleEnum {
4+
Foo;
5+
Bar;
6+
Baz;
7+
}
8+
9+
enum ComplexEnum {
10+
IntEnum(i:Int);
11+
MultiEnum(i:Int, j:String, k:Float);
12+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package;
2+
3+
class Test
4+
{
5+
public function test(arg:String = "hello \t\r\n\\\"\\", arg2:String = 'hello \t\r\n\\\\'):String
6+
{
7+
}
8+
}

Tests/External/Plugins/ASCompletion.Tests/Test Files/haxe/InterfaceTest.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ interface Test
55
function test():Int;
66
var testVar:String;
77
private function testPrivate():Int;
8-
var property(get, set):Float;
8+
var testProperty(get, set):Float;
99
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package;
2+
3+
class Test
4+
{
5+
public function test(arg:String = "hello
6+
world"):Int
7+
{
8+
}
9+
10+
public function test2(arg:String = 'hello
11+
world'):Float
12+
{
13+
}
14+
}

0 commit comments

Comments
 (0)