Browse Source

deactivated uncompilable unit tests; added XmlIdentifier; removed old classes

newNRvisualizers
Siegfried Pammer 14 years ago
parent
commit
cb5a17366b
  1. 27
      ICSharpCode.NRefactory.Demo/ICSharpCode.NRefactory.Demo.csproj
  2. 26
      ICSharpCode.NRefactory.Demo/MainForm.Designer.cs
  3. 4
      ICSharpCode.NRefactory.Demo/VBDemo.cs
  4. 149
      ICSharpCode.NRefactory.VB.Tests/General/UnitTest.cs
  5. 77
      ICSharpCode.NRefactory.VB.Tests/ICSharpCode.NRefactory.VB.Tests.csproj
  6. 2
      ICSharpCode.NRefactory.VB.Tests/Lexer/CustomLexerTests.cs
  7. 2
      ICSharpCode.NRefactory.VB.Tests/Lexer/ImplicitLineContinuationTests.cs
  8. 2
      ICSharpCode.NRefactory.VB.Tests/Lexer/LexerContextTests.cs
  9. 42
      ICSharpCode.NRefactory.VB.Tests/Lexer/LexerPositionTests.cs
  10. 2
      ICSharpCode.NRefactory.VB.Tests/Lexer/LexerTests.cs
  11. 2
      ICSharpCode.NRefactory.VB.Tests/Lexer/LiteralsTests.cs
  12. 4
      ICSharpCode.NRefactory.VB.Tests/Lexer/XmlModeLexerTests.cs
  13. 2
      ICSharpCode.NRefactory.VB.Tests/Output/SpecialOutputVisitorTest.cs
  14. 35
      ICSharpCode.NRefactory.VB.Tests/Parser/CheckParentVisitor.cs
  15. 42
      ICSharpCode.NRefactory.VB.Tests/Parser/Expressions/BinaryOperatorExpressionTests.cs
  16. 4
      ICSharpCode.NRefactory.VB.Tests/Parser/Expressions/XmlExpressionTests.cs
  17. 116
      ICSharpCode.NRefactory.VB.Tests/Parser/GlobalScope/AttributeSectionTests.cs
  18. 42
      ICSharpCode.NRefactory.VB.Tests/Parser/GlobalScope/DelegateDeclarationTests.cs
  19. 58
      ICSharpCode.NRefactory.VB.Tests/Parser/GlobalScope/NamespaceDeclarationTests.cs
  20. 87
      ICSharpCode.NRefactory.VB.Tests/Parser/GlobalScope/OptionDeclarationTests.cs
  21. 91
      ICSharpCode.NRefactory.VB.Tests/Parser/GlobalScope/OptionStatementTests.cs
  22. 378
      ICSharpCode.NRefactory.VB.Tests/Parser/GlobalScope/TypeDeclarationTests.cs
  23. 382
      ICSharpCode.NRefactory.VB.Tests/Parser/GlobalScope/UsingDeclarationTests.cs
  24. 26
      ICSharpCode.NRefactory.VB.Tests/Parser/LocationAssignmentCheckVisitor.cs
  25. 148
      ICSharpCode.NRefactory.VB.Tests/Parser/ParseUtil.cs
  26. 16
      ICSharpCode.NRefactory.VB.Tests/Parser/SnippetParserTests.cs
  27. 19
      ICSharpCode.NRefactory.VB/Ast/AstNode.cs
  28. 69
      ICSharpCode.NRefactory.VB/Ast/Expressions/XmlIdentifier.cs
  29. 2
      ICSharpCode.NRefactory.VB/Ast/General/Attribute.cs
  30. 35
      ICSharpCode.NRefactory.VB/Ast/General/AttributeBlock.cs
  31. 63
      ICSharpCode.NRefactory.VB/Ast/GlobalScope/ImportsClause.cs
  32. 8
      ICSharpCode.NRefactory.VB/Ast/GlobalScope/ImportsStatement.cs
  33. 29
      ICSharpCode.NRefactory.VB/Ast/GlobalScope/OptionStatement.cs
  34. 12
      ICSharpCode.NRefactory.VB/Ast/Identifier.cs
  35. 145
      ICSharpCode.NRefactory.VB/Ast/TypeName/AstType.cs
  36. 1
      ICSharpCode.NRefactory.VB/IAstVisitor.cs
  37. 8
      ICSharpCode.NRefactory.VB/ICSharpCode.NRefactory.VB.csproj
  38. 39
      ICSharpCode.NRefactory.VB/OutputVisitor/IOutputFormatter.cs
  39. 173
      ICSharpCode.NRefactory.VB/OutputVisitor/OutputVisitor.cs
  40. 83
      ICSharpCode.NRefactory.VB/OutputVisitor/TextWriterOutputFormatter.cs
  41. 17
      ICSharpCode.NRefactory.VB/OutputVisitor/VBFormattingOptions.cs
  42. 71
      ICSharpCode.NRefactory.VB/Parser/Parser.cs
  43. 25
      ICSharpCode.NRefactory.VB/Parser/VBParser.cs
  44. 45
      ICSharpCode.NRefactory.VB/Parser/vb.atg
  45. 17
      ICSharpCode.NRefactory.VB/VBParser.cs
  46. 20
      NRefactory.sln

27
ICSharpCode.NRefactory.Demo/ICSharpCode.NRefactory.Demo.csproj

@ -40,18 +40,6 @@ @@ -40,18 +40,6 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="VBEditDialog.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="VBEditDialog.Designer.cs">
<DependentUpon>VBEditDialog.cs</DependentUpon>
</Compile>
<Compile Include="VBAstView.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="VBAstView.Designer.cs">
<DependentUpon>VBAstView.cs</DependentUpon>
</Compile>
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
@ -60,12 +48,6 @@ @@ -60,12 +48,6 @@
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="VBDemo.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="VBDemo.Designer.cs">
<DependentUpon>VBDemo.cs</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ICSharpCode.NRefactory.VB\ICSharpCode.NRefactory.VB.csproj">
@ -78,18 +60,9 @@ @@ -78,18 +60,9 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="VBEditDialog.resx">
<DependentUpon>VBEditDialog.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="VBAstView.resx">
<DependentUpon>VBAstView.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="VBDemo.resx">
<DependentUpon>VBDemo.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>

26
ICSharpCode.NRefactory.Demo/MainForm.Designer.cs generated

@ -30,7 +30,6 @@ namespace ICSharpCode.NRefactory.Demo @@ -30,7 +30,6 @@ namespace ICSharpCode.NRefactory.Demo
/// </summary>
private void InitializeComponent()
{
this.tabPage2 = new System.Windows.Forms.TabPage();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.csharpCodeTextBox = new System.Windows.Forms.TextBox();
@ -40,8 +39,6 @@ namespace ICSharpCode.NRefactory.Demo @@ -40,8 +39,6 @@ namespace ICSharpCode.NRefactory.Demo
this.csharpParseButton = new System.Windows.Forms.Button();
this.tabControl1 = new System.Windows.Forms.TabControl();
this.miniToolStrip = new System.Windows.Forms.ToolStrip();
this.vbDemo1 = new ICSharpCode.NRefactory.Demo.VBDemo();
this.tabPage2.SuspendLayout();
this.tabPage1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
@ -50,17 +47,6 @@ namespace ICSharpCode.NRefactory.Demo @@ -50,17 +47,6 @@ namespace ICSharpCode.NRefactory.Demo
this.tabControl1.SuspendLayout();
this.SuspendLayout();
//
// tabPage2
//
this.tabPage2.Controls.Add(this.vbDemo1);
this.tabPage2.Location = new System.Drawing.Point(4, 22);
this.tabPage2.Name = "tabPage2";
this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
this.tabPage2.Size = new System.Drawing.Size(507, 458);
this.tabPage2.TabIndex = 1;
this.tabPage2.Text = "VB";
this.tabPage2.UseVisualStyleBackColor = true;
//
// tabPage1
//
this.tabPage1.Controls.Add(this.splitContainer1);
@ -160,7 +146,6 @@ namespace ICSharpCode.NRefactory.Demo @@ -160,7 +146,6 @@ namespace ICSharpCode.NRefactory.Demo
// tabControl1
//
this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabControl1.Location = new System.Drawing.Point(0, 0);
this.tabControl1.Name = "tabControl1";
@ -180,14 +165,6 @@ namespace ICSharpCode.NRefactory.Demo @@ -180,14 +165,6 @@ namespace ICSharpCode.NRefactory.Demo
this.miniToolStrip.Size = new System.Drawing.Size(16, 25);
this.miniToolStrip.TabIndex = 3;
//
// vbDemo1
//
this.vbDemo1.Dock = System.Windows.Forms.DockStyle.Fill;
this.vbDemo1.Location = new System.Drawing.Point(3, 3);
this.vbDemo1.Name = "vbDemo1";
this.vbDemo1.Size = new System.Drawing.Size(501, 452);
this.vbDemo1.TabIndex = 0;
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -196,7 +173,6 @@ namespace ICSharpCode.NRefactory.Demo @@ -196,7 +173,6 @@ namespace ICSharpCode.NRefactory.Demo
this.Controls.Add(this.tabControl1);
this.Name = "MainForm";
this.Text = "NRefactory Demo";
this.tabPage2.ResumeLayout(false);
this.tabPage1.ResumeLayout(false);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel1.PerformLayout();
@ -206,7 +182,6 @@ namespace ICSharpCode.NRefactory.Demo @@ -206,7 +182,6 @@ namespace ICSharpCode.NRefactory.Demo
this.tabControl1.ResumeLayout(false);
this.ResumeLayout(false);
}
private ICSharpCode.NRefactory.Demo.VBDemo vbDemo1;
private System.Windows.Forms.Button resolveButton;
private System.Windows.Forms.ToolStrip miniToolStrip;
private System.Windows.Forms.TreeView csharpTreeView;
@ -214,7 +189,6 @@ namespace ICSharpCode.NRefactory.Demo @@ -214,7 +189,6 @@ namespace ICSharpCode.NRefactory.Demo
private System.Windows.Forms.Button csharpGenerateCodeButton;
private System.Windows.Forms.TextBox csharpCodeTextBox;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.TabPage tabPage2;
private System.Windows.Forms.TabPage tabPage1;
private System.Windows.Forms.TabControl tabControl1;
}

4
ICSharpCode.NRefactory.Demo/VBDemo.cs

@ -28,14 +28,10 @@ namespace ICSharpCode.NRefactory.Demo @@ -28,14 +28,10 @@ namespace ICSharpCode.NRefactory.Demo
ParseButtonClick(null, null);
}
IList<ISpecial> savedSpecials;
void ParseButtonClick(object sender, EventArgs e)
{
using (VBParser parser = new VBParser(new VBLexer(new StringReader(codeView.Text)))) {
parser.Parse();
// this allows retrieving comments, preprocessor directives, etc. (stuff that isn't part of the syntax)
SetSpecials(parser.Lexer.SpecialTracker.RetrieveSpecials());
// this retrieves the root node of the result DOM
if (parser.Errors.Count > 0) {
MessageBox.Show(parser.Errors.ErrorOutput);

149
ICSharpCode.NRefactory.VB.Tests/General/UnitTest.cs

@ -6,44 +6,43 @@ using System.Reflection; @@ -6,44 +6,43 @@ using System.Reflection;
using NUnit.Framework;
using ICSharpCode.NRefactory.VB.Ast;
using ICSharpCode.NRefactory.VB.Parser;
using ICSharpCode.NRefactory.VB.Visitors;
namespace ICSharpCode.NRefactory.VB.Tests
{
[TestFixture]
public class StructuralTest
{
[Test]
public void TestToStringMethods()
{
Type[] allTypes = typeof(INode).Assembly.GetTypes();
foreach (Type type in allTypes) {
if (type.IsClass && !type.IsAbstract && !type.IsNested && type.GetInterface(typeof(INode).FullName) != null) {
MethodInfo methodInfo = type.GetMethod("ToString", BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public);
Assert.IsNotNull(methodInfo, "ToString() not found in " + type.FullName);
}
}
}
[Test]
public void TestUnitTests()
{
Type[] allTypes = typeof(StructuralTest).Assembly.GetTypes();
foreach (Type type in allTypes) {
if (type.GetCustomAttributes(typeof(TestFixtureAttribute), true).Length > 0) {
foreach (MethodInfo m in type.GetMethods()) {
if (m.IsPublic && m.ReturnType == typeof(void) && m.GetParameters().Length == 0) {
if (m.GetCustomAttributes(typeof(TestAttribute), true).Length == 0) {
Assert.Fail(type.Name + "." + m.Name + " should have the [Test] attribute!");
}
}
}
}
}
}
// [Test]
// public void TestToStringMethods()
// {
// Type[] allTypes = typeof(INode).Assembly.GetTypes();
//
// foreach (Type type in allTypes) {
// if (type.IsClass && !type.IsAbstract && !type.IsNested && type.GetInterface(typeof(INode).FullName) != null) {
// MethodInfo methodInfo = type.GetMethod("ToString", BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public);
// Assert.IsNotNull(methodInfo, "ToString() not found in " + type.FullName);
// }
// }
// }
//
// [Test]
// public void TestUnitTests()
// {
// Type[] allTypes = typeof(StructuralTest).Assembly.GetTypes();
//
// foreach (Type type in allTypes) {
// if (type.GetCustomAttributes(typeof(TestFixtureAttribute), true).Length > 0) {
// foreach (MethodInfo m in type.GetMethods()) {
// if (m.IsPublic && m.ReturnType == typeof(void) && m.GetParameters().Length == 0) {
// if (m.GetCustomAttributes(typeof(TestAttribute), true).Length == 0) {
// Assert.Fail(type.Name + "." + m.Name + " should have the [Test] attribute!");
// }
// }
// }
// }
// }
// }
//
// [Test]
// public void TestAcceptVisitorMethods()
// {
@ -56,48 +55,48 @@ namespace ICSharpCode.NRefactory.VB.Tests @@ -56,48 +55,48 @@ namespace ICSharpCode.NRefactory.VB.Tests
// }
// }
// }
[Test]
public void TestIAstVisitor()
{
Type[] allTypes = typeof(AbstractNode).Assembly.GetTypes();
Type visitor = typeof(IAstVisitor);
foreach (Type type in allTypes) {
if (type.IsClass && !type.IsAbstract && !type.IsNested && type.GetInterface(typeof(INode).FullName) != null && !type.Name.StartsWith("Null")) {
MethodInfo methodInfo = visitor.GetMethod("Visit" + type.Name, BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.ExactBinding, null, new Type[] {type, typeof(object)}, null);
Assert.IsNotNull(methodInfo, "Visit with parameter " + type.FullName + " not found");
Assert.AreEqual(2, methodInfo.GetParameters().Length);
ParameterInfo first = methodInfo.GetParameters()[0];
Assert.AreEqual(Char.ToLower(first.ParameterType.Name[0]) + first.ParameterType.Name.Substring(1), first.Name);
ParameterInfo second = methodInfo.GetParameters()[1];
Assert.AreEqual(typeof(System.Object), second.ParameterType);
Assert.AreEqual("data", second.Name);
}
}
}
[Test]
public void TestAbstractAstVisitorVisitor()
{
Type[] allTypes = typeof(AbstractNode).Assembly.GetTypes();
Type visitor = typeof(AbstractAstVisitor);
foreach (Type type in allTypes) {
if (type.IsClass && !type.IsAbstract && !type.IsNested && type.GetInterface(typeof(INode).FullName) != null && !type.Name.StartsWith("Null")) {
MethodInfo methodInfo = visitor.GetMethod("Visit" + type.Name, BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.ExactBinding, null, new Type[] {type, typeof(object)}, null);
Assert.IsNotNull(methodInfo, "Visit with parameter " + type.FullName + " not found");
Assert.AreEqual(2, methodInfo.GetParameters().Length);
ParameterInfo first = methodInfo.GetParameters()[0];
Assert.AreEqual(Char.ToLower(first.ParameterType.Name[0]) + first.ParameterType.Name.Substring(1), first.Name);
ParameterInfo second = methodInfo.GetParameters()[1];
Assert.AreEqual(typeof(System.Object), second.ParameterType);
Assert.AreEqual("data", second.Name);
}
}
}
//
// [Test]
// public void TestIAstVisitor()
// {
// Type[] allTypes = typeof(AbstractNode).Assembly.GetTypes();
// Type visitor = typeof(IAstVisitor);
//
// foreach (Type type in allTypes) {
// if (type.IsClass && !type.IsAbstract && !type.IsNested && type.GetInterface(typeof(INode).FullName) != null && !type.Name.StartsWith("Null")) {
// MethodInfo methodInfo = visitor.GetMethod("Visit" + type.Name, BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.ExactBinding, null, new Type[] {type, typeof(object)}, null);
// Assert.IsNotNull(methodInfo, "Visit with parameter " + type.FullName + " not found");
// Assert.AreEqual(2, methodInfo.GetParameters().Length);
// ParameterInfo first = methodInfo.GetParameters()[0];
// Assert.AreEqual(Char.ToLower(first.ParameterType.Name[0]) + first.ParameterType.Name.Substring(1), first.Name);
//
// ParameterInfo second = methodInfo.GetParameters()[1];
// Assert.AreEqual(typeof(System.Object), second.ParameterType);
// Assert.AreEqual("data", second.Name);
// }
// }
// }
//
// [Test]
// public void TestAbstractAstVisitorVisitor()
// {
// Type[] allTypes = typeof(AbstractNode).Assembly.GetTypes();
// Type visitor = typeof(AbstractAstVisitor);
//
// foreach (Type type in allTypes) {
// if (type.IsClass && !type.IsAbstract && !type.IsNested && type.GetInterface(typeof(INode).FullName) != null && !type.Name.StartsWith("Null")) {
// MethodInfo methodInfo = visitor.GetMethod("Visit" + type.Name, BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.ExactBinding, null, new Type[] {type, typeof(object)}, null);
// Assert.IsNotNull(methodInfo, "Visit with parameter " + type.FullName + " not found");
//
// Assert.AreEqual(2, methodInfo.GetParameters().Length);
// ParameterInfo first = methodInfo.GetParameters()[0];
// Assert.AreEqual(Char.ToLower(first.ParameterType.Name[0]) + first.ParameterType.Name.Substring(1), first.Name);
//
// ParameterInfo second = methodInfo.GetParameters()[1];
// Assert.AreEqual(typeof(System.Object), second.ParameterType);
// Assert.AreEqual("data", second.Name);
// }
// }
// }
}
}

77
ICSharpCode.NRefactory.VB.Tests/ICSharpCode.NRefactory.VB.Tests.csproj

@ -66,90 +66,23 @@ @@ -66,90 +66,23 @@
<Compile Include="Lexer\LiteralsTests.cs" />
<Compile Include="Lexer\TokenTests.cs" />
<Compile Include="Lexer\XmlModeLexerTests.cs" />
<Compile Include="Output\CodeDOM\CodeDOMTypeReferenceTest.cs" />
<Compile Include="Parser\CheckParentVisitor.cs" />
<Compile Include="Parser\Expressions\AddressOfExpressionTests.cs" />
<Compile Include="Parser\Expressions\LambdaExpressionTests.cs" />
<Compile Include="Parser\Expressions\QueryExpressionTests.cs" />
<Compile Include="Parser\Expressions\XmlExpressionTests.cs" />
<Compile Include="Parser\Expressions\XmlMemberAccessExpressionTests.cs" />
<Compile Include="Parser\GlobalScope\AttributeSectionTests.cs" />
<Compile Include="Parser\Expressions\PrimitiveExpressionTests.cs" />
<Compile Include="Parser\Expressions\ParenthesizedExpressionTest.cs" />
<Compile Include="Parser\Expressions\ThisReferenceExpressionTests.cs" />
<Compile Include="Parser\Expressions\BaseReferenceExpressionTests.cs" />
<Compile Include="Parser\Expressions\IdentifierExpressionTests.cs" />
<Compile Include="Parser\GlobalScope\NamespaceDeclarationTests.cs" />
<Compile Include="Parser\Expressions\AssignmentExpressionTests.cs" />
<Compile Include="Parser\Expressions\BinaryOperatorExpressionTests.cs" />
<Compile Include="Parser\Expressions\UnaryOperatorExpressionTests.cs" />
<Compile Include="Parser\Expressions\CastExpressionTests.cs" />
<Compile Include="Parser\Expressions\MemberReferenceExpressionTests.cs" />
<Compile Include="Parser\Expressions\InvocationExpressionTests.cs" />
<Compile Include="Parser\Expressions\TypeOfExpressionTests.cs" />
<Compile Include="Parser\Expressions\ArrayCreateExpressionTests.cs" />
<Compile Include="Parser\Expressions\ObjectCreateExpressionTests.cs" />
<Compile Include="Parser\GlobalScope\DelegateDeclarationTests.cs" />
<Compile Include="Parser\Expressions\ConditionalExpressionTests.cs" />
<Compile Include="Parser\GlobalScope\UsingDeclarationTests.cs" />
<Compile Include="Parser\GlobalScope\TypeDeclarationTests.cs" />
<Compile Include="Parser\LocationAssignmentCheckVisitor.cs" />
<Compile Include="Parser\SnippetParserTests.cs" />
<Compile Include="Parser\TypeLevel\ConstructorDeclarationTests.cs" />
<Compile Include="Parser\TypeLevel\EventDeclarationTests.cs" />
<Compile Include="Parser\TypeLevel\FieldDeclarationTests.cs" />
<Compile Include="Parser\TypeLevel\MethodDeclarationTests.cs" />
<Compile Include="Parser\TypeLevel\PropertyDeclarationTests.cs" />
<Compile Include="Parser\TypeLevel\OperatorDeclarationTests.cs" />
<Compile Include="Parser\Statements\BlockStatementTests.cs" />
<Compile Include="Parser\Statements\ContinueStatementTests.cs" />
<Compile Include="Parser\Statements\DoLoopStatementTests.cs" />
<Compile Include="Parser\Statements\ForeachStatementTests.cs" />
<Compile Include="Parser\Statements\GotoStatementTests.cs" />
<Compile Include="Parser\Statements\IfElseStatementTests.cs" />
<Compile Include="Parser\Statements\LabelStatementTests.cs" />
<Compile Include="Parser\Statements\LocalVariableDeclarationTests.cs" />
<Compile Include="Parser\Statements\LockStatementTests.cs" />
<Compile Include="Parser\Statements\ReturnStatementTests.cs" />
<Compile Include="Parser\Statements\ExpressionStatementTests.cs" />
<Compile Include="Parser\Statements\SwitchStatementTests.cs" />
<Compile Include="Parser\Statements\ThrowStatementTests.cs" />
<Compile Include="Parser\Statements\TryCatchStatementTests.cs" />
<Compile Include="Parser\Statements\UsingStatementTests.cs" />
<Compile Include="Parser\Expressions\ClassReferenceExpressionTests.cs" />
<Compile Include="Parser\Expressions\TypeOfIsExpressionTests.cs" />
<Compile Include="Parser\ParseUtil.cs" />
<Compile Include="Parser\GlobalScope\OptionDeclarationTests.cs" />
<Compile Include="Parser\TypeLevel\DeclareDeclarationTests.cs" />
<Compile Include="Parser\Statements\AddHandlerStatementTests.cs" />
<Compile Include="Parser\Statements\EndStatementTests.cs" />
<Compile Include="Parser\Statements\EraseStatementTests.cs" />
<Compile Include="Parser\Statements\ErrorStatementTests.cs" />
<Compile Include="Parser\Statements\ForNextStatementTests.cs" />
<Compile Include="Parser\Statements\OnErrorStatementTest.cs" />
<Compile Include="Parser\Statements\RaiseEventStatementTest.cs" />
<Compile Include="Parser\Statements\ReDimStatementTests.cs" />
<Compile Include="Parser\Statements\RemoveHandlerStatement.cs" />
<Compile Include="Parser\Statements\ResumeStatement.cs" />
<Compile Include="Parser\Statements\StopStatementTests.cs" />
<Compile Include="Parser\Statements\WithStatementTests.cs" />
<Compile Include="Output\CodeDOM\CodeDOMPrimitiveExpressionTest.cs" />
<Compile Include="Output\CodeDOM\CodeDOMParenthesizedExpressionTest.cs" />
<Compile Include="Output\CodeDOM\InvocationExpressionTest.cs" />
<Compile Include="Parser\Expressions\TypeReferenceExpressionTests.cs" />
<Compile Include="Parser\Expressions\GlobalReferenceExpressionTests.cs" />
<Compile Include="Parser\TypeLevel\CustomEventTests.cs" />
<Compile Include="Output\VBNet\VBNetOutputTest.cs" />
<Compile Include="Output\SpecialOutputVisitorTest.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Output\VBNet" />
<Compile Include="Parser\GlobalScope\OptionStatementTests.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ICSharpCode.NRefactory.VB\ICSharpCode.NRefactory.VB.csproj">
<Project>{7B82B671-419F-45F4-B778-D9286F996EFA}</Project>
<Name>ICSharpCode.NRefactory.VB</Name>
</ProjectReference>
<ProjectReference Include="..\ICSharpCode.NRefactory\ICSharpCode.NRefactory.csproj">
<Project>{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}</Project>
<Name>ICSharpCode.NRefactory</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
</Project>

2
ICSharpCode.NRefactory.VB.Tests/Lexer/CustomLexerTests.cs

@ -13,7 +13,7 @@ namespace ICSharpCode.NRefactory.VB.Tests.Lexer @@ -13,7 +13,7 @@ namespace ICSharpCode.NRefactory.VB.Tests.Lexer
{
VBLexer GenerateLexer(StringReader sr)
{
return ParserFactory.CreateLexer(sr);
return new VBLexer(sr);
}
[Test]

2
ICSharpCode.NRefactory.VB.Tests/Lexer/ImplicitLineContinuationTests.cs

@ -213,7 +213,7 @@ End Class"; @@ -213,7 +213,7 @@ End Class";
#region Helpers
VBLexer GenerateLexer(StringReader sr)
{
return ParserFactory.CreateLexer(sr);
return new VBLexer(sr);
}
void CheckTokens(VBLexer lexer, params int[] tokens)

2
ICSharpCode.NRefactory.VB.Tests/Lexer/LexerContextTests.cs

@ -556,7 +556,7 @@ exit Global @@ -556,7 +556,7 @@ exit Global
void RunTest(string code, string expectedOutput)
{
ExpressionFinder p = new ExpressionFinder();
VBLexer lexer = ParserFactory.CreateLexer(new StringReader(code));
VBLexer lexer = new VBLexer(new StringReader(code));
Token t;
do {

42
ICSharpCode.NRefactory.VB.Tests/Lexer/LexerPositionTests.cs

@ -13,7 +13,7 @@ namespace ICSharpCode.NRefactory.VB.Tests.Lexer @@ -13,7 +13,7 @@ namespace ICSharpCode.NRefactory.VB.Tests.Lexer
{
VBLexer GenerateLexer(string s)
{
return ParserFactory.CreateLexer(new StringReader(s));
return new VBLexer(new StringReader(s));
}
[Test]
@ -22,16 +22,16 @@ namespace ICSharpCode.NRefactory.VB.Tests.Lexer @@ -22,16 +22,16 @@ namespace ICSharpCode.NRefactory.VB.Tests.Lexer
VBLexer l = GenerateLexer("public\nstatic");
Token t = l.NextToken();
Assert.AreEqual(Tokens.Public, t.Kind);
Assert.AreEqual(new Location(1, 1), t.Location);
Assert.AreEqual(new Location(7, 1), t.EndLocation);
Assert.AreEqual(new AstLocation(1, 1), t.Location);
Assert.AreEqual(new AstLocation(7, 1), t.EndLocation);
t = l.NextToken();
Assert.AreEqual(Tokens.EOL, t.Kind);
Assert.AreEqual(new Location(7, 1), t.Location);
Assert.AreEqual(new Location(1, 2), t.EndLocation);
Assert.AreEqual(new AstLocation(7, 1), t.Location);
Assert.AreEqual(new AstLocation(1, 2), t.EndLocation);
t = l.NextToken();
Assert.AreEqual(Tokens.Static, t.Kind);
Assert.AreEqual(new Location(1, 2), t.Location);
Assert.AreEqual(new Location(7, 2), t.EndLocation);
Assert.AreEqual(new AstLocation(1, 2), t.Location);
Assert.AreEqual(new AstLocation(7, 2), t.EndLocation);
}
[Test]
@ -40,16 +40,16 @@ namespace ICSharpCode.NRefactory.VB.Tests.Lexer @@ -40,16 +40,16 @@ namespace ICSharpCode.NRefactory.VB.Tests.Lexer
VBLexer l = GenerateLexer("public\r\nstatic");
Token t = l.NextToken();
Assert.AreEqual(Tokens.Public, t.Kind);
Assert.AreEqual(new Location(1, 1), t.Location);
Assert.AreEqual(new Location(7, 1), t.EndLocation);
Assert.AreEqual(new AstLocation(1, 1), t.Location);
Assert.AreEqual(new AstLocation(7, 1), t.EndLocation);
t = l.NextToken();
Assert.AreEqual(Tokens.EOL, t.Kind);
Assert.AreEqual(new Location(7, 1), t.Location);
Assert.AreEqual(new Location(1, 2), t.EndLocation);
Assert.AreEqual(new AstLocation(7, 1), t.Location);
Assert.AreEqual(new AstLocation(1, 2), t.EndLocation);
t = l.NextToken();
Assert.AreEqual(Tokens.Static, t.Kind);
Assert.AreEqual(new Location(1, 2), t.Location);
Assert.AreEqual(new Location(7, 2), t.EndLocation);
Assert.AreEqual(new AstLocation(1, 2), t.Location);
Assert.AreEqual(new AstLocation(7, 2), t.EndLocation);
}
[Test]
@ -59,13 +59,13 @@ namespace ICSharpCode.NRefactory.VB.Tests.Lexer @@ -59,13 +59,13 @@ namespace ICSharpCode.NRefactory.VB.Tests.Lexer
l.NextToken(); // public
Token t = l.NextToken();
Assert.AreEqual(Tokens.EOL, t.Kind);
Assert.AreEqual(new Location(7, 1), t.Location);
Assert.AreEqual(new Location(7, 1), t.EndLocation);
Assert.AreEqual(new AstLocation(7, 1), t.Location);
Assert.AreEqual(new AstLocation(7, 1), t.EndLocation);
t = l.NextToken();
Assert.AreEqual(Tokens.EOF, t.Kind);
Assert.AreEqual(new Location(7, 1), t.Location);
Assert.AreEqual(new Location(7, 1), t.EndLocation);
Assert.AreEqual(new AstLocation(7, 1), t.Location);
Assert.AreEqual(new AstLocation(7, 1), t.EndLocation);
}
[Test]
@ -75,13 +75,13 @@ namespace ICSharpCode.NRefactory.VB.Tests.Lexer @@ -75,13 +75,13 @@ namespace ICSharpCode.NRefactory.VB.Tests.Lexer
l.NextToken(); // public
Token t = l.NextToken();
Assert.AreEqual(Tokens.EOL, t.Kind);
Assert.AreEqual(new Location(2, 2), t.Location);
Assert.AreEqual(new Location(2, 2), t.EndLocation);
Assert.AreEqual(new AstLocation(2, 2), t.Location);
Assert.AreEqual(new AstLocation(2, 2), t.EndLocation);
t = l.NextToken();
Assert.AreEqual(Tokens.EOF, t.Kind);
Assert.AreEqual(new Location(2, 2), t.Location);
Assert.AreEqual(new Location(2, 2), t.EndLocation);
Assert.AreEqual(new AstLocation(2, 2), t.Location);
Assert.AreEqual(new AstLocation(2, 2), t.EndLocation);
}
}
}

2
ICSharpCode.NRefactory.VB.Tests/Lexer/LexerTests.cs

@ -13,7 +13,7 @@ namespace ICSharpCode.NRefactory.VB.Tests.Lexer @@ -13,7 +13,7 @@ namespace ICSharpCode.NRefactory.VB.Tests.Lexer
{
VBLexer GenerateLexer(StringReader sr)
{
return ParserFactory.CreateLexer(sr);
return new VBLexer(sr);
}
[Test]

2
ICSharpCode.NRefactory.VB.Tests/Lexer/LiteralsTests.cs

@ -13,7 +13,7 @@ namespace ICSharpCode.NRefactory.VB.Tests.Lexer @@ -13,7 +13,7 @@ namespace ICSharpCode.NRefactory.VB.Tests.Lexer
{
VBLexer GenerateLexer(StringReader sr)
{
return ParserFactory.CreateLexer(sr);
return new VBLexer(sr);
}
Token GetSingleToken(string text)

4
ICSharpCode.NRefactory.VB.Tests/Lexer/XmlModeLexerTests.cs

@ -948,12 +948,12 @@ End Using"; @@ -948,12 +948,12 @@ End Using";
#region Helpers
VBLexer GenerateLexer(StringReader sr)
{
return ParserFactory.CreateLexer(sr);
return new VBLexer(sr);
}
VBLexer GenerateLexerForSnippet(StringReader sr, SnippetType type)
{
var lexer = ParserFactory.CreateLexer(sr);
var lexer = new VBLexer(sr);
lexer.SetInitialContext(type);
return lexer;
}

2
ICSharpCode.NRefactory.VB.Tests/Output/SpecialOutputVisitorTest.cs

@ -8,7 +8,7 @@ using System.IO; @@ -8,7 +8,7 @@ using System.IO;
using ICSharpCode.NRefactory.VB.Ast;
using ICSharpCode.NRefactory.VB.Parser;
using ICSharpCode.NRefactory.VB.PrettyPrinter;
using ICSharpCode.NRefactory.VB.Visitors;
using NUnit.Framework;
namespace ICSharpCode.NRefactory.VB.Tests.PrettyPrinter

35
ICSharpCode.NRefactory.VB.Tests/Parser/CheckParentVisitor.cs

@ -1,35 +0,0 @@ @@ -1,35 +0,0 @@
// 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 NUnit.Framework;
using System;
using System.Collections.Generic;
using ICSharpCode.NRefactory.VB.Ast;
using ICSharpCode.NRefactory.VB.Visitors;
namespace ICSharpCode.NRefactory.VB.Tests.Ast
{
/// <summary>
/// Ensures that all nodes have the Parent property correctly set.
/// </summary>
public class CheckParentVisitor : NodeTrackingAstVisitor
{
Stack<INode> nodeStack = new Stack<INode>();
public CheckParentVisitor()
{
nodeStack.Push(null);
}
protected override void BeginVisit(INode node)
{
nodeStack.Push(node);
}
protected override void EndVisit(INode node)
{
Assert.AreSame(node, nodeStack.Pop(), "nodeStack was corrupted!");
Assert.AreSame(nodeStack.Peek(), node.Parent, "node " + node + " is missing parent: " + nodeStack.Peek());
}
}
}

42
ICSharpCode.NRefactory.VB.Tests/Parser/Expressions/BinaryOperatorExpressionTests.cs

@ -264,47 +264,5 @@ namespace ICSharpCode.NRefactory.VB.Tests.Ast @@ -264,47 +264,5 @@ namespace ICSharpCode.NRefactory.VB.Tests.Ast
Assert.IsTrue(boe.Right is PrimitiveExpression);
}
#endregion
#region AddIntegerTests
string AddIntegerToBoe(string input, int number)
{
return AddInteger<BinaryOperatorExpression>(input, number);
}
string AddInteger<T>(string input, int number) where T : Expression
{
Expression e = ParseUtil.ParseExpression<T>(input);
e = Expression.AddInteger(e, number);
VBNetOutputVisitor v = new VBNetOutputVisitor();
e.AcceptVisitor(v, null);
return v.Text;
}
[Test]
public void AddInteger()
{
Assert.AreEqual("a + 2", AddIntegerToBoe("a + 1", 1));
Assert.AreEqual("a + 2", AddIntegerToBoe("a + 3", -1));
Assert.AreEqual("a + b + c + 2", AddIntegerToBoe("a + b + c + 1", 1));
Assert.AreEqual("a", AddIntegerToBoe("a + 1", -1));
Assert.AreEqual("2", AddInteger<PrimitiveExpression>("1", 1));
Assert.AreEqual("-1", AddInteger<PrimitiveExpression>("1", -2));
Assert.AreEqual("0", AddInteger<PrimitiveExpression>("1", -1));
Assert.AreEqual("a + 1", AddInteger<SimpleNameExpression>("a", 1));
}
[Test]
public void AddIntegerWithNegativeResult()
{
Assert.AreEqual("a - 1", AddIntegerToBoe("a + 1", -2));
Assert.AreEqual("a - 2", AddIntegerToBoe("a - 1", -1));
Assert.AreEqual("a + b + c - 2", AddIntegerToBoe("a + b + c + 2", -4));
Assert.AreEqual("a + b + c - 6", AddIntegerToBoe("a + b + c - 2", -4));
Assert.AreEqual("a + b + c", AddIntegerToBoe("a + b + c + 2", -2));
Assert.AreEqual("a", AddIntegerToBoe("a - 1", 1));
Assert.AreEqual("a + 1", AddIntegerToBoe("a - 2", 3));
Assert.AreEqual("a - 1", AddInteger<SimpleNameExpression>("a", -1));
}
#endregion
}
}

4
ICSharpCode.NRefactory.VB.Tests/Parser/Expressions/XmlExpressionTests.cs

@ -230,7 +230,7 @@ namespace ICSharpCode.NRefactory.VB.Tests.Ast @@ -230,7 +230,7 @@ namespace ICSharpCode.NRefactory.VB.Tests.Ast
}
#endregion
void CheckElement(INode node, string name, Location start, Location end)
void CheckElement(AstNode node, string name, AstLocation start, AstLocation end)
{
Assert.IsTrue(node is XmlElementExpression);
XmlElementExpression expr = node as XmlElementExpression;
@ -242,7 +242,7 @@ namespace ICSharpCode.NRefactory.VB.Tests.Ast @@ -242,7 +242,7 @@ namespace ICSharpCode.NRefactory.VB.Tests.Ast
Assert.AreEqual(end, expr.EndLocation);
}
void CheckContent(INode node, string content, XmlContentType type, Location start, Location end)
void CheckContent(AstNode node, string content, XmlContentType type, AstLocation start, AstLocation end)
{
Assert.IsTrue(node is XmlContentExpression);
XmlContentExpression expr = node as XmlContentExpression;

116
ICSharpCode.NRefactory.VB.Tests/Parser/GlobalScope/AttributeSectionTests.cs

@ -12,63 +12,63 @@ namespace ICSharpCode.NRefactory.VB.Tests.Ast @@ -12,63 +12,63 @@ namespace ICSharpCode.NRefactory.VB.Tests.Ast
[TestFixture]
public class AttributeSectionTests
{
[Test]
public void AttributeOnStructure()
{
string program = @"
<StructLayout( LayoutKind.Explicit )> _
Public Structure MyUnion
<FieldOffset( 0 )> Public i As Integer
< FieldOffset( 0 )> Public d As Double
End Structure 'MyUnion
";
TypeDeclaration decl = ParseUtil.ParseGlobal<TypeDeclaration>(program);
Assert.AreEqual("StructLayout", decl.Attributes[0].Attributes[0].Type);
}
[Test]
public void AttributeOnModule()
{
string program = @"
<HideModule> _
Public Module MyExtra
Public i As Integer
Public d As Double
End Module
";
TypeDeclaration decl = ParseUtil.ParseGlobal<TypeDeclaration>(program);
Assert.AreEqual("HideModule", decl.Attributes[0].Attributes[0].Type);
}
[Test]
public void GlobalAttribute()
{
string program = @"<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class Form1
End Class";
TypeDeclaration decl = ParseUtil.ParseGlobal<TypeDeclaration>(program);
Assert.AreEqual("Microsoft.VisualBasic.CompilerServices.DesignerGenerated", decl.Attributes[0].Attributes[0].Type);
}
[Test]
public void AssemblyAttribute()
{
string program = @"<assembly: System.Attribute()>";
AttributeSection decl = ParseUtil.ParseGlobal<AttributeSection>(program);
Assert.AreEqual(new Location(1, 1), decl.StartLocation);
Assert.AreEqual("assembly", decl.AttributeTarget);
}
[Test]
public void ModuleAttributeTargetEscaped()
{
// check that this doesn't crash the parser:
ParseUtil.ParseGlobal<AttributeSection>("<[Module]: SuppressMessageAttribute>", true);
}
// [Test]
// public void AttributeOnStructure()
// {
// string program = @"
//<StructLayout( LayoutKind.Explicit )> _
//Public Structure MyUnion
//
// <FieldOffset( 0 )> Public i As Integer
// < FieldOffset( 0 )> Public d As Double
//
//End Structure 'MyUnion
//";
// TypeDeclaration decl = ParseUtil.ParseGlobal<TypeDeclaration>(program);
// Assert.AreEqual("StructLayout", decl.Attributes[0].Attributes[0].Type);
// }
//
// [Test]
// public void AttributeOnModule()
// {
// string program = @"
//<HideModule> _
//Public Module MyExtra
//
// Public i As Integer
// Public d As Double
//
//End Module
//";
// TypeDeclaration decl = ParseUtil.ParseGlobal<TypeDeclaration>(program);
// Assert.AreEqual("HideModule", decl.Attributes[0].Attributes[0].Type);
// }
//
// [Test]
// public void GlobalAttribute()
// {
// string program = @"<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
//Public Class Form1
//
//End Class";
// TypeDeclaration decl = ParseUtil.ParseGlobal<TypeDeclaration>(program);
// Assert.AreEqual("Microsoft.VisualBasic.CompilerServices.DesignerGenerated", decl.Attributes[0].Attributes[0].Type);
// }
//
// [Test]
// public void AssemblyAttribute()
// {
// string program = @"<assembly: System.Attribute()>";
// AttributeSection decl = ParseUtil.ParseGlobal<AttributeSection>(program);
// Assert.AreEqual(new Location(1, 1), decl.StartLocation);
// Assert.AreEqual("assembly", decl.AttributeTarget);
// }
//
// [Test]
// public void ModuleAttributeTargetEscaped()
// {
// // check that this doesn't crash the parser:
// ParseUtil.ParseGlobal<AttributeSection>("<[Module]: SuppressMessageAttribute>", true);
// }
}
}

42
ICSharpCode.NRefactory.VB.Tests/Parser/GlobalScope/DelegateDeclarationTests.cs

@ -1,42 +0,0 @@ @@ -1,42 +0,0 @@
// 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 ICSharpCode.NRefactory.VB.Ast;
using NUnit.Framework;
namespace ICSharpCode.NRefactory.VB.Tests.Ast
{
[TestFixture]
public class DelegateDeclarationTests
{
void TestDelegateDeclaration(DelegateDeclaration dd)
{
Assert.AreEqual("System.Void", dd.ReturnType.Type);
Assert.AreEqual("MyDelegate", dd.Name);
}
void TestParameters(DelegateDeclaration dd)
{
Assert.AreEqual(3, dd.Parameters.Count);
Assert.AreEqual("a", ((ParameterDeclarationExpression)dd.Parameters[0]).ParameterName);
Assert.AreEqual("System.Int32", ((ParameterDeclarationExpression)dd.Parameters[0]).TypeReference.Type);
Assert.AreEqual("secondParam", ((ParameterDeclarationExpression)dd.Parameters[1]).ParameterName);
Assert.AreEqual("System.Int32", ((ParameterDeclarationExpression)dd.Parameters[1]).TypeReference.Type);
Assert.AreEqual("lastParam", ((ParameterDeclarationExpression)dd.Parameters[2]).ParameterName);
Assert.AreEqual("MyObj", ((ParameterDeclarationExpression)dd.Parameters[2]).TypeReference.Type);
}
#region VB.NET
[Test]
public void SimpleVBNetDelegateDeclarationTest()
{
string program = "Public Delegate Sub MyDelegate(ByVal a As Integer, ByVal secondParam As Integer, ByVal lastParam As MyObj)\n";
TestDelegateDeclaration(ParseUtil.ParseGlobal<DelegateDeclaration>(program));
}
#endregion
}
}

58
ICSharpCode.NRefactory.VB.Tests/Parser/GlobalScope/NamespaceDeclarationTests.cs

@ -10,34 +10,34 @@ namespace ICSharpCode.NRefactory.VB.Tests.Ast @@ -10,34 +10,34 @@ namespace ICSharpCode.NRefactory.VB.Tests.Ast
[TestFixture]
public class NamespaceDeclarationTests
{
#region VB.NET
[Test]
public void VBNetSimpleNamespaceTest()
{
string program = "Namespace TestNamespace" + Environment.NewLine +
"End Namespace" +Environment.NewLine;
NamespaceDeclaration ns = ParseUtil.ParseGlobal<NamespaceDeclaration>(program);
Assert.AreEqual("TestNamespace", ns.Name);
}
[Test]
public void VBNetJuggedNamespaceTest()
{
string program = "Namespace N1 'TestNamespace\n" +
" Namespace N2 ' Declares a namespace named N2 within N1.\n" +
" End Namespace\n" +
"End Namespace\n";
NamespaceDeclaration ns = ParseUtil.ParseGlobal<NamespaceDeclaration>(program);
Assert.AreEqual("N1", ns.Name);
Assert.IsTrue(ns.Children[0] is NamespaceDeclaration);
ns = (NamespaceDeclaration)ns.Children[0];
Assert.AreEqual("N2", ns.Name);
}
#endregion
// #region VB.NET
// [Test]
// public void VBNetSimpleNamespaceTest()
// {
// string program = "Namespace TestNamespace" + Environment.NewLine +
// "End Namespace" +Environment.NewLine;
// NamespaceDeclaration ns = ParseUtil.ParseGlobal<NamespaceDeclaration>(program);
// Assert.AreEqual("TestNamespace", ns.Name);
// }
//
// [Test]
// public void VBNetJuggedNamespaceTest()
// {
// string program = "Namespace N1 'TestNamespace\n" +
// " Namespace N2 ' Declares a namespace named N2 within N1.\n" +
// " End Namespace\n" +
// "End Namespace\n";
//
// NamespaceDeclaration ns = ParseUtil.ParseGlobal<NamespaceDeclaration>(program);
//
// Assert.AreEqual("N1", ns.Name);
//
// Assert.IsTrue(ns.Children[0] is NamespaceDeclaration);
//
// ns = (NamespaceDeclaration)ns.Children[0];
//
// Assert.AreEqual("N2", ns.Name);
// }
// #endregion
}
}

87
ICSharpCode.NRefactory.VB.Tests/Parser/GlobalScope/OptionDeclarationTests.cs

@ -1,87 +0,0 @@ @@ -1,87 +0,0 @@
// 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 ICSharpCode.NRefactory.VB.Parser;
using ICSharpCode.NRefactory.VB.Ast;
using NUnit.Framework;
namespace ICSharpCode.NRefactory.VB.Tests.Ast
{
[TestFixture]
public class OptionDeclarationTests
{
[Test]
public void VBNetStrictOptionDeclarationTest()
{
string program = "Option Strict On\n";
OptionDeclaration opDec = ParseUtil.ParseGlobal<OptionDeclaration>(program);
Assert.AreEqual(OptionType.Strict, opDec.OptionType);
Assert.IsTrue(opDec.OptionValue);
}
[Test]
public void VBNetExplicitOptionDeclarationTest()
{
string program = "Option Explicit Off\n";
OptionDeclaration opDec = ParseUtil.ParseGlobal<OptionDeclaration>(program);
Assert.AreEqual(OptionType.Explicit, opDec.OptionType);
Assert.IsFalse(opDec.OptionValue, "Off option value excepted!");
}
[Test]
public void VBNetCompareBinaryOptionDeclarationTest()
{
string program = "Option Compare Binary\n";
OptionDeclaration opDec = ParseUtil.ParseGlobal<OptionDeclaration>(program);
Assert.AreEqual(OptionType.CompareBinary, opDec.OptionType);
Assert.IsTrue(opDec.OptionValue);
}
[Test]
public void VBNetCompareTextOptionDeclarationTest()
{
string program = "Option Compare Text\n";
OptionDeclaration opDec = ParseUtil.ParseGlobal<OptionDeclaration>(program);
Assert.AreEqual(OptionType.CompareText, opDec.OptionType);
Assert.IsTrue(opDec.OptionValue);
}
[Test]
public void VBNetInferOnOptionDeclarationTest()
{
string program = "Option Infer On\n";
OptionDeclaration opDec = ParseUtil.ParseGlobal<OptionDeclaration>(program);
Assert.AreEqual(OptionType.Infer, opDec.OptionType);
Assert.IsTrue(opDec.OptionValue);
}
[Test]
public void VBNetInferOffOptionDeclarationTest()
{
string program = "Option Infer\n";
OptionDeclaration opDec = ParseUtil.ParseGlobal<OptionDeclaration>(program);
Assert.AreEqual(OptionType.Infer, opDec.OptionType);
Assert.IsTrue(opDec.OptionValue);
}
[Test]
public void VBNetInferOptionDeclarationTest()
{
string program = "Option Infer\n";
OptionDeclaration opDec = ParseUtil.ParseGlobal<OptionDeclaration>(program);
Assert.AreEqual(OptionType.Infer, opDec.OptionType);
Assert.IsTrue(opDec.OptionValue);
}
[Test]
public void VBNetInvalidOptionDeclarationTest()
{
string program = "Option\n";
VBParser parser = ParserFactory.CreateParser(new StringReader(program));
parser.Parse();
Assert.IsFalse(parser.Errors.ErrorOutput.Length == 0, "Expected errors, but operation completed successfully");
}
}
}

91
ICSharpCode.NRefactory.VB.Tests/Parser/GlobalScope/OptionStatementTests.cs

@ -0,0 +1,91 @@ @@ -0,0 +1,91 @@
// 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 ICSharpCode.NRefactory.VB.Parser;
using ICSharpCode.NRefactory.VB.Ast;
using NUnit.Framework;
namespace ICSharpCode.NRefactory.VB.Tests.Ast
{
[TestFixture]
public class OptionStatementTests
{
[Test]
public void VBNetStrictOptionDeclarationTest()
{
string program = "Option Strict On\n";
var node = new OptionStatement {
OptionType = OptionType.Strict,
OptionValue = OptionValue.On
};
ParseUtil.AssertGlobal(program, node);
}
//
// [Test]
// public void VBNetExplicitOptionDeclarationTest()
// {
// string program = "Option Explicit Off\n";
// OptionDeclaration opDec = ParseUtil.ParseGlobal<OptionDeclaration>(program);
// Assert.AreEqual(OptionType.Explicit, opDec.OptionType);
// Assert.IsFalse(opDec.OptionValue, "Off option value excepted!");
// }
//
// [Test]
// public void VBNetCompareBinaryOptionDeclarationTest()
// {
// string program = "Option Compare Binary\n";
// OptionDeclaration opDec = ParseUtil.ParseGlobal<OptionDeclaration>(program);
// Assert.AreEqual(OptionType.CompareBinary, opDec.OptionType);
// Assert.IsTrue(opDec.OptionValue);
// }
//
// [Test]
// public void VBNetCompareTextOptionDeclarationTest()
// {
// string program = "Option Compare Text\n";
// OptionDeclaration opDec = ParseUtil.ParseGlobal<OptionDeclaration>(program);
// Assert.AreEqual(OptionType.CompareText, opDec.OptionType);
// Assert.IsTrue(opDec.OptionValue);
// }
//
// [Test]
// public void VBNetInferOnOptionDeclarationTest()
// {
// string program = "Option Infer On\n";
// OptionDeclaration opDec = ParseUtil.ParseGlobal<OptionDeclaration>(program);
// Assert.AreEqual(OptionType.Infer, opDec.OptionType);
// Assert.IsTrue(opDec.OptionValue);
// }
//
// [Test]
// public void VBNetInferOffOptionDeclarationTest()
// {
// string program = "Option Infer\n";
// OptionDeclaration opDec = ParseUtil.ParseGlobal<OptionDeclaration>(program);
// Assert.AreEqual(OptionType.Infer, opDec.OptionType);
// Assert.IsTrue(opDec.OptionValue);
// }
//
// [Test]
// public void VBNetInferOptionDeclarationTest()
// {
// string program = "Option Infer\n";
// OptionDeclaration opDec = ParseUtil.ParseGlobal<OptionDeclaration>(program);
// Assert.AreEqual(OptionType.Infer, opDec.OptionType);
// Assert.IsTrue(opDec.OptionValue);
// }
//
// [Test]
// public void VBNetInvalidOptionDeclarationTest()
// {
// string program = "Option\n";
// VBParser parser = ParserFactory.CreateParser(new StringReader(program));
// parser.Parse();
// Assert.IsFalse(parser.Errors.ErrorOutput.Length == 0, "Expected errors, but operation completed successfully");
// }
}
}

378
ICSharpCode.NRefactory.VB.Tests/Parser/GlobalScope/TypeDeclarationTests.cs

@ -10,194 +10,194 @@ namespace ICSharpCode.NRefactory.VB.Tests.Ast @@ -10,194 +10,194 @@ namespace ICSharpCode.NRefactory.VB.Tests.Ast
[TestFixture]
public class TypeDeclarationTests
{
#region VB.NET
[Test]
public void VBNetSimpleClassTypeDeclarationTest()
{
string program = "Class TestClass\n" +
"End Class\n";
TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
Assert.AreEqual("TestClass", td.Name);
Assert.AreEqual(ClassType.Class, td.Type);
Assert.AreEqual(1, td.StartLocation.Line, "start line");
Assert.AreEqual(1, td.BodyStartLocation.Line, "bodystart line");
Assert.AreEqual(16, td.BodyStartLocation.Column, "bodystart col");
Assert.AreEqual(2, td.EndLocation.Line, "end line");
Assert.AreEqual(10, td.EndLocation.Column, "end col");
}
[Test]
public void VBNetMissingBaseClassTest()
{
// SD2-1499: test that this invalid code doesn't crash
TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>("public class test inherits", true);
Assert.AreEqual(0, td.BaseTypes.Count);
}
[Test]
public void VBNetEnumWithBaseClassDeclarationTest()
{
string program = "Enum TestEnum As Byte\n" +
"End Enum\n";
TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
Assert.AreEqual("TestEnum", td.Name);
Assert.AreEqual(ClassType.Enum, td.Type);
Assert.AreEqual("System.Byte", td.BaseTypes[0].Type);
Assert.AreEqual(0, td.Children.Count);
}
[Test]
public void VBNetEnumOnSingleLine()
{
string program = "Enum TestEnum : A : B = 1 : C : End Enum";
TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
Assert.AreEqual("TestEnum", td.Name);
Assert.AreEqual(ClassType.Enum, td.Type);
Assert.AreEqual(3, td.Children.Count);
}
[Test]
public void VBNetEnumOnSingleLine2()
{
string program = "Enum TestEnum : A : : B = 1 :: C : End Enum";
TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
Assert.AreEqual("TestEnum", td.Name);
Assert.AreEqual(ClassType.Enum, td.Type);
Assert.AreEqual(3, td.Children.Count);
}
[Test]
public void VBNetEnumWithSystemBaseClassDeclarationTest()
{
string program = "Enum TestEnum As System.UInt16\n" +
"End Enum\n";
TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
Assert.AreEqual("TestEnum", td.Name);
Assert.AreEqual(ClassType.Enum, td.Type);
Assert.AreEqual("System.UInt16", td.BaseTypes[0].Type);
Assert.AreEqual(0, td.Children.Count);
}
[Test]
public void VBNetSimpleClassTypeDeclarationWithoutLastNewLineTest()
{
string program = "Class TestClass\n" +
"End Class";
TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
Assert.AreEqual("TestClass", td.Name);
Assert.AreEqual(ClassType.Class, td.Type);
Assert.AreEqual(1, td.StartLocation.Line, "start line");
Assert.AreEqual(2, td.EndLocation.Line, "end line");
}
[Test]
public void VBNetSimpleClassTypeDeclarationWithColon()
{
string program = "Class TestClass\n" +
" : \n" +
"End Class";
TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
Assert.AreEqual("TestClass", td.Name);
Assert.AreEqual(ClassType.Class, td.Type);
}
[Test]
public void VBNetSimplePartialClassTypeDeclarationTest()
{
string program = "Partial Class TestClass\n" +
"End Class\n";
TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
Assert.AreEqual("TestClass", td.Name);
Assert.AreEqual(ClassType.Class, td.Type);
Assert.AreEqual(Modifiers.Partial, td.Modifier);
}
[Test]
public void VBNetPartialPublicClass()
{
string program = "Partial Public Class TestClass\nEnd Class\n";
TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
Assert.AreEqual("TestClass", td.Name);
Assert.AreEqual(ClassType.Class, td.Type);
Assert.AreEqual(Modifiers.Partial | Modifiers.Public, td.Modifier);
}
[Test]
public void VBNetGenericClassTypeDeclarationTest()
{
string declr = @"
Public Class Test(Of T)
End Class
";
TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(declr);
Assert.AreEqual(ClassType.Class, td.Type);
Assert.AreEqual("Test", td.Name);
Assert.AreEqual(Modifiers.Public, td.Modifier);
Assert.AreEqual(0, td.BaseTypes.Count);
Assert.AreEqual(1, td.Templates.Count);
Assert.AreEqual("T", td.Templates[0].Name);
}
[Test]
public void VBNetGenericClassWithConstraint()
{
string declr = @"
Public Class Test(Of T As IMyInterface)
End Class
";
TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(declr);
Assert.AreEqual(ClassType.Class, td.Type);
Assert.AreEqual("Test", td.Name);
Assert.AreEqual(1, td.Templates.Count);
Assert.AreEqual("T", td.Templates[0].Name);
Assert.AreEqual("IMyInterface", td.Templates[0].Bases[0].Type);
}
[Test]
public void VBNetComplexGenericClassTypeDeclarationTest()
{
string declr = @"
Public Class Generic(Of T As MyNamespace.IMyInterface, S As {G(Of T()), IAnotherInterface})
Implements System.IComparable
End Class
";
TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(declr);
Assert.AreEqual(ClassType.Class, td.Type);
Assert.AreEqual("Generic", td.Name);
Assert.AreEqual(Modifiers.Public, td.Modifier);
Assert.AreEqual(1, td.BaseTypes.Count);
Assert.AreEqual("System.IComparable", td.BaseTypes[0].Type);
Assert.AreEqual(2, td.Templates.Count);
Assert.AreEqual("T", td.Templates[0].Name);
Assert.AreEqual("MyNamespace.IMyInterface", td.Templates[0].Bases[0].Type);
Assert.AreEqual("S", td.Templates[1].Name);
Assert.AreEqual(2, td.Templates[1].Bases.Count);
Assert.AreEqual("G", td.Templates[1].Bases[0].Type);
Assert.AreEqual(1, td.Templates[1].Bases[0].GenericTypes.Count);
Assert.IsTrue(td.Templates[1].Bases[0].GenericTypes[0].IsArrayType);
Assert.AreEqual("T", td.Templates[1].Bases[0].GenericTypes[0].Type);
Assert.AreEqual(new int[] {0}, td.Templates[1].Bases[0].GenericTypes[0].RankSpecifier);
Assert.AreEqual("IAnotherInterface", td.Templates[1].Bases[1].Type);
}
#endregion
// #region VB.NET
// [Test]
// public void VBNetSimpleClassTypeDeclarationTest()
// {
// string program = "Class TestClass\n" +
// "End Class\n";
// TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
//
// Assert.AreEqual("TestClass", td.Name);
// Assert.AreEqual(ClassType.Class, td.Type);
// Assert.AreEqual(1, td.StartLocation.Line, "start line");
// Assert.AreEqual(1, td.BodyStartLocation.Line, "bodystart line");
// Assert.AreEqual(16, td.BodyStartLocation.Column, "bodystart col");
// Assert.AreEqual(2, td.EndLocation.Line, "end line");
// Assert.AreEqual(10, td.EndLocation.Column, "end col");
// }
//
// [Test]
// public void VBNetMissingBaseClassTest()
// {
// // SD2-1499: test that this invalid code doesn't crash
// TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>("public class test inherits", true);
// Assert.AreEqual(0, td.BaseTypes.Count);
// }
//
// [Test]
// public void VBNetEnumWithBaseClassDeclarationTest()
// {
// string program = "Enum TestEnum As Byte\n" +
// "End Enum\n";
// TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
//
// Assert.AreEqual("TestEnum", td.Name);
// Assert.AreEqual(ClassType.Enum, td.Type);
// Assert.AreEqual("System.Byte", td.BaseTypes[0].Type);
// Assert.AreEqual(0, td.Children.Count);
// }
//
// [Test]
// public void VBNetEnumOnSingleLine()
// {
// string program = "Enum TestEnum : A : B = 1 : C : End Enum";
// TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
//
// Assert.AreEqual("TestEnum", td.Name);
// Assert.AreEqual(ClassType.Enum, td.Type);
// Assert.AreEqual(3, td.Children.Count);
// }
//
// [Test]
// public void VBNetEnumOnSingleLine2()
// {
// string program = "Enum TestEnum : A : : B = 1 :: C : End Enum";
// TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
//
// Assert.AreEqual("TestEnum", td.Name);
// Assert.AreEqual(ClassType.Enum, td.Type);
// Assert.AreEqual(3, td.Children.Count);
// }
//
//
// [Test]
// public void VBNetEnumWithSystemBaseClassDeclarationTest()
// {
// string program = "Enum TestEnum As System.UInt16\n" +
// "End Enum\n";
// TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
//
// Assert.AreEqual("TestEnum", td.Name);
// Assert.AreEqual(ClassType.Enum, td.Type);
// Assert.AreEqual("System.UInt16", td.BaseTypes[0].Type);
// Assert.AreEqual(0, td.Children.Count);
// }
//
// [Test]
// public void VBNetSimpleClassTypeDeclarationWithoutLastNewLineTest()
// {
// string program = "Class TestClass\n" +
// "End Class";
// TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
//
// Assert.AreEqual("TestClass", td.Name);
// Assert.AreEqual(ClassType.Class, td.Type);
// Assert.AreEqual(1, td.StartLocation.Line, "start line");
// Assert.AreEqual(2, td.EndLocation.Line, "end line");
// }
//
// [Test]
// public void VBNetSimpleClassTypeDeclarationWithColon()
// {
// string program = "Class TestClass\n" +
// " : \n" +
// "End Class";
// TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
//
// Assert.AreEqual("TestClass", td.Name);
// Assert.AreEqual(ClassType.Class, td.Type);
// }
//
// [Test]
// public void VBNetSimplePartialClassTypeDeclarationTest()
// {
// string program = "Partial Class TestClass\n" +
// "End Class\n";
// TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
//
// Assert.AreEqual("TestClass", td.Name);
// Assert.AreEqual(ClassType.Class, td.Type);
// Assert.AreEqual(Modifiers.Partial, td.Modifier);
// }
//
// [Test]
// public void VBNetPartialPublicClass()
// {
// string program = "Partial Public Class TestClass\nEnd Class\n";
// TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(program);
//
// Assert.AreEqual("TestClass", td.Name);
// Assert.AreEqual(ClassType.Class, td.Type);
// Assert.AreEqual(Modifiers.Partial | Modifiers.Public, td.Modifier);
// }
//
// [Test]
// public void VBNetGenericClassTypeDeclarationTest()
// {
// string declr = @"
//Public Class Test(Of T)
//
//End Class
//";
// TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(declr);
//
// Assert.AreEqual(ClassType.Class, td.Type);
// Assert.AreEqual("Test", td.Name);
// Assert.AreEqual(Modifiers.Public, td.Modifier);
// Assert.AreEqual(0, td.BaseTypes.Count);
// Assert.AreEqual(1, td.Templates.Count);
// Assert.AreEqual("T", td.Templates[0].Name);
// }
//
// [Test]
// public void VBNetGenericClassWithConstraint()
// {
// string declr = @"
//Public Class Test(Of T As IMyInterface)
//
//End Class
//";
// TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(declr);
//
// Assert.AreEqual(ClassType.Class, td.Type);
// Assert.AreEqual("Test", td.Name);
//
// Assert.AreEqual(1, td.Templates.Count);
// Assert.AreEqual("T", td.Templates[0].Name);
// Assert.AreEqual("IMyInterface", td.Templates[0].Bases[0].Type);
// }
//
// [Test]
// public void VBNetComplexGenericClassTypeDeclarationTest()
// {
// string declr = @"
//Public Class Generic(Of T As MyNamespace.IMyInterface, S As {G(Of T()), IAnotherInterface})
// Implements System.IComparable
//
//End Class
//";
// TypeDeclaration td = ParseUtil.ParseGlobal<TypeDeclaration>(declr);
//
// Assert.AreEqual(ClassType.Class, td.Type);
// Assert.AreEqual("Generic", td.Name);
// Assert.AreEqual(Modifiers.Public, td.Modifier);
// Assert.AreEqual(1, td.BaseTypes.Count);
// Assert.AreEqual("System.IComparable", td.BaseTypes[0].Type);
//
// Assert.AreEqual(2, td.Templates.Count);
// Assert.AreEqual("T", td.Templates[0].Name);
// Assert.AreEqual("MyNamespace.IMyInterface", td.Templates[0].Bases[0].Type);
//
// Assert.AreEqual("S", td.Templates[1].Name);
// Assert.AreEqual(2, td.Templates[1].Bases.Count);
// Assert.AreEqual("G", td.Templates[1].Bases[0].Type);
// Assert.AreEqual(1, td.Templates[1].Bases[0].GenericTypes.Count);
// Assert.IsTrue(td.Templates[1].Bases[0].GenericTypes[0].IsArrayType);
// Assert.AreEqual("T", td.Templates[1].Bases[0].GenericTypes[0].Type);
// Assert.AreEqual(new int[] {0}, td.Templates[1].Bases[0].GenericTypes[0].RankSpecifier);
// Assert.AreEqual("IAnotherInterface", td.Templates[1].Bases[1].Type);
// }
// #endregion
}
}

382
ICSharpCode.NRefactory.VB.Tests/Parser/GlobalScope/UsingDeclarationTests.cs

@ -12,196 +12,196 @@ namespace ICSharpCode.NRefactory.VB.Tests.Ast @@ -12,196 +12,196 @@ namespace ICSharpCode.NRefactory.VB.Tests.Ast
[TestFixture]
public class UsingDeclarationTests
{
void CheckTwoSimpleUsings(CompilationUnit u)
{
Assert.AreEqual(2, u.Children.Count);
Assert.IsTrue(u.Children[0] is ImportsStatement);
ImportsStatement ud = (ImportsStatement)u.Children[0];
Assert.AreEqual(1, ud.ImportsClauses.Count);
Assert.IsTrue(!ud.ImportsClauses[0].IsAlias);
Assert.AreEqual("System", ud.ImportsClauses[0].Name);
Assert.IsTrue(u.Children[1] is ImportsStatement);
ud = (ImportsStatement)u.Children[1];
Assert.AreEqual(1, ud.ImportsClauses.Count);
Assert.IsTrue(!ud.ImportsClauses[0].IsAlias);
Assert.AreEqual("My.Name.Space", ud.ImportsClauses[0].Name);
}
void CheckAliases(CompilationUnit u)
{
Assert.AreEqual(3, u.Children.Count);
Assert.IsTrue(u.Children[0] is ImportsStatement);
ImportsStatement ud = (ImportsStatement)u.Children[0];
Assert.AreEqual(1, ud.ImportsClauses.Count);
Assert.IsTrue(((ImportsClause)ud.ImportsClauses[0]).IsAlias);
Assert.AreEqual("TESTME", ud.ImportsClauses[0].Name);
Assert.AreEqual("System", ud.ImportsClauses[0].Alias.Type);
Assert.IsTrue(u.Children[1] is ImportsStatement);
ud = (ImportsStatement)u.Children[1];
Assert.AreEqual(1, ud.ImportsClauses.Count);
Assert.IsTrue(((ImportsClause)ud.ImportsClauses[0]).IsAlias);
Assert.AreEqual("myAlias", ud.ImportsClauses[0].Name);
Assert.AreEqual("My.Name.Space", ud.ImportsClauses[0].Alias.Type);
Assert.IsTrue(u.Children[2] is ImportsStatement);
ud = (ImportsStatement)u.Children[2];
Assert.AreEqual(1, ud.ImportsClauses.Count);
Assert.IsTrue(((ImportsClause)ud.ImportsClauses[0]).IsAlias);
Assert.AreEqual("StringCollection", ud.ImportsClauses[0].Name);
Assert.AreEqual("System.Collections.Generic.List", ud.ImportsClauses[0].Alias.Type);
Assert.AreEqual("System.String", ud.ImportsClauses[0].Alias.GenericTypes[0].Type);
}
#region VB.NET
[Test]
public void VBNetWrongUsingTest()
{
string program = "Imports\n";
VBParser parser = ParserFactory.CreateParser(new StringReader(program));
parser.Parse();
Assert.IsTrue(parser.Errors.Count > 0);
ImportsStatement u = (ImportsStatement)parser.CompilationUnit.Children[0];
foreach (ImportsClause us in u.ImportsClauses) {
Assert.IsNotNull(us);
}
}
[Test]
public void VBNetWrongUsing2Test()
{
string program = "Imports ,\n";
VBParser parser = ParserFactory.CreateParser(new StringReader(program));
parser.Parse();
Assert.IsTrue(parser.Errors.Count > 0);
ImportsStatement u = (ImportsStatement)parser.CompilationUnit.Children[0];
foreach (ImportsClause us in u.ImportsClauses) {
Assert.IsNotNull(us);
}
}
[Test]
public void VBNetDeclarationTest()
{
string program = "Imports System\n" +
"Imports My.Name.Space\n";
VBParser parser = ParserFactory.CreateParser(new StringReader(program));
parser.Parse();
Assert.AreEqual("", parser.Errors.ErrorOutput);
CheckTwoSimpleUsings(parser.CompilationUnit);
}
[Test]
public void VBNetUsingAliasDeclarationTest()
{
string program = "Imports TESTME=System\n" +
"Imports myAlias=My.Name.Space\n" +
"Imports StringCollection = System.Collections.Generic.List(Of string)\n";
VBParser parser = ParserFactory.CreateParser(new StringReader(program));
parser.Parse();
Assert.AreEqual("", parser.Errors.ErrorOutput);
CheckAliases(parser.CompilationUnit);
}
[Test]
public void VBNetComplexUsingAliasDeclarationTest()
{
string program = "Imports NS1, AL=NS2, NS3, AL2=NS4, NS5\n";
VBParser parser = ParserFactory.CreateParser(new StringReader(program));
parser.Parse();
Assert.AreEqual("", parser.Errors.ErrorOutput);
// TODO : Extend test ...
}
[Test]
public void VBNetXmlNamespaceUsingTest()
{
string program = "Imports <xmlns=\"http://icsharpcode.net/sharpdevelop/avalonedit\">";
VBParser parser = ParserFactory.CreateParser(new StringReader(program));
parser.Parse();
Assert.AreEqual("", parser.Errors.ErrorOutput);
CompilationUnit unit = parser.CompilationUnit;
Assert.AreEqual(1, unit.Children.Count);
Assert.IsTrue(unit.Children[0] is ImportsStatement);
ImportsStatement ud = (ImportsStatement)unit.Children[0];
Assert.AreEqual(1, ud.ImportsClauses.Count);
Assert.IsFalse(ud.ImportsClauses[0].IsAlias);
Assert.IsTrue(ud.ImportsClauses[0].IsXml);
Assert.AreEqual("xmlns", ud.ImportsClauses[0].XmlPrefix);
Assert.AreEqual("http://icsharpcode.net/sharpdevelop/avalonedit", ud.ImportsClauses[0].Name);
}
[Test]
public void VBNetXmlNamespaceWithPrefixUsingTest()
{
string program = "Imports <xmlns:avalonedit=\"http://icsharpcode.net/sharpdevelop/avalonedit\">";
VBParser parser = ParserFactory.CreateParser(new StringReader(program));
parser.Parse();
Assert.AreEqual("", parser.Errors.ErrorOutput);
CompilationUnit unit = parser.CompilationUnit;
Assert.AreEqual(1, unit.Children.Count);
Assert.IsTrue(unit.Children[0] is ImportsStatement);
ImportsStatement ud = (ImportsStatement)unit.Children[0];
Assert.AreEqual(1, ud.ImportsClauses.Count);
Assert.IsFalse(ud.ImportsClauses[0].IsAlias);
Assert.IsTrue(ud.ImportsClauses[0].IsXml);
Assert.AreEqual("xmlns:avalonedit", ud.ImportsClauses[0].XmlPrefix);
Assert.AreEqual("http://icsharpcode.net/sharpdevelop/avalonedit", ud.ImportsClauses[0].Name);
}
[Test]
public void VBNetXmlNamespaceSingleQuotedUsingTest()
{
string program = "Imports <xmlns='http://icsharpcode.net/sharpdevelop/avalonedit'>";
VBParser parser = ParserFactory.CreateParser(new StringReader(program));
parser.Parse();
Assert.AreEqual("", parser.Errors.ErrorOutput);
CompilationUnit unit = parser.CompilationUnit;
Assert.AreEqual(1, unit.Children.Count);
Assert.IsTrue(unit.Children[0] is ImportsStatement);
ImportsStatement ud = (ImportsStatement)unit.Children[0];
Assert.AreEqual(1, ud.ImportsClauses.Count);
Assert.IsFalse(ud.ImportsClauses[0].IsAlias);
Assert.IsTrue(ud.ImportsClauses[0].IsXml);
Assert.AreEqual("xmlns", ud.ImportsClauses[0].XmlPrefix);
Assert.AreEqual("http://icsharpcode.net/sharpdevelop/avalonedit", ud.ImportsClauses[0].Name);
}
[Test]
public void VBNetXmlNamespaceSingleQuotedWithPrefixUsingTest()
{
string program = "Imports <xmlns:avalonedit='http://icsharpcode.net/sharpdevelop/avalonedit'>";
VBParser parser = ParserFactory.CreateParser(new StringReader(program));
parser.Parse();
Assert.AreEqual("", parser.Errors.ErrorOutput);
CompilationUnit unit = parser.CompilationUnit;
Assert.AreEqual(1, unit.Children.Count);
Assert.IsTrue(unit.Children[0] is ImportsStatement);
ImportsStatement ud = (ImportsStatement)unit.Children[0];
Assert.AreEqual(1, ud.ImportsClauses.Count);
Assert.IsFalse(ud.ImportsClauses[0].IsAlias);
Assert.IsTrue(ud.ImportsClauses[0].IsXml);
Assert.AreEqual("xmlns:avalonedit", ud.ImportsClauses[0].XmlPrefix);
Assert.AreEqual("http://icsharpcode.net/sharpdevelop/avalonedit", ud.ImportsClauses[0].Name);
}
#endregion
// void CheckTwoSimpleUsings(CompilationUnit u)
// {
// Assert.AreEqual(2, u.Children.Count);
// Assert.IsTrue(u.Children[0] is ImportsStatement);
// ImportsStatement ud = (ImportsStatement)u.Children[0];
// Assert.AreEqual(1, ud.ImportsClauses.Count);
// Assert.IsTrue(!ud.ImportsClauses[0].IsAlias);
// Assert.AreEqual("System", ud.ImportsClauses[0].Name);
//
//
// Assert.IsTrue(u.Children[1] is ImportsStatement);
// ud = (ImportsStatement)u.Children[1];
// Assert.AreEqual(1, ud.ImportsClauses.Count);
// Assert.IsTrue(!ud.ImportsClauses[0].IsAlias);
// Assert.AreEqual("My.Name.Space", ud.ImportsClauses[0].Name);
// }
//
// void CheckAliases(CompilationUnit u)
// {
// Assert.AreEqual(3, u.Children.Count);
//
// Assert.IsTrue(u.Children[0] is ImportsStatement);
// ImportsStatement ud = (ImportsStatement)u.Children[0];
// Assert.AreEqual(1, ud.ImportsClauses.Count);
// Assert.IsTrue(((ImportsClause)ud.ImportsClauses[0]).IsAlias);
// Assert.AreEqual("TESTME", ud.ImportsClauses[0].Name);
// Assert.AreEqual("System", ud.ImportsClauses[0].Alias.Type);
//
// Assert.IsTrue(u.Children[1] is ImportsStatement);
// ud = (ImportsStatement)u.Children[1];
// Assert.AreEqual(1, ud.ImportsClauses.Count);
// Assert.IsTrue(((ImportsClause)ud.ImportsClauses[0]).IsAlias);
// Assert.AreEqual("myAlias", ud.ImportsClauses[0].Name);
// Assert.AreEqual("My.Name.Space", ud.ImportsClauses[0].Alias.Type);
//
// Assert.IsTrue(u.Children[2] is ImportsStatement);
// ud = (ImportsStatement)u.Children[2];
// Assert.AreEqual(1, ud.ImportsClauses.Count);
// Assert.IsTrue(((ImportsClause)ud.ImportsClauses[0]).IsAlias);
// Assert.AreEqual("StringCollection", ud.ImportsClauses[0].Name);
// Assert.AreEqual("System.Collections.Generic.List", ud.ImportsClauses[0].Alias.Type);
// Assert.AreEqual("System.String", ud.ImportsClauses[0].Alias.GenericTypes[0].Type);
// }
//
// #region VB.NET
// [Test]
// public void VBNetWrongUsingTest()
// {
// string program = "Imports\n";
// VBParser parser = ParserFactory.CreateParser(new StringReader(program));
// parser.Parse();
// Assert.IsTrue(parser.Errors.Count > 0);
// ImportsStatement u = (ImportsStatement)parser.CompilationUnit.Children[0];
// foreach (ImportsClause us in u.ImportsClauses) {
// Assert.IsNotNull(us);
// }
// }
//
// [Test]
// public void VBNetWrongUsing2Test()
// {
// string program = "Imports ,\n";
// VBParser parser = ParserFactory.CreateParser(new StringReader(program));
// parser.Parse();
// Assert.IsTrue(parser.Errors.Count > 0);
// ImportsStatement u = (ImportsStatement)parser.CompilationUnit.Children[0];
// foreach (ImportsClause us in u.ImportsClauses) {
// Assert.IsNotNull(us);
// }
// }
//
// [Test]
// public void VBNetDeclarationTest()
// {
// string program = "Imports System\n" +
// "Imports My.Name.Space\n";
// VBParser parser = ParserFactory.CreateParser(new StringReader(program));
// parser.Parse();
//
// Assert.AreEqual("", parser.Errors.ErrorOutput);
// CheckTwoSimpleUsings(parser.CompilationUnit);
// }
//
// [Test]
// public void VBNetUsingAliasDeclarationTest()
// {
// string program = "Imports TESTME=System\n" +
// "Imports myAlias=My.Name.Space\n" +
// "Imports StringCollection = System.Collections.Generic.List(Of string)\n";
// VBParser parser = ParserFactory.CreateParser(new StringReader(program));
// parser.Parse();
//
// Assert.AreEqual("", parser.Errors.ErrorOutput);
// CheckAliases(parser.CompilationUnit);
// }
//
// [Test]
// public void VBNetComplexUsingAliasDeclarationTest()
// {
// string program = "Imports NS1, AL=NS2, NS3, AL2=NS4, NS5\n";
// VBParser parser = ParserFactory.CreateParser(new StringReader(program));
// parser.Parse();
//
// Assert.AreEqual("", parser.Errors.ErrorOutput);
// // TODO : Extend test ...
// }
//
// [Test]
// public void VBNetXmlNamespaceUsingTest()
// {
// string program = "Imports <xmlns=\"http://icsharpcode.net/sharpdevelop/avalonedit\">";
// VBParser parser = ParserFactory.CreateParser(new StringReader(program));
// parser.Parse();
//
// Assert.AreEqual("", parser.Errors.ErrorOutput);
// CompilationUnit unit = parser.CompilationUnit;
//
// Assert.AreEqual(1, unit.Children.Count);
// Assert.IsTrue(unit.Children[0] is ImportsStatement);
// ImportsStatement ud = (ImportsStatement)unit.Children[0];
// Assert.AreEqual(1, ud.ImportsClauses.Count);
// Assert.IsFalse(ud.ImportsClauses[0].IsAlias);
// Assert.IsTrue(ud.ImportsClauses[0].IsXml);
//
// Assert.AreEqual("xmlns", ud.ImportsClauses[0].XmlPrefix);
// Assert.AreEqual("http://icsharpcode.net/sharpdevelop/avalonedit", ud.ImportsClauses[0].Name);
// }
//
// [Test]
// public void VBNetXmlNamespaceWithPrefixUsingTest()
// {
// string program = "Imports <xmlns:avalonedit=\"http://icsharpcode.net/sharpdevelop/avalonedit\">";
// VBParser parser = ParserFactory.CreateParser(new StringReader(program));
// parser.Parse();
//
// Assert.AreEqual("", parser.Errors.ErrorOutput);
// CompilationUnit unit = parser.CompilationUnit;
//
// Assert.AreEqual(1, unit.Children.Count);
// Assert.IsTrue(unit.Children[0] is ImportsStatement);
// ImportsStatement ud = (ImportsStatement)unit.Children[0];
// Assert.AreEqual(1, ud.ImportsClauses.Count);
// Assert.IsFalse(ud.ImportsClauses[0].IsAlias);
// Assert.IsTrue(ud.ImportsClauses[0].IsXml);
//
// Assert.AreEqual("xmlns:avalonedit", ud.ImportsClauses[0].XmlPrefix);
// Assert.AreEqual("http://icsharpcode.net/sharpdevelop/avalonedit", ud.ImportsClauses[0].Name);
// }
//
// [Test]
// public void VBNetXmlNamespaceSingleQuotedUsingTest()
// {
// string program = "Imports <xmlns='http://icsharpcode.net/sharpdevelop/avalonedit'>";
// VBParser parser = ParserFactory.CreateParser(new StringReader(program));
// parser.Parse();
//
// Assert.AreEqual("", parser.Errors.ErrorOutput);
// CompilationUnit unit = parser.CompilationUnit;
//
// Assert.AreEqual(1, unit.Children.Count);
// Assert.IsTrue(unit.Children[0] is ImportsStatement);
// ImportsStatement ud = (ImportsStatement)unit.Children[0];
// Assert.AreEqual(1, ud.ImportsClauses.Count);
// Assert.IsFalse(ud.ImportsClauses[0].IsAlias);
// Assert.IsTrue(ud.ImportsClauses[0].IsXml);
//
// Assert.AreEqual("xmlns", ud.ImportsClauses[0].XmlPrefix);
// Assert.AreEqual("http://icsharpcode.net/sharpdevelop/avalonedit", ud.ImportsClauses[0].Name);
// }
//
// [Test]
// public void VBNetXmlNamespaceSingleQuotedWithPrefixUsingTest()
// {
// string program = "Imports <xmlns:avalonedit='http://icsharpcode.net/sharpdevelop/avalonedit'>";
// VBParser parser = ParserFactory.CreateParser(new StringReader(program));
// parser.Parse();
//
// Assert.AreEqual("", parser.Errors.ErrorOutput);
// CompilationUnit unit = parser.CompilationUnit;
//
// Assert.AreEqual(1, unit.Children.Count);
// Assert.IsTrue(unit.Children[0] is ImportsStatement);
// ImportsStatement ud = (ImportsStatement)unit.Children[0];
// Assert.AreEqual(1, ud.ImportsClauses.Count);
// Assert.IsFalse(ud.ImportsClauses[0].IsAlias);
// Assert.IsTrue(ud.ImportsClauses[0].IsXml);
//
// Assert.AreEqual("xmlns:avalonedit", ud.ImportsClauses[0].XmlPrefix);
// Assert.AreEqual("http://icsharpcode.net/sharpdevelop/avalonedit", ud.ImportsClauses[0].Name);
// }
// #endregion
}
}

26
ICSharpCode.NRefactory.VB.Tests/Parser/LocationAssignmentCheckVisitor.cs

@ -1,26 +0,0 @@ @@ -1,26 +0,0 @@
// 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 ICSharpCode.NRefactory.VB.Ast;
using ICSharpCode.NRefactory.VB.Visitors;
using NUnit.Framework;
namespace ICSharpCode.NRefactory.VB.Tests.Ast
{
public class LocationAssignmentCheckVisitor : NodeTrackingAstVisitor
{
protected override void BeginVisit(INode node)
{
if (node is CompilationUnit)
return;
if (node is INullable && ((INullable)node).IsNull)
return;
if (node is TypeReference)
return;
Assert.IsFalse(node.StartLocation.IsEmpty, "StartLocation of {0}", node);
Assert.IsFalse(node.EndLocation.IsEmpty, "EndLocation of {0}", node);
}
}
}

148
ICSharpCode.NRefactory.VB.Tests/Parser/ParseUtil.cs

@ -3,90 +3,106 @@ @@ -3,90 +3,106 @@
using System;
using System.IO;
using ICSharpCode.NRefactory.VB.Parser;
using System.Linq;
using ICSharpCode.NRefactory.PatternMatching;
using ICSharpCode.NRefactory.VB.Ast;
using ICSharpCode.NRefactory.VB.Parser;
using NUnit.Framework;
namespace ICSharpCode.NRefactory.VB.Tests.Ast
{
public class ParseUtil
{
public static T ParseGlobal<T>(string program) where T : INode
{
return ParseGlobal<T>(program, false);
}
public static T ParseGlobal<T>(string program, bool expectErrors) where T : INode
public static T ParseGlobal<T>(string code, bool expectErrors = false) where T : AstNode
{
VBParser parser = ParserFactory.CreateParser(new StringReader(program));
parser.Parse();
VBParser parser = new VBParser();
CompilationUnit cu = parser.Parse(new StringReader(code));
if (expectErrors)
Assert.IsFalse(parser.Errors.ErrorOutput.Length == 0, "Expected errors, but operation completed successfully");
else
Assert.AreEqual("", parser.Errors.ErrorOutput);
Assert.IsNotNull(parser.CompilationUnit);
Assert.IsNotNull(parser.CompilationUnit.Children);
Assert.IsNotNull(parser.CompilationUnit.Children[0]);
Assert.AreEqual(1, parser.CompilationUnit.Children.Count);
Assert.AreEqual(expectErrors, parser.HasErrors, "HasErrors");
AstNode node = cu.Children.Single();
Type type = typeof(T);
Assert.IsTrue(type.IsAssignableFrom(parser.CompilationUnit.Children[0].GetType()), String.Format("Parsed expression was {0} instead of {1} ({2})", parser.CompilationUnit.Children[0].GetType(), type, parser.CompilationUnit.Children[0]));
parser.CompilationUnit.AcceptVisitor(new CheckParentVisitor(), null);
// TODO fix Locations
// parser.CompilationUnit.AcceptChildren(new LocationAssignmentCheckVisitor(), null);
return (T)parser.CompilationUnit.Children[0];
Assert.IsTrue(type.IsAssignableFrom(node.GetType()), String.Format("Parsed node was {0} instead of {1} ({2})", node.GetType(), type, node));
return (T)node;
}
public static T ParseTypeMember<T>(string typeMember, bool expectErrors) where T : INode
public static void AssertGlobal(string code, AstNode expectedNode)
{
TypeDeclaration td = ParseGlobal<TypeDeclaration>("Class TestClass\n " + typeMember + "\n End Class\n", expectErrors);
Assert.AreEqual(1, td.Children.Count);
Type type = typeof(T);
Assert.IsTrue(type.IsAssignableFrom(td.Children[0].GetType()), String.Format("Parsed expression was {0} instead of {1} ({2})", td.GetType(), type, td));
return (T)td.Children[0];
var node = ParseGlobal<AstNode>(code);
if (!expectedNode.IsMatch(node)) {
Assert.Fail("Expected '{0}' but was '{1}'", ToVB(expectedNode), ToVB(node));
}
}
public static T ParseTypeMember<T>(string typeMember) where T : INode
{
return ParseTypeMember<T>(typeMember, false);
}
// public static T ParseStatement<T>(string stmt, bool expectErrors = false) where T : AstNode
// {
// VBParser parser = new VBParser();
// var statements = parser.ParseStatements(new StringReader(stmt));
//
// Assert.AreEqual(expectErrors, parser.HasErrors, "HasErrors");
//
// AstNode statement = statements.Single();
// Type type = typeof(T);
// Assert.IsTrue(type.IsAssignableFrom(statement.GetType()), String.Format("Parsed statement was {0} instead of {1} ({2})", statement.GetType(), type, statement));
// return (T)statement;
// }
//
// public static void AssertStatement(string code, VB.Ast.Statement expectedStmt)
// {
// var stmt = ParseStatement<VB.Ast.Statement>(code);
// if (!expectedStmt.IsMatch(stmt)) {
// Assert.Fail("Expected '{0}' but was '{1}'", ToCSharp(expectedStmt), ToCSharp(stmt));
// }
// }
//
// public static T ParseExpression<T>(string expr, bool expectErrors = false) where T : AstNode
// {
// VBParser parser = new VBParser();
// AstNode parsedExpression = parser.ParseExpression(new StringReader(expr));
//
// Assert.AreEqual(expectErrors, parser.HasErrors, "HasErrors");
// if (expectErrors && parsedExpression == null)
// return default (T);
// Type type = typeof(T);
// Assert.IsTrue(type.IsAssignableFrom(parsedExpression.GetType()), String.Format("Parsed expression was {0} instead of {1} ({2})", parsedExpression.GetType(), type, parsedExpression));
// return (T)parsedExpression;
// }
//
// public static void AssertExpression(string code, VB.Ast.Expression expectedExpr)
// {
// var expr = ParseExpression<CSharp.Expression>(code);
// if (!expectedExpr.IsMatch(expr)) {
// Assert.Fail("Expected '{0}' but was '{1}'", ToCSharp(expectedExpr), ToCSharp(expr));
// }
// }
//
// public static T ParseTypeMember<T>(string expr, bool expectErrors = false) where T : AttributedNode
// {
// VBParser parser = new VBParser();
// var members = parser.ParseTypeMembers(new StringReader(expr));
//
// Assert.AreEqual(expectErrors, parser.HasErrors, "HasErrors");
//
// AttributedNode m = members.Single();
// Type type = typeof(T);
// Assert.IsTrue(type.IsAssignableFrom(m.GetType()), String.Format("Parsed member was {0} instead of {1} ({2})", m.GetType(), type, m));
// return (T)m;
// }
//
// public static void AssertTypeMember(string code, VB.Ast.AttributedNode expectedMember)
// {
// var member = ParseTypeMember<VB.Ast.AttributedNode>(code);
// if (!expectedMember.IsMatch(member)) {
// Assert.Fail("Expected '{0}' but was '{1}'", ToVB(expectedMember), ToVB(member));
// }
// }
public static T ParseStatement<T>(string statement, bool expectErrors) where T : INode
static string ToVB(AstNode node)
{
MethodDeclaration md = ParseTypeMember<MethodDeclaration>("Sub A()\n " + statement + "\nEnd Sub\n", expectErrors);
Assert.AreEqual(1, md.Body.Children.Count);
Type type = typeof(T);
Assert.IsTrue(type.IsAssignableFrom(md.Body.Children[0].GetType()), String.Format("Parsed expression was {0} instead of {1} ({2})", md.GetType(), type, md));
return (T)md.Body.Children[0];
}
public static T ParseStatement<T>(string statement) where T : INode
{
return ParseStatement<T>(statement, false);
}
public static T ParseExpression<T>(string expr) where T : INode
{
return ParseExpression<T>(expr, false);
}
public static T ParseExpression<T>(string expr, bool expectErrors) where T : INode
{
VBParser parser = ParserFactory.CreateParser(new StringReader(expr));
INode parsedExpression = parser.ParseExpression();
if (expectErrors)
Assert.IsFalse(parser.Errors.ErrorOutput.Length == 0, "Expected errors, but operation completed successfully");
else
Assert.AreEqual("", parser.Errors.ErrorOutput);
// TODO fix Locations
// parsedExpression.AcceptVisitor(new LocationAssignmentCheckVisitor(), null);
Type type = typeof(T);
Assert.IsTrue(type.IsAssignableFrom(parsedExpression.GetType()), String.Format("Parsed expression was {0} instead of {1} ({2})", parsedExpression.GetType(), type, parsedExpression));
return (T)parsedExpression;
StringWriter w = new StringWriter();
node.AcceptVisitor(new OutputVisitor(w, new VBFormattingOptions()), null);
return w.ToString();
}
}
}

16
ICSharpCode.NRefactory.VB.Tests/Parser/SnippetParserTests.cs

@ -10,13 +10,13 @@ namespace ICSharpCode.NRefactory.VB.Tests @@ -10,13 +10,13 @@ namespace ICSharpCode.NRefactory.VB.Tests
[TestFixture]
public class SnippetParserTests
{
[Test]
public void InvalidExpressionSyntax()
{
// SD2-1584: ensure we don't crash on this invalid VB code
SnippetParser parser = new SnippetParser();
INode node = parser.Parse("i == 5");
Assert.IsTrue(parser.Errors.Count > 0);
}
// [Test]
// public void InvalidExpressionSyntax()
// {
// // SD2-1584: ensure we don't crash on this invalid VB code
// SnippetParser parser = new SnippetParser();
// INode node = parser.Parse("i == 5");
// Assert.IsTrue(parser.Errors.Count > 0);
// }
}
}

19
ICSharpCode.NRefactory.VB/Ast/AstNode.cs

@ -231,6 +231,19 @@ namespace ICSharpCode.NRefactory.VB @@ -231,6 +231,19 @@ namespace ICSharpCode.NRefactory.VB
AddChildUnsafe(child, role);
}
internal void AddChildUntyped(AstNode child, Role role)
{
if (role == null)
throw new ArgumentNullException("role");
if (child == null || child.IsNull)
return;
if (this.IsNull)
throw new InvalidOperationException("Cannot add children to null nodes");
if (child.parent != null)
throw new ArgumentException ("Node is already used in another tree.", "child");
AddChildUnsafe(child, role);
}
/// <summary>
/// Adds a child without performing any safety checks.
/// </summary>
@ -655,6 +668,7 @@ namespace ICSharpCode.NRefactory.VB @@ -655,6 +668,7 @@ namespace ICSharpCode.NRefactory.VB
// some pre defined constants for common roles
public static readonly Role<Identifier> Identifier = new Role<Identifier>("Identifier", Ast.Identifier.Null);
public static readonly Role<XmlIdentifier> XmlIdentifier = new Role<XmlIdentifier>("XmlIdentifier", Ast.XmlIdentifier.Null);
// public static readonly Role<BlockStatement> Body = new Role<BlockStatement>("Body", CSharp.BlockStatement.Null);
// public static readonly Role<ParameterDeclaration> Parameter = new Role<ParameterDeclaration>("Parameter");
@ -663,13 +677,13 @@ namespace ICSharpCode.NRefactory.VB @@ -663,13 +677,13 @@ namespace ICSharpCode.NRefactory.VB
public static readonly Role<Expression> Expression = new Role<Expression>("Expression", Ast.Expression.Null);
// public static readonly Role<Expression> TargetExpression = new Role<Expression>("Target", CSharp.Expression.Null);
// public readonly static Role<Expression> Condition = new Role<Expression>("Condition", CSharp.Expression.Null);
//
//
// public static readonly Role<TypeParameterDeclaration> TypeParameter = new Role<TypeParameterDeclaration>("TypeParameter");
public static readonly Role<AstType> TypeArgument = new Role<AstType>("TypeArgument", AstType.Null);
// public readonly static Role<Constraint> Constraint = new Role<Constraint>("Constraint");
// public static readonly Role<VariableInitializer> Variable = new Role<VariableInitializer>("Variable");
// public static readonly Role<Statement> EmbeddedStatement = new Role<Statement>("EmbeddedStatement", CSharp.Statement.Null);
//
//
public static readonly Role<VBTokenNode> Keyword = new Role<VBTokenNode>("Keyword", VBTokenNode.Null);
// public static readonly Role<VBTokenNode> InKeyword = new Role<VBTokenNode>("InKeyword", VBTokenNode.Null);
@ -687,6 +701,7 @@ namespace ICSharpCode.NRefactory.VB @@ -687,6 +701,7 @@ namespace ICSharpCode.NRefactory.VB
public static readonly Role<VBTokenNode> Semicolon = new Role<VBTokenNode>("Semicolon", VBTokenNode.Null);
public static readonly Role<VBTokenNode> Assign = new Role<VBTokenNode>("Assign", VBTokenNode.Null);
public static readonly Role<VBTokenNode> Colon = new Role<VBTokenNode>("Colon", VBTokenNode.Null);
public static readonly Role<VBTokenNode> StatementTerminator = new Role<VBTokenNode>("StatementTerminator", VBTokenNode.Null);
public static readonly Role<Comment> Comment = new Role<Comment>("Comment");

69
ICSharpCode.NRefactory.VB/Ast/Expressions/XmlIdentifier.cs

@ -0,0 +1,69 @@ @@ -0,0 +1,69 @@
// 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;
namespace ICSharpCode.NRefactory.VB.Ast
{
/// <summary>
/// Description of XmlIdentifier.
/// </summary>
public class XmlIdentifier : AstNode
{
public static readonly new XmlIdentifier Null = new NullXmlIdentifier();
class NullXmlIdentifier : XmlIdentifier
{
public override bool IsNull {
get {
return true;
}
}
public override S AcceptVisitor<T, S> (IAstVisitor<T, S> visitor, T data)
{
return default(S);
}
protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
{
return other == null || other.IsNull;
}
}
public string Name { get; set; }
AstLocation startLocation;
public override AstLocation StartLocation {
get { return startLocation; }
}
public override AstLocation EndLocation {
get { return new AstLocation(startLocation.Line, startLocation.Column + Name.Length); }
}
private XmlIdentifier()
{
this.Name = string.Empty;
}
public XmlIdentifier(string name, AstLocation startLocation)
{
this.Name = name;
this.startLocation = startLocation;
}
protected internal override bool DoMatch(AstNode other, ICSharpCode.NRefactory.PatternMatching.Match match)
{
var ident = other as XmlIdentifier;
return ident != null
&& MatchString(Name, ident.Name)
&& ident.startLocation == startLocation;
}
public override S AcceptVisitor<T, S>(IAstVisitor<T, S> visitor, T data)
{
return visitor.VisitXmlIdentifier(this, data);
}
}
}

2
ICSharpCode.NRefactory.VB/Ast/General/Attribute.cs

@ -48,7 +48,7 @@ namespace ICSharpCode.NRefactory.VB.Ast @@ -48,7 +48,7 @@ namespace ICSharpCode.NRefactory.VB.Ast
}
public VBTokenNode ColonToken {
get { return GetChildByRole(Roles.Colon); }
get { return GetChildByRole(Roles.StatementTerminator); }
}
public AstType Type {

35
ICSharpCode.NRefactory.VB/Ast/General/AttributeBlock.cs

@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
// 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;
namespace ICSharpCode.NRefactory.VB.Ast
{
public class AttributeBlock : AstNode
{
public readonly static Role<AttributeBlock> AttributeBlockRole = new Role<AttributeBlock>("AttributeBlock");
public VBTokenNode LChevron {
get { return GetChildByRole(Roles.LChevron); }
}
public AstNodeCollection<Attribute> Attributes {
get { return GetChildrenByRole(Attribute.AttributeRole); }
}
public VBTokenNode RChevron {
get { return GetChildByRole(Roles.RChevron); }
}
protected internal override bool DoMatch(AstNode other, ICSharpCode.NRefactory.PatternMatching.Match match)
{
var node = other as AttributeBlock;
return node != null && Attributes.DoMatch(node.Attributes, match);
}
public override S AcceptVisitor<T, S>(IAstVisitor<T, S> visitor, T data)
{
return visitor.VisitAttributeBlock(this, data);
}
}
}

63
ICSharpCode.NRefactory.VB/Ast/GlobalScope/ImportsClause.cs

@ -7,9 +7,7 @@ namespace ICSharpCode.NRefactory.VB.Ast @@ -7,9 +7,7 @@ namespace ICSharpCode.NRefactory.VB.Ast
{
public abstract class ImportsClause : AstNode
{
public static readonly ImportsClause Null = new NullImportsClause();
public static readonly Role<ImportsClause> ImportsClauseRole = new Role<ImportsClause>("ImportsClause", Null);
public new static readonly ImportsClause Null = new NullImportsClause();
class NullImportsClause : ImportsClause
{
@ -31,23 +29,14 @@ namespace ICSharpCode.NRefactory.VB.Ast @@ -31,23 +29,14 @@ namespace ICSharpCode.NRefactory.VB.Ast
public class AliasImportsClause : ImportsClause
{
public Identifier Name { get; set; }
AstType alias;
public AstType Alias {
get { return alias; }
set { alias = value ?? AstType.Null; }
public Identifier Name {
get { return GetChildByRole(Roles.Identifier); }
set { SetChildByRole(Roles.Identifier, value); }
}
public AliasImportsClause(Identifier name) {
Name = name;
alias = AstType.Null;
}
public AliasImportsClause(Identifier name, AstType alias) {
Name = name;
Alias = alias;
public AstType Alias {
get { return GetChildByRole(Roles.Type); }
set { SetChildByRole(Roles.Type, value); }
}
protected internal override bool DoMatch(AstNode other, ICSharpCode.NRefactory.PatternMatching.Match match)
@ -55,7 +44,7 @@ namespace ICSharpCode.NRefactory.VB.Ast @@ -55,7 +44,7 @@ namespace ICSharpCode.NRefactory.VB.Ast
var clause = other as AliasImportsClause;
return clause != null
&& Name.DoMatch(clause.Name, match)
&& alias.DoMatch(clause.Alias, match);
&& Alias.DoMatch(clause.Alias, match);
}
public override S AcceptVisitor<T, S>(IAstVisitor<T, S> visitor, T data)
@ -70,18 +59,16 @@ namespace ICSharpCode.NRefactory.VB.Ast @@ -70,18 +59,16 @@ namespace ICSharpCode.NRefactory.VB.Ast
public class MemberImportsClause : ImportsClause
{
public AstType NamespaceOrType { get; set; }
public MemberImportsClause(AstType namespaceOrType)
{
this.NamespaceOrType = namespaceOrType;
public AstType Member {
get { return GetChildByRole(Roles.Type); }
set { SetChildByRole(Roles.Type, value); }
}
protected internal override bool DoMatch(AstNode other, ICSharpCode.NRefactory.PatternMatching.Match match)
{
var node = other as MemberImportsClause;
return node != null
&& NamespaceOrType.DoMatch(node.NamespaceOrType, match);
&& Member.DoMatch(node.Member, match);
}
public override S AcceptVisitor<T, S>(IAstVisitor<T, S> visitor, T data)
@ -91,18 +78,15 @@ namespace ICSharpCode.NRefactory.VB.Ast @@ -91,18 +78,15 @@ namespace ICSharpCode.NRefactory.VB.Ast
public override string ToString()
{
return string.Format("[MemberImportsClause NamespaceOrType={0}]", NamespaceOrType);
return string.Format("[MemberImportsClause Member={0}]", Member);
}
}
public class XmlNamespaceImportsClause : ImportsClause
{
string xmlPrefix;
public string XmlPrefix {
get { return xmlPrefix; }
set { xmlPrefix = value ?? ""; }
public XmlIdentifier Prefix {
get { return GetChildByRole(Roles.XmlIdentifier); }
set { SetChildByRole(Roles.XmlIdentifier, value); }
}
string xmlNamespace;
@ -112,21 +96,10 @@ namespace ICSharpCode.NRefactory.VB.Ast @@ -112,21 +96,10 @@ namespace ICSharpCode.NRefactory.VB.Ast
set { xmlNamespace = value ?? ""; }
}
public XmlNamespaceImportsClause(string xmlPrefix, string xmlNamespace)
{
this.xmlPrefix = xmlPrefix;
this.xmlNamespace = xmlNamespace;
}
public XmlNamespaceImportsClause(string xmlNamespace)
{
this.xmlNamespace = xmlNamespace;
}
protected internal override bool DoMatch(AstNode other, ICSharpCode.NRefactory.PatternMatching.Match match)
{
var clause = other as XmlNamespaceImportsClause;
return clause != null && clause.xmlNamespace == xmlNamespace && clause.xmlPrefix == xmlPrefix;
return clause != null && clause.xmlNamespace == xmlNamespace && Prefix.DoMatch(clause.Prefix, match);
}
public override S AcceptVisitor<T, S>(IAstVisitor<T, S> visitor, T data)
@ -136,7 +109,7 @@ namespace ICSharpCode.NRefactory.VB.Ast @@ -136,7 +109,7 @@ namespace ICSharpCode.NRefactory.VB.Ast
public override string ToString()
{
return string.Format("[XmlNamespaceImportsClause XmlPrefix={0}, XmlNamespace={1}]", xmlPrefix, xmlNamespace);
return string.Format("[XmlNamespaceImportsClause Prefix={0}, XmlNamespace={1}]", Prefix, xmlNamespace);
}
}
}

8
ICSharpCode.NRefactory.VB/Ast/GlobalScope/ImportsStatement.cs

@ -8,8 +8,14 @@ namespace ICSharpCode.NRefactory.VB.Ast @@ -8,8 +8,14 @@ namespace ICSharpCode.NRefactory.VB.Ast
{
public class ImportsStatement : AstNode
{
public static readonly Role<ImportsClause> ImportsClauseRole = new Role<ImportsClause>("ImportsClause", ImportsClause.Null);
public VBTokenNode Imports {
get { return GetChildByRole(Roles.Keyword); }
}
public AstNodeCollection<ImportsClause> ImportsClauses {
get { return GetChildrenByRole(ImportsClause.ImportsClauseRole); }
get { return GetChildrenByRole(ImportsClauseRole); }
}
// public override string ToString() {

29
ICSharpCode.NRefactory.VB/Ast/GlobalScope/OptionStatement.cs

@ -8,14 +8,24 @@ namespace ICSharpCode.NRefactory.VB.Ast @@ -8,14 +8,24 @@ namespace ICSharpCode.NRefactory.VB.Ast
{
public class OptionStatement : AstNode
{
public OptionType OptionType { get; set; }
public static readonly Role<VBTokenNode> OptionTypeRole = new Role<VBTokenNode>("OptionType");
public static readonly Role<VBTokenNode> OptionValueRole = new Role<VBTokenNode>("OptionValue");
public VBTokenNode OptionKeyword {
get { return GetChildByRole(Roles.Keyword); }
}
public bool OptionValue { get; set; }
public VBTokenNode OptionTypeKeyword {
get { return GetChildByRole(OptionTypeRole); }
}
public OptionStatement(OptionType optionType, bool optionValue) {
OptionType = optionType;
OptionValue = optionValue;
public VBTokenNode OptionValueKeyword {
get { return GetChildByRole(OptionValueRole); }
}
public OptionType OptionType { get; set; }
public OptionValue OptionValue { get; set; }
protected internal override bool DoMatch(AstNode other, Match match)
{
@ -38,8 +48,13 @@ namespace ICSharpCode.NRefactory.VB.Ast @@ -38,8 +48,13 @@ namespace ICSharpCode.NRefactory.VB.Ast
{
Explicit,
Strict,
CompareBinary,
CompareText,
Compare,
Infer
}
public enum OptionValue
{
On, Off,
Text, Binary
}
}

12
ICSharpCode.NRefactory.VB/Ast/Identifier.cs

@ -41,10 +41,6 @@ namespace ICSharpCode.NRefactory.VB.Ast @@ -41,10 +41,6 @@ namespace ICSharpCode.NRefactory.VB.Ast
}
}
public bool IsEscaped { get; set; }
public bool IsKeyword { get; set; }
public TypeCode TypeCharacter { get; set; }
AstLocation startLocation;
@ -56,7 +52,7 @@ namespace ICSharpCode.NRefactory.VB.Ast @@ -56,7 +52,7 @@ namespace ICSharpCode.NRefactory.VB.Ast
public override AstLocation EndLocation {
get {
return new AstLocation (StartLocation.Line, StartLocation.Column + (Name ?? "").Length);
return new AstLocation (StartLocation.Line, StartLocation.Column + Name.Length);
}
}
@ -78,8 +74,6 @@ namespace ICSharpCode.NRefactory.VB.Ast @@ -78,8 +74,6 @@ namespace ICSharpCode.NRefactory.VB.Ast
var node = other as Identifier;
return node != null
&& MatchString(node.name, name)
&& node.IsEscaped == IsEscaped
&& node.IsKeyword == IsKeyword
&& node.TypeCharacter == TypeCharacter;
}
@ -90,8 +84,8 @@ namespace ICSharpCode.NRefactory.VB.Ast @@ -90,8 +84,8 @@ namespace ICSharpCode.NRefactory.VB.Ast
public override string ToString()
{
return string.Format("[Identifier Name={0}, StartLocation={1}, IsEscaped={2}, IsKeyword={3}, TypeCharacter{4}]",
name, startLocation, IsEscaped, IsKeyword, TypeCharacter);
return string.Format("[Identifier Name={0}, StartLocation={1}, TypeCharacter{4}]",
name, startLocation, TypeCharacter);
}
}
}

145
ICSharpCode.NRefactory.VB/Ast/TypeName/AstType.cs

@ -0,0 +1,145 @@ @@ -0,0 +1,145 @@
// 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.Collections.Generic;
namespace ICSharpCode.NRefactory.VB.Ast
{
/// <summary>
/// A type reference in the VB AST.
/// </summary>
public abstract class AstType : AstNode
{
#region Null
public new static readonly AstType Null = new NullAstType();
sealed class NullAstType : AstType
{
public override bool IsNull {
get {
return true;
}
}
public override S AcceptVisitor<T, S> (IAstVisitor<T, S> visitor, T data)
{
return default (S);
}
protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
{
return other == null || other.IsNull;
}
}
#endregion
#region PatternPlaceholder
public static implicit operator AstType(PatternMatching.Pattern pattern)
{
return pattern != null ? new PatternPlaceholder(pattern) : null;
}
sealed class PatternPlaceholder : AstType, PatternMatching.INode
{
readonly PatternMatching.Pattern child;
public PatternPlaceholder(PatternMatching.Pattern child)
{
this.child = child;
}
public override S AcceptVisitor<T, S>(IAstVisitor<T, S> visitor, T data)
{
return visitor.VisitPatternPlaceholder(this, child, data);
}
protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
{
return child.DoMatch(other, match);
}
bool PatternMatching.INode.DoMatchCollection(Role role, PatternMatching.INode pos, PatternMatching.Match match, PatternMatching.BacktrackingInfo backtrackingInfo)
{
return child.DoMatchCollection(role, pos, match, backtrackingInfo);
}
}
#endregion
public virtual AstType MakeArrayType(int rank = 1)
{
return new ComposedType { BaseType = this }.MakeArrayType(rank);
}
// TODO : reimplement this
// /// <summary>
// /// Builds an expression that can be used to access a static member on this type.
// /// </summary>
// public MemberReferenceExpression Member(string memberName)
// {
// return new TypeReferenceExpression { Type = this }.Member(memberName);
// }
//
// /// <summary>
// /// Builds an invocation expression using this type as target.
// /// </summary>
// public InvocationExpression Invoke(string methodName, IEnumerable<Expression> arguments)
// {
// return new TypeReferenceExpression { Type = this }.Invoke(methodName, arguments);
// }
//
// /// <summary>
// /// Builds an invocation expression using this type as target.
// /// </summary>
// public InvocationExpression Invoke(string methodName, params Expression[] arguments)
// {
// return new TypeReferenceExpression { Type = this }.Invoke(methodName, arguments);
// }
//
// /// <summary>
// /// Builds an invocation expression using this type as target.
// /// </summary>
// public InvocationExpression Invoke(string methodName, IEnumerable<AstType> typeArguments, IEnumerable<Expression> arguments)
// {
// return new TypeReferenceExpression { Type = this }.Invoke(methodName, typeArguments, arguments);
// }
public static AstType Create(Type type)
{
switch (Type.GetTypeCode(type)) {
case TypeCode.Object:
return new PrimitiveType("Object");
case TypeCode.Boolean:
return new PrimitiveType("Boolean");
case TypeCode.Char:
return new PrimitiveType("Char");
case TypeCode.SByte:
return new PrimitiveType("SByte");
case TypeCode.Byte:
return new PrimitiveType("Byte");
case TypeCode.Int16:
return new PrimitiveType("Short");
case TypeCode.UInt16:
return new PrimitiveType("UShort");
case TypeCode.Int32:
return new PrimitiveType("Integer");
case TypeCode.UInt32:
return new PrimitiveType("UInteger");
case TypeCode.Int64:
return new PrimitiveType("Long");
case TypeCode.UInt64:
return new PrimitiveType("ULong");
case TypeCode.Single:
return new PrimitiveType("Single");
case TypeCode.Double:
return new PrimitiveType("Double");
case TypeCode.Decimal:
return new PrimitiveType("Decimal");
case TypeCode.String:
return new PrimitiveType("String");
case TypeCode.DateTime:
return new PrimitiveType("Date");
}
return new SimpleType(type.FullName); // TODO: implement this correctly
}
}
}

1
ICSharpCode.NRefactory.VB/IAstVisitor.cs

@ -23,6 +23,7 @@ namespace ICSharpCode.NRefactory.VB { @@ -23,6 +23,7 @@ namespace ICSharpCode.NRefactory.VB {
// Expression scope
S VisitIdentifier(Identifier identifier, T data);
S VisitXmlIdentifier(XmlIdentifier xmlIdentifier, T data);
S VisitSimpleNameExpression(SimpleNameExpression identifierExpression, T data);
S VisitPrimitiveExpression(PrimitiveExpression primitiveExpression, T data);

8
ICSharpCode.NRefactory.VB/ICSharpCode.NRefactory.VB.csproj

@ -50,6 +50,7 @@ @@ -50,6 +50,7 @@
<Compile Include="Ast\Expressions\Expression.cs" />
<Compile Include="Ast\Expressions\SimpleNameExpression.cs" />
<Compile Include="Ast\Expressions\PrimitiveExpression.cs" />
<Compile Include="Ast\Expressions\XmlIdentifier.cs" />
<Compile Include="Ast\General\Attribute.cs" />
<Compile Include="Ast\General\AttributeBlock.cs" />
<Compile Include="Ast\General\CompilationUnit.cs" />
@ -92,6 +93,10 @@ @@ -92,6 +93,10 @@
<Compile Include="Lexer\Tokens.cs" />
<Compile Include="Lexer\VBLexerMemento.cs" />
<Compile Include="Lexer\XmlModeInfo.cs" />
<Compile Include="OutputVisitor\IOutputFormatter.cs" />
<Compile Include="OutputVisitor\OutputVisitor.cs" />
<Compile Include="OutputVisitor\TextWriterOutputFormatter.cs" />
<Compile Include="OutputVisitor\VBFormattingOptions.cs" />
<Compile Include="Parser\Errors.cs" />
<Compile Include="Parser\ParamModifierList.cs" />
<Compile Include="Parser\Parser.cs">
@ -106,7 +111,7 @@ @@ -106,7 +111,7 @@
<Compile Include="PrettyPrinter\VBNet\VBNetOutputVisitor.cs" />
<Compile Include="PrettyPrinter\VBNet\VBNetPrettyPrintOptions.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SnippetParser.cs" />
<Compile Include="VBParser.cs" />
<Compile Include="Visitors\AbstractAstTransformer.cs" />
<Compile Include="Visitors\AbstractAstVisitor.cs" />
<Compile Include="Visitors\NodeTrackingAstVisitor.cs" />
@ -121,6 +126,7 @@ @@ -121,6 +126,7 @@
<Folder Include="Ast\TypeName" />
<Folder Include="Lexer" />
<Folder Include="Lexer\Special" />
<Folder Include="OutputVisitor" />
<Folder Include="Parser" />
<Folder Include="PrettyPrinter" />
<Folder Include="PrettyPrinter\VBNet" />

39
ICSharpCode.NRefactory.VB/OutputVisitor/IOutputFormatter.cs

@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.NRefactory.VB
{
/// <summary>
/// Output formatter for the Output visitor.
/// </summary>
public interface IOutputFormatter
{
void StartNode(AstNode node);
void EndNode(AstNode node);
/// <summary>
/// Writes an identifier.
/// If the identifier conflicts with a keyword, the output visitor will
/// call <c>WriteToken("@")</c> before calling WriteIdentifier().
/// </summary>
void WriteIdentifier(string identifier);
/// <summary>
/// Writes a keyword to the output.
/// </summary>
void WriteKeyword(string keyword);
/// <summary>
/// Writes a token to the output.
/// </summary>
void WriteToken(string token);
void Space();
void Indent();
void Unindent();
void NewLine();
}
}

173
ICSharpCode.NRefactory.VB/OutputVisitor/OutputVisitor.cs

@ -0,0 +1,173 @@ @@ -0,0 +1,173 @@
// 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.Collections.Generic;
using System.IO;
using ICSharpCode.NRefactory.PatternMatching;
namespace ICSharpCode.NRefactory.VB
{
/// <summary>
/// Description of OutputVisitor.
/// </summary>
public class OutputVisitor : IAstVisitor<object, object>, IPatternAstVisitor<object, object>
{
readonly IOutputFormatter formatter;
readonly VBFormattingOptions policy;
readonly Stack<AstNode> containerStack = new Stack<AstNode>();
readonly Stack<AstNode> positionStack = new Stack<AstNode>();
public OutputVisitor(TextWriter textWriter, VBFormattingOptions formattingPolicy)
{
if (textWriter == null)
throw new ArgumentNullException("textWriter");
if (formattingPolicy == null)
throw new ArgumentNullException("formattingPolicy");
this.formatter = new TextWriterOutputFormatter(textWriter);
this.policy = formattingPolicy;
}
public OutputVisitor(IOutputFormatter formatter, VBFormattingOptions formattingPolicy)
{
if (formatter == null)
throw new ArgumentNullException("formatter");
if (formattingPolicy == null)
throw new ArgumentNullException("formattingPolicy");
this.formatter = formatter;
this.policy = formattingPolicy;
}
public object VisitPatternPlaceholder(AstNode placeholder, Pattern pattern, object data)
{
throw new NotImplementedException();
}
public object VisitVBTokenNode(ICSharpCode.NRefactory.VB.Ast.VBTokenNode vBTokenNode, object data)
{
throw new NotImplementedException();
}
public object VisitCompilationUnit(ICSharpCode.NRefactory.VB.Ast.CompilationUnit compilationUnit, object data)
{
throw new NotImplementedException();
}
public object VisitBlockStatement(ICSharpCode.NRefactory.VB.Ast.BlockStatement blockStatement, object data)
{
throw new NotImplementedException();
}
public object VisitOptionStatement(ICSharpCode.NRefactory.VB.Ast.OptionStatement optionStatement, object data)
{
throw new NotImplementedException();
}
public object VisitImportsStatement(ICSharpCode.NRefactory.VB.Ast.ImportsStatement importsStatement, object data)
{
throw new NotImplementedException();
}
public object VisitAliasImportsClause(ICSharpCode.NRefactory.VB.Ast.AliasImportsClause aliasImportsClause, object data)
{
throw new NotImplementedException();
}
public object VisitMembersImportsClause(ICSharpCode.NRefactory.VB.Ast.MemberImportsClause membersImportsClause, object data)
{
throw new NotImplementedException();
}
public object VisitXmlNamespaceImportsClause(ICSharpCode.NRefactory.VB.Ast.XmlNamespaceImportsClause xmlNamespaceImportsClause, object data)
{
throw new NotImplementedException();
}
public object VisitAttribute(ICSharpCode.NRefactory.VB.Ast.Attribute attribute, object data)
{
throw new NotImplementedException();
}
public object VisitAttributeBlock(ICSharpCode.NRefactory.VB.Ast.AttributeBlock attributeBlock, object data)
{
throw new NotImplementedException();
}
public object VisitIdentifier(ICSharpCode.NRefactory.VB.Ast.Identifier identifier, object data)
{
throw new NotImplementedException();
}
public object VisitXmlIdentifier(ICSharpCode.NRefactory.VB.Ast.XmlIdentifier xmlIdentifier, object data)
{
throw new NotImplementedException();
}
public object VisitSimpleNameExpression(ICSharpCode.NRefactory.VB.Ast.SimpleNameExpression identifierExpression, object data)
{
throw new NotImplementedException();
}
public object VisitPrimitiveExpression(ICSharpCode.NRefactory.VB.Ast.PrimitiveExpression primitiveExpression, object data)
{
throw new NotImplementedException();
}
public object VisitPrimitiveType(ICSharpCode.NRefactory.VB.Ast.PrimitiveType primitiveType, object data)
{
throw new NotImplementedException();
}
public object VisitComposedType(ICSharpCode.NRefactory.VB.Ast.ComposedType composedType, object data)
{
throw new NotImplementedException();
}
public object VisitArraySpecifier(ICSharpCode.NRefactory.VB.Ast.ArraySpecifier arraySpecifier, object data)
{
throw new NotImplementedException();
}
public object VisitSimpleType(ICSharpCode.NRefactory.VB.Ast.SimpleType simpleType, object data)
{
throw new NotImplementedException();
}
public object VisitAnyNode(AnyNode anyNode, object data)
{
throw new NotImplementedException();
}
public object VisitBackreference(Backreference backreference, object data)
{
throw new NotImplementedException();
}
public object VisitChoice(Choice choice, object data)
{
throw new NotImplementedException();
}
public object VisitNamedNode(NamedNode namedNode, object data)
{
throw new NotImplementedException();
}
public object VisitRepeat(Repeat repeat, object data)
{
throw new NotImplementedException();
}
public object VisitOptionalNode(OptionalNode optionalNode, object data)
{
throw new NotImplementedException();
}
public object VisitIdentifierExpressionBackreference(IdentifierExpressionBackreference identifierExpressionBackreference, object data)
{
throw new NotImplementedException();
}
}
}

83
ICSharpCode.NRefactory.VB/OutputVisitor/TextWriterOutputFormatter.cs

@ -0,0 +1,83 @@ @@ -0,0 +1,83 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
using System;
using System.IO;
namespace ICSharpCode.NRefactory.VB
{
/// <summary>
/// Writes VB code into a TextWriter.
/// </summary>
public class TextWriterOutputFormatter : IOutputFormatter
{
readonly TextWriter textWriter;
int indentation;
bool needsIndent = true;
public TextWriterOutputFormatter(TextWriter textWriter)
{
if (textWriter == null)
throw new ArgumentNullException("textWriter");
this.textWriter = textWriter;
}
public void WriteIdentifier(string ident)
{
WriteIndentation();
textWriter.Write(ident);
}
public void WriteKeyword(string keyword)
{
WriteIndentation();
textWriter.Write(keyword);
}
public void WriteToken(string token)
{
WriteIndentation();
textWriter.Write(token);
}
public void Space()
{
WriteIndentation();
textWriter.Write(' ');
}
void WriteIndentation()
{
if (needsIndent) {
needsIndent = false;
for (int i = 0; i < indentation; i++) {
textWriter.Write('\t');
}
}
}
public void NewLine()
{
textWriter.WriteLine();
needsIndent = true;
}
public void Indent()
{
indentation++;
}
public void Unindent()
{
indentation--;
}
public virtual void StartNode(AstNode node)
{
}
public virtual void EndNode(AstNode node)
{
}
}
}

17
ICSharpCode.NRefactory.VB/OutputVisitor/VBFormattingOptions.cs

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
// 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;
namespace ICSharpCode.NRefactory.VB
{
/// <summary>
/// Description of VBFormattingOptions.
/// </summary>
public class VBFormattingOptions
{
public VBFormattingOptions()
{
}
}
}

71
ICSharpCode.NRefactory.VB/Parser/Parser.cs

@ -7,6 +7,7 @@ using System.Text; @@ -7,6 +7,7 @@ using System.Text;
using ICSharpCode.NRefactory.VB.Ast;
using ICSharpCode.NRefactory.VB.Parser;
using ASTAttribute = ICSharpCode.NRefactory.VB.Ast.Attribute;
using Roles = ICSharpCode.NRefactory.VB.AstNode.Roles;
@ -86,13 +87,14 @@ partial class VBParser @@ -86,13 +87,14 @@ partial class VBParser
void VB() {
compilationUnit = new CompilationUnit();
BlockStart(compilationUnit);
NodeStart(compilationUnit);
Get();
while (la.kind == 1 || la.kind == 21) {
StatementTerminator();
}
while (la.kind == 1 || la.kind == 21) {
OptionStatement(out option);
while (la.kind == 173) {
OptionStatement(CompilationUnit.MemberRole);
while (la.kind == 1 || la.kind == 21) {
StatementTerminator();
}
@ -103,12 +105,70 @@ partial class VBParser @@ -103,12 +105,70 @@ partial class VBParser
while (!(la.kind == 0 || la.kind == 1 || la.kind == 21)) {SynErr(239); Get();}
if (la.kind == 1) {
Get();
AddTerminal(Roles.StatementTerminator);
} else if (la.kind == 21) {
Get();
AddTerminal(Roles.StatementTerminator);
} else SynErr(240);
}
void OptionStatement(out OptionStatement result) {
void OptionStatement(Role role) {
var result = new OptionStatement(); NodeStart(result);
Expect(173);
AddTerminal(Roles.Keyword);
if (la.kind == 121) {
Get();
AddTerminal(Ast.OptionStatement.OptionTypeRole);
result.OptionType = OptionType.Explicit;
if (la.kind == 170 || la.kind == 171) {
OnOff(result);
}
} else if (la.kind == 207) {
Get();
AddTerminal(Ast.OptionStatement.OptionTypeRole);
result.OptionType = OptionType.Strict;
if (la.kind == 170 || la.kind == 171) {
OnOff(result);
}
} else if (la.kind == 139) {
Get();
AddTerminal(Ast.OptionStatement.OptionTypeRole);
result.OptionType = OptionType.Infer;
if (la.kind == 170 || la.kind == 171) {
OnOff(result);
}
} else if (la.kind == 87) {
Get();
AddTerminal(Ast.OptionStatement.OptionTypeRole);
result.OptionType = OptionType.Compare;
BinaryText(result);
} else SynErr(241);
StatementTerminator();
NodeEnd(result, role);
}
void OnOff(OptionStatement os) {
if (la.kind == 171) {
Get();
AddTerminal(Ast.OptionStatement.OptionValueRole);
os.OptionValue = OptionValue.On;
} else if (la.kind == 170) {
Get();
AddTerminal(Ast.OptionStatement.OptionValueRole);
os.OptionValue = OptionValue.Off;
} else SynErr(242);
}
void BinaryText(OptionStatement os) {
if (la.kind == 213) {
Get();
AddTerminal(Ast.OptionStatement.OptionValueRole);
os.OptionValue = OptionValue.Text;
} else if (la.kind == 67) {
Get();
AddTerminal(Ast.OptionStatement.OptionValueRole);
os.OptionValue = OptionValue.Binary;
} else SynErr(243);
}
@ -373,6 +433,9 @@ partial class VBParser @@ -373,6 +433,9 @@ partial class VBParser
case 238: return "??? expected";
case 239: return "this symbol not expected in StatementTerminator";
case 240: return "invalid StatementTerminator";
case 241: return "invalid OptionStatement";
case 242: return "invalid OnOff";
case 243: return "invalid BinaryText";
default: return "error " + errorNumber;
}

25
ICSharpCode.NRefactory.VB/Parser/VBParser.cs

@ -15,10 +15,10 @@ namespace ICSharpCode.NRefactory.VB.Parser @@ -15,10 +15,10 @@ namespace ICSharpCode.NRefactory.VB.Parser
internal partial class VBParser : IDisposable
{
VBLexer lexer;
Stack<AstNode> blockStack;
Stack<AstNode> stack;
CompilationUnit compilationUnit;
int errDist = MinErrDist;
const int MinErrDist = 2;
const string ErrMsgFormat = "-- line {0} col {1}: {2}"; // 0=line, 1=column, 2=text
@ -27,23 +27,30 @@ namespace ICSharpCode.NRefactory.VB.Parser @@ -27,23 +27,30 @@ namespace ICSharpCode.NRefactory.VB.Parser
this.errors = lexer.Errors;
errors.SynErr = new ErrorCodeProc(SynErr);
this.lexer = (VBLexer)lexer;
this.blockStack = new Stack<AstNode>();
this.stack = new Stack<AstNode>();
}
void NodeStart(AstNode node)
{
stack.Push(node);
}
void BlockStart(AstNode block)
void NodeEnd(AstNode currentNode, Role role)
{
blockStack.Push(block);
AstNode node = stack.Pop();
Debug.Assert(currentNode == node);
stack.Peek().AddChildUntyped(node, role);
}
void BlockEnd()
void AddTerminal(Role<VBTokenNode> role)
{
blockStack.Pop();
stack.Peek().AddChild(new VBTokenNode(t.Location, t.val.Length), role);
}
void AddChild<T>(T childNode, Role<T> role) where T : AstNode
{
if (childNode != null) {
blockStack.Peek().AddChild(childNode, role);
stack.Peek().AddChild(childNode, role);
}
}
@ -115,7 +122,7 @@ namespace ICSharpCode.NRefactory.VB.Parser @@ -115,7 +122,7 @@ namespace ICSharpCode.NRefactory.VB.Parser
// {
// lexer.NextToken();
// compilationUnit = new CompilationUnit();
//
//
// Location startLocation = la.Location;
// Statement st;
// Block(out st);

45
ICSharpCode.NRefactory.VB/Parser/vb.atg

@ -7,6 +7,7 @@ using System.Text; @@ -7,6 +7,7 @@ using System.Text;
using ICSharpCode.NRefactory.VB.Ast;
using ICSharpCode.NRefactory.VB.Parser;
using ASTAttribute = ICSharpCode.NRefactory.VB.Ast.Attribute;
using Roles = ICSharpCode.NRefactory.VB.AstNode.Roles;
COMPILER VB
@ -259,20 +260,50 @@ TOKENS @@ -259,20 +260,50 @@ TOKENS
PRODUCTIONS
#region General
VB =
(.
compilationUnit = new CompilationUnit();
BlockStart(compilationUnit);
.)
(.
compilationUnit = new CompilationUnit();
NodeStart(compilationUnit);
Get();
.)
{ StatementTerminator }
{ OptionStatement<out option> { StatementTerminator } }
{ OptionStatement<CompilationUnit.MemberRole> { StatementTerminator } }
/* { ImportsStmt { StatementTerminator } }
{ IF (IsGlobalAttrTarget()) GlobalAttributeSection { StatementTerminator } }
{ NamespaceMemberDecl { StatementTerminator } } */
.
StatementTerminator = SYNC ( EOL | ":" ) .
StatementTerminator = SYNC ( EOL<Roles.StatementTerminator> | ":"<Roles.StatementTerminator> ) .
#endregion
#region Global
#region OptionStatement
OptionStatement<auto> =
"Option"<Roles.Keyword> (
"Explicit"<Ast.OptionStatement.OptionTypeRole> (. result.OptionType = OptionType.Explicit; .) [ OnOff<result> ]
| "Strict"<Ast.OptionStatement.OptionTypeRole> (. result.OptionType = OptionType.Strict; .) [ OnOff<result> ]
| "Infer"<Ast.OptionStatement.OptionTypeRole> (. result.OptionType = OptionType.Infer; .) [ OnOff<result> ]
| "Compare"<Ast.OptionStatement.OptionTypeRole> (. result.OptionType = OptionType.Compare; .) BinaryText<result>
) StatementTerminator
.
OnOff<OptionStatement os> =
"On"<Ast.OptionStatement.OptionValueRole> (. os.OptionValue = OptionValue.On; .)
| "Off"<Ast.OptionStatement.OptionValueRole> (. os.OptionValue = OptionValue.Off; .)
.
BinaryText<OptionStatement os> =
"Text"<Ast.OptionStatement.OptionValueRole> (. os.OptionValue = OptionValue.Text; .)
| "Binary"<Ast.OptionStatement.OptionValueRole> (. os.OptionValue = OptionValue.Binary; .)
.
#endregion
OptionStatement<auto> = .
#endregion
END VB .

17
ICSharpCode.NRefactory.VB/SnippetParser.cs → ICSharpCode.NRefactory.VB/VBParser.cs

@ -22,19 +22,28 @@ namespace ICSharpCode.NRefactory.VB @@ -22,19 +22,28 @@ namespace ICSharpCode.NRefactory.VB
public class VBParser
{
public CompilationUnit ParseFile(string content)
bool hasErrors;
public CompilationUnit Parse(string content)
{
throw new NotImplementedException();
return Parse(new StringReader(content));
}
public CompilationUnit ParseFile(TextReader reader)
public CompilationUnit Parse(TextReader reader)
{
throw new NotImplementedException();
var parser = new ICSharpCode.NRefactory.VB.Parser.VBParser(new VBLexer(reader));
parser.Parse();
hasErrors = parser.Errors.Count > 0;
return parser.CompilationUnit;
}
public AstNode ParseSnippet(TextReader reader)
{
throw new NotImplementedException();
}
public bool HasErrors {
get { return hasErrors; }
}
}
}

20
NRefactory.sln

@ -12,14 +12,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.NRefactory", "I @@ -12,14 +12,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.NRefactory", "I
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.NRefactory.Tests", "ICSharpCode.NRefactory.Tests\ICSharpCode.NRefactory.Tests.csproj", "{63D3B27A-D966-4902-90B3-30290E1692F1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.NRefactory.Demo", "ICSharpCode.NRefactory.Demo\ICSharpCode.NRefactory.Demo.csproj", "{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.NRefactory.VB", "ICSharpCode.NRefactory.VB\ICSharpCode.NRefactory.VB.csproj", "{7B82B671-419F-45F4-B778-D9286F996EFA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.NRefactory.VB.Tests", "ICSharpCode.NRefactory.VB.Tests\ICSharpCode.NRefactory.VB.Tests.csproj", "{870115DD-960A-4406-A6B9-600BCDC36A03}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil", "..\Mono.Cecil\Mono.Cecil.csproj", "{D68133BD-1E63-496E-9EDE-4FBDBF77B486}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.NRefactory.Demo", "ICSharpCode.NRefactory.Demo\ICSharpCode.NRefactory.Demo.csproj", "{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -36,14 +36,6 @@ Global @@ -36,14 +36,6 @@ Global
{63D3B27A-D966-4902-90B3-30290E1692F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{63D3B27A-D966-4902-90B3-30290E1692F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{63D3B27A-D966-4902-90B3-30290E1692F1}.Release|Any CPU.Build.0 = Release|Any CPU
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Debug|Any CPU.Build.0 = Debug|x86
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Debug|Any CPU.ActiveCfg = Debug|x86
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Release|Any CPU.Build.0 = Release|x86
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Release|Any CPU.ActiveCfg = Release|x86
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Debug|x86.Build.0 = Debug|x86
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Debug|x86.ActiveCfg = Debug|x86
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Release|x86.Build.0 = Release|x86
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Release|x86.ActiveCfg = Release|x86
{7B82B671-419F-45F4-B778-D9286F996EFA}.Debug|Any CPU.Build.0 = Debug|x86
{7B82B671-419F-45F4-B778-D9286F996EFA}.Debug|Any CPU.ActiveCfg = Debug|x86
{7B82B671-419F-45F4-B778-D9286F996EFA}.Debug|x86.Build.0 = Debug|x86
@ -68,6 +60,14 @@ Global @@ -68,6 +60,14 @@ Global
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|x86.Build.0 = net_4_0_Debug|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|x86.ActiveCfg = net_3_5_Release|Any CPU
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Debug|Any CPU.Build.0 = Debug|x86
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Debug|Any CPU.ActiveCfg = Debug|x86
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Debug|x86.Build.0 = Debug|x86
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Debug|x86.ActiveCfg = Debug|x86
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Release|Any CPU.Build.0 = Release|x86
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Release|Any CPU.ActiveCfg = Release|x86
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Release|x86.Build.0 = Release|x86
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Release|x86.ActiveCfg = Release|x86
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = ICSharpCode.NRefactory\ICSharpCode.NRefactory.csproj

Loading…
Cancel
Save