mirror of https://github.com/icsharpcode/ILSpy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
575 lines
9.9 KiB
575 lines
9.9 KiB
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) |
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) |
|
|
|
using System; |
|
using System.IO; |
|
using NUnit.Framework; |
|
using ICSharpCode.NRefactory.VB.Parser; |
|
|
|
namespace ICSharpCode.NRefactory.VB.Tests.Lexer |
|
{ |
|
[TestFixture] |
|
public class LexerContextTests |
|
{ |
|
[Test] |
|
public void SimpleGlobal() |
|
{ |
|
RunTest( |
|
@"Option Explicit", |
|
@"enter Global |
|
exit Global |
|
" |
|
); |
|
} |
|
|
|
[Test] |
|
public void VariableWithXmlLiteral() |
|
{ |
|
RunTest( |
|
@"Class Test |
|
Public Sub New() |
|
Dim x = <a /> |
|
End Sub |
|
End Class |
|
", |
|
@"enter Global |
|
enter TypeDeclaration |
|
enter Identifier |
|
exit Identifier |
|
enter Member |
|
enter Identifier |
|
exit Identifier |
|
enter Body |
|
enter Identifier |
|
exit Identifier |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
enter Xml |
|
enter Xml |
|
exit Xml |
|
exit Xml |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
exit Body |
|
exit Member |
|
exit TypeDeclaration |
|
exit Global |
|
" |
|
); |
|
} |
|
|
|
[Test] |
|
public void MemberWithXmlLiteral() |
|
{ |
|
RunTest( |
|
@"Class Test |
|
Private xml As XElement = <b /> |
|
|
|
Public Sub New() |
|
Dim x = <a /> |
|
End Sub |
|
End Class |
|
", |
|
@"enter Global |
|
enter TypeDeclaration |
|
enter Identifier |
|
exit Identifier |
|
enter Member |
|
enter Identifier |
|
exit Identifier |
|
enter Type |
|
exit Type |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
enter Xml |
|
enter Xml |
|
exit Xml |
|
exit Xml |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
exit Member |
|
enter Member |
|
enter Identifier |
|
exit Identifier |
|
enter Body |
|
enter Identifier |
|
exit Identifier |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
enter Xml |
|
enter Xml |
|
exit Xml |
|
exit Xml |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
exit Body |
|
exit Member |
|
exit TypeDeclaration |
|
exit Global |
|
" |
|
); |
|
} |
|
|
|
[Test] |
|
public void GlobalAttributeTest() |
|
{ |
|
RunTest( |
|
@"<assembly: CLSCompliant(True)> |
|
Class Test |
|
Public Sub New() |
|
Dim x = 5 |
|
End Sub |
|
End Class |
|
", |
|
@"enter Global |
|
enter Attribute |
|
exit Attribute |
|
enter TypeDeclaration |
|
enter Identifier |
|
exit Identifier |
|
enter Member |
|
enter Identifier |
|
exit Identifier |
|
enter Body |
|
enter Identifier |
|
exit Identifier |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
exit Body |
|
exit Member |
|
exit TypeDeclaration |
|
exit Global |
|
" |
|
); |
|
} |
|
|
|
[Test] |
|
public void ClassAttributeTest() |
|
{ |
|
RunTest( |
|
@"<Serializable> |
|
Class Test |
|
Public Sub New() |
|
Dim x = 5 |
|
End Sub |
|
End Class |
|
", |
|
@"enter Global |
|
enter Attribute |
|
exit Attribute |
|
enter TypeDeclaration |
|
enter Identifier |
|
exit Identifier |
|
enter Member |
|
enter Identifier |
|
exit Identifier |
|
enter Body |
|
enter Identifier |
|
exit Identifier |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
exit Body |
|
exit Member |
|
exit TypeDeclaration |
|
exit Global |
|
" |
|
); |
|
} |
|
|
|
[Test] |
|
public void MethodAttributeTest() |
|
{ |
|
RunTest( |
|
@"Class Test |
|
<Test> |
|
Public Sub New() |
|
Dim x = 5 |
|
End Sub |
|
End Class |
|
", |
|
@"enter Global |
|
enter TypeDeclaration |
|
enter Identifier |
|
exit Identifier |
|
enter Attribute |
|
exit Attribute |
|
enter Member |
|
enter Identifier |
|
exit Identifier |
|
enter Body |
|
enter Identifier |
|
exit Identifier |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
exit Body |
|
exit Member |
|
exit TypeDeclaration |
|
exit Global |
|
" |
|
); |
|
} |
|
|
|
[Test] |
|
public void WithBlockTest() |
|
{ |
|
RunTest( |
|
@"Class Test |
|
Public Sub New() |
|
With x |
|
|
|
End With |
|
End Sub |
|
End Class |
|
", |
|
@"enter Global |
|
enter TypeDeclaration |
|
enter Identifier |
|
exit Identifier |
|
enter Member |
|
enter Identifier |
|
exit Identifier |
|
enter Body |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
enter Body |
|
exit Body |
|
exit Body |
|
exit Member |
|
exit TypeDeclaration |
|
exit Global |
|
" |
|
); |
|
} |
|
|
|
[Test] |
|
public void StatementsTest() |
|
{ |
|
RunTest( |
|
@"Class Test |
|
Public Sub New() |
|
For i As Integer = 0 To 10 |
|
|
|
Next |
|
|
|
For Each x As Integer In list |
|
|
|
Next |
|
|
|
Try |
|
|
|
Catch e As Exception |
|
|
|
End Try |
|
End Sub |
|
End Class |
|
", |
|
@"enter Global |
|
enter TypeDeclaration |
|
enter Identifier |
|
exit Identifier |
|
enter Member |
|
enter Identifier |
|
exit Identifier |
|
enter Body |
|
enter Identifier |
|
enter Expression |
|
exit Expression |
|
exit Identifier |
|
enter Type |
|
exit Type |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
enter Body |
|
exit Body |
|
enter Identifier |
|
enter Expression |
|
exit Expression |
|
exit Identifier |
|
enter Type |
|
exit Type |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
enter Body |
|
exit Body |
|
enter Body |
|
exit Body |
|
enter Identifier |
|
exit Identifier |
|
enter Type |
|
exit Type |
|
enter Body |
|
exit Body |
|
exit Body |
|
exit Member |
|
exit TypeDeclaration |
|
exit Global |
|
" |
|
); |
|
} |
|
|
|
[Test] |
|
public void ClassTest() |
|
{ |
|
RunTest( |
|
@"Class MainClass ' a comment |
|
Dim under_score_field As Integer |
|
Sub SomeMethod() |
|
simple += 1 |
|
For Each loopVarName In collection |
|
Next |
|
End Sub |
|
End Class", |
|
@"enter Global |
|
enter TypeDeclaration |
|
enter Identifier |
|
exit Identifier |
|
enter Member |
|
enter Identifier |
|
exit Identifier |
|
enter Type |
|
exit Type |
|
exit Member |
|
enter Member |
|
enter Identifier |
|
exit Identifier |
|
enter Body |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
enter Identifier |
|
enter Expression |
|
exit Expression |
|
exit Identifier |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
enter Body |
|
exit Body |
|
exit Body |
|
exit Member |
|
exit TypeDeclaration |
|
exit Global |
|
"); |
|
} |
|
|
|
[Test] |
|
public void CollectionInitializer() |
|
{ |
|
RunTest(@"' |
|
' Created by SharpDevelop. |
|
' User: Siegfried |
|
' Date: 22.06.2010 |
|
' Time: 21:29 |
|
' |
|
' To change this template use Tools | Options | Coding | Edit Standard Headers. |
|
' |
|
|
|
Option Infer On |
|
|
|
Imports System.Linq |
|
Imports System.Xml.Linq |
|
|
|
Module Program |
|
Sub Main() |
|
Console.WriteLine(""Hello World!"") |
|
|
|
Dim name = ""Test"" |
|
Dim content = { 4, 5, New XAttribute(""a"", 3) } |
|
|
|
Dim xml = <<%= name %> <%= content %> /> |
|
|
|
Console.ReadKey() |
|
End Sub |
|
End Module", |
|
@"enter Global |
|
enter Importable |
|
exit Importable |
|
enter Importable |
|
exit Importable |
|
enter TypeDeclaration |
|
enter Identifier |
|
exit Identifier |
|
enter Member |
|
enter Identifier |
|
exit Identifier |
|
enter Body |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
enter Identifier |
|
exit Identifier |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
enter Identifier |
|
exit Identifier |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
enter Expression |
|
enter Expression |
|
enter ObjectCreation |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
exit ObjectCreation |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
enter Identifier |
|
exit Identifier |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
enter Xml |
|
enter Xml |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
exit Xml |
|
exit Xml |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
enter Expression |
|
enter Expression |
|
enter Expression |
|
exit Expression |
|
enter Expression |
|
exit Expression |
|
exit Expression |
|
exit Expression |
|
exit Body |
|
exit Member |
|
exit TypeDeclaration |
|
exit Global |
|
"); |
|
} |
|
|
|
[Test] |
|
public void Imports() |
|
{ |
|
RunTest(@"Imports System |
|
Imports System.Linq |
|
Imports System.Collections.Generic", |
|
@"enter Global |
|
enter Importable |
|
exit Importable |
|
enter Importable |
|
exit Importable |
|
enter Importable |
|
exit Importable |
|
exit Global |
|
"); |
|
} |
|
|
|
void RunTest(string code, string expectedOutput) |
|
{ |
|
ExpressionFinder p = new ExpressionFinder(); |
|
VBLexer lexer = new VBLexer(new StringReader(code)); |
|
Token t; |
|
|
|
do { |
|
t = lexer.NextToken(); |
|
p.InformToken(t); |
|
} while (t.Kind != Tokens.EOF); |
|
|
|
Console.WriteLine(p.Output); |
|
|
|
Assert.IsEmpty(p.Errors); |
|
|
|
Assert.AreEqual(expectedOutput.Replace("\r", ""), |
|
p.Output.Replace("\r", "")); |
|
} |
|
} |
|
}
|
|
|