File: IfElseStatementTests.cs

package info (click to toggle)
monodevelop 4.0.12%2Bdfsg-6
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 219,596 kB
  • ctags: 253,200
  • sloc: cs: 1,486,058; xml: 952,347; java: 60,981; makefile: 4,213; sh: 1,727; ansic: 867; objc: 302; sql: 111
file content (142 lines) | stat: -rw-r--r-- 7,690 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)

using System;
using System.IO;
using NUnit.Framework;
using ICSharpCode.NRefactory.VB.Parser;
using ICSharpCode.NRefactory.VB.Ast;

namespace ICSharpCode.NRefactory.VB.Tests.Ast
{
	[TestFixture]
	public class IfElseStatementTests
	{
		#region VB.NET
		[Test]
		public void VBNetSimpleIfStatementTest()
		{
			IfElseStatement ifElseStatement = ParseUtil.ParseStatement<IfElseStatement>("If True THEN END");
			Assert.IsFalse(ifElseStatement.Condition.IsNull);
			Assert.IsTrue(ifElseStatement.TrueStatement.Count == 1, "true count != 1:" + ifElseStatement.TrueStatement.Count);
			Assert.IsTrue(ifElseStatement.FalseStatement.Count == 0, "false count != 0:" + ifElseStatement.FalseStatement.Count);
			
			Assert.IsTrue(ifElseStatement.TrueStatement[0] is EndStatement, "Statement was: " + ifElseStatement.TrueStatement[0]);
		}
		[Test]
		public void VBNetSimpleIfStatementTest2()
		{
			IfElseStatement ifElseStatement = ParseUtil.ParseStatement<IfElseStatement>("If True THEN\n END\n END IF");
			Assert.IsFalse(ifElseStatement.Condition.IsNull);
			Assert.IsTrue(ifElseStatement.TrueStatement.Count == 1, "true count != 1:" + ifElseStatement.TrueStatement.Count);
			Assert.IsTrue(ifElseStatement.FalseStatement.Count == 0, "false count != 0:" + ifElseStatement.FalseStatement.Count);
			
			Assert.IsTrue(ifElseStatement.TrueStatement[0] is BlockStatement, "Statement was: " + ifElseStatement.TrueStatement[0]);
		}
		
		// test for SD2-1201
		[Test]
		public void VBNetIfStatementLocationTest()
		{
			IfElseStatement ifElseStatement = ParseUtil.ParseStatement<IfElseStatement>("If True THEN\n" +
			                                                                                 "DoIt()\n" +
			                                                                                 "ElseIf False Then\n" +
			                                                                                 "DoIt()\n" +
			                                                                                 "End If");
			Assert.AreEqual(3, (ifElseStatement.StartLocation).Line);
			Assert.AreEqual(7, (ifElseStatement.EndLocation).Line);
			Assert.AreEqual(5, (ifElseStatement.ElseIfSections[0].StartLocation).Line);
			Assert.AreEqual(6, (ifElseStatement.ElseIfSections[0].EndLocation).Line);
			Assert.IsNotNull(ifElseStatement.ElseIfSections[0].Parent);
			
		}
		
		[Test]
		public void VBNetElseIfStatementTest()
		{
			IfElseStatement ifElseStatement = ParseUtil.ParseStatement<IfElseStatement>("If True THEN\n" +
			                                                                                 "END\n" +
			                                                                                 "ElseIf False Then\n" +
			                                                                                 "Stop\n" +
			                                                                                 "End If");
			Assert.IsFalse(ifElseStatement.Condition.IsNull);
			Assert.IsTrue(ifElseStatement.TrueStatement.Count == 1, "true count != 1:" + ifElseStatement.TrueStatement.Count);
			Assert.IsTrue(ifElseStatement.FalseStatement.Count == 0, "false count != 0:" + ifElseStatement.FalseStatement.Count);
			Assert.IsFalse((bool)(ifElseStatement.ElseIfSections[0].Condition as PrimitiveExpression).Value);
			
			Assert.IsTrue(ifElseStatement.TrueStatement[0] is BlockStatement, "Statement was: " + ifElseStatement.TrueStatement[0]);
			Assert.IsTrue(ifElseStatement.ElseIfSections[0].EmbeddedStatement.Children[0] is StopStatement, "Statement was: " + ifElseStatement.ElseIfSections[0].EmbeddedStatement.Children[0]);
		}
		[Test]
		public void VBNetElse_IfStatementTest()
		{
			IfElseStatement ifElseStatement = ParseUtil.ParseStatement<IfElseStatement>("If True THEN\n" +
			                                                                                 "END\n" +
			                                                                                 "Else If False Then\n" +
			                                                                                 "Stop\n" +
			                                                                                 "End If");
			Assert.IsFalse(ifElseStatement.Condition.IsNull);
			Assert.IsTrue(ifElseStatement.TrueStatement.Count == 1, "true count != 1:" + ifElseStatement.TrueStatement.Count);
			Assert.IsTrue(ifElseStatement.FalseStatement.Count == 0, "false count != 0:" + ifElseStatement.FalseStatement.Count);
			Assert.IsFalse((bool)(ifElseStatement.ElseIfSections[0].Condition as PrimitiveExpression).Value);
			
			Assert.IsTrue(ifElseStatement.TrueStatement[0] is BlockStatement, "Statement was: " + ifElseStatement.TrueStatement[0]);
			Assert.IsTrue(ifElseStatement.ElseIfSections[0].EmbeddedStatement.Children[0] is StopStatement, "Statement was: " + ifElseStatement.ElseIfSections[0].EmbeddedStatement.Children[0]);
		}
		[Test]
		public void VBNetMultiStatementIfStatementTest()
		{
			IfElseStatement ifElseStatement = ParseUtil.ParseStatement<IfElseStatement>("If True THEN Stop : b");
			Assert.IsFalse(ifElseStatement.Condition.IsNull);
			Assert.AreEqual(2, ifElseStatement.TrueStatement.Count, "true count");
			Assert.AreEqual(0, ifElseStatement.FalseStatement.Count, "false count");
			
			Assert.IsTrue(ifElseStatement.TrueStatement[0] is StopStatement);
			Assert.IsTrue(ifElseStatement.TrueStatement[1] is ExpressionStatement);
		}
		[Test]
		public void VBNetMultiStatementIfStatementWithEndStatementTest()
		{
			IfElseStatement ifElseStatement = ParseUtil.ParseStatement<IfElseStatement>("If True THEN Stop : End : b");
			Assert.IsFalse(ifElseStatement.Condition.IsNull);
			Assert.AreEqual(3, ifElseStatement.TrueStatement.Count, "true count");
			Assert.AreEqual(0, ifElseStatement.FalseStatement.Count, "false count");
			
			Assert.IsTrue(ifElseStatement.TrueStatement[0] is StopStatement);
			Assert.IsTrue(ifElseStatement.TrueStatement[1] is EndStatement);
			Assert.IsTrue(ifElseStatement.TrueStatement[2] is ExpressionStatement);
		}
		
		[Test]
		public void VBNetIfWithEmptyElseTest()
		{
			IfElseStatement ifElseStatement = ParseUtil.ParseStatement<IfElseStatement>("If True THEN a Else");
			Assert.IsFalse(ifElseStatement.Condition.IsNull);
			Assert.AreEqual(1, ifElseStatement.TrueStatement.Count, "true count");
			Assert.AreEqual(0, ifElseStatement.FalseStatement.Count, "false count");
		}
		
		[Test]
		public void VBNetIfWithMultipleColons()
		{
			IfElseStatement ifElseStatement = ParseUtil.ParseStatement<IfElseStatement>("If True THEN a : : b");
			Assert.IsFalse(ifElseStatement.Condition.IsNull);
			Assert.AreEqual(2, ifElseStatement.TrueStatement.Count, "true count");
			Assert.AreEqual(0, ifElseStatement.FalseStatement.Count, "false count");
		}
		
		[Test]
		public void VBNetIfWithSingleLineElse()
		{
			// This isn't legal according to the VB spec, but the MS VB compiler seems to allow it.
			IfElseStatement ifElseStatement = ParseUtil.ParseStatement<IfElseStatement>("If True THEN\n" +
			                                                                                 " x()\n" +
			                                                                                 "Else y()\n" +
			                                                                                 "End If");
			Assert.IsFalse(ifElseStatement.Condition.IsNull);
			Assert.AreEqual(1, ifElseStatement.TrueStatement.Count, "true count");
			Assert.AreEqual(1, ifElseStatement.FalseStatement.Count, "false count");
		}
		#endregion
	}
}