2
// RazorStatementsParsingTests.cs
5
// Piotr Dowgiallo <sparekd@gmail.com>
7
// Copyright (c) 2012 Piotr Dowgiallo
9
// Permission is hereby granted, free of charge, to any person obtaining a copy
10
// of this software and associated documentation files (the "Software"), to deal
11
// in the Software without restriction, including without limitation the rights
12
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
// copies of the Software, and to permit persons to whom the Software is
14
// furnished to do so, subject to the following conditions:
16
// The above copyright notice and this permission notice shall be included in
17
// all copies or substantial portions of the Software.
19
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
28
using System.Collections.Generic;
31
using NUnit.Framework;
32
using MonoDevelop.AspNet.Mvc.StateEngine;
33
using MonoDevelop.Xml.StateEngine;
35
namespace UnitTests.MonoDevelop.AspNet.Mvc.StateEngine
37
public class RazorStatementsParsingTests : RazorParsingTests
40
public void ForStatement ()
42
parser.Parse ("@for(int i = 0; i++; i < length) { foo($); }$", () => {
43
parser.AssertStateIs<RazorStatementState> ();
44
parser.AssertPath ("//@for");
45
parser.AssertNodeIs<RazorStatement> ();
47
parser.AssertStateIs<RazorFreeState> ();
48
parser.AssertPath ("/");
53
public void ForeachStatement ()
55
parser.Parse ("@foreach (var item in Model) { foo($); }$", () => {
56
parser.AssertStateIs<RazorStatementState> ();
57
parser.AssertPath ("//@foreach");
58
parser.AssertNodeIs<RazorStatement> ();
60
parser.AssertStateIs<RazorFreeState> ();
61
parser.AssertPath ("/");
66
public void SwitchStatement ()
68
parser.Parse ("@switch (foo) { case bar: $break; }$", () => {
69
parser.AssertStateIs<RazorStatementState> ();
70
parser.AssertPath ("//@switch");
71
parser.AssertNodeIs<RazorStatement> ();
73
parser.AssertStateIs<RazorFreeState> ();
74
parser.AssertPath ("/");
79
public void WhileStatement ()
81
parser.Parse ("@while (foo !=$ bar) { foo (); }$", () => {
82
parser.AssertStateIs<RazorStatementState> ();
83
parser.AssertPath ("//@while");
84
parser.AssertNodeIs<RazorStatement> ();
86
parser.AssertStateIs<RazorFreeState> ();
87
parser.AssertPath ("/");
92
public void LockStatement ()
94
parser.Parse ("@lock (foo) { bar()$; }$", () => {
95
parser.AssertStateIs<RazorStatementState> ();
96
parser.AssertPath ("//@lock");
97
parser.AssertNodeIs<RazorStatement> ();
99
parser.AssertStateIs<RazorFreeState> ();
100
parser.AssertPath ("/");
105
public void DoStatement ()
107
parser.Parse ("@do { bar()$; } while (true)$", () => {
108
parser.AssertStateIs<RazorStatementState> ();
109
parser.AssertPath ("//@do");
110
parser.AssertNodeIs<RazorStatement> ();
112
parser.AssertStateIs<RazorFreeState> ();
113
parser.AssertPath ("/");
118
public void UsingStatement ()
120
parser.Parse ("@using (resource) { foo ($); }$", () => {
121
parser.AssertStateIs<RazorStatementState> ();
122
parser.AssertPath ("//@using");
123
parser.AssertNodeIs<RazorStatement> ();
125
parser.AssertStateIs<RazorFreeState> ();
126
parser.AssertPath ("/");
131
public void IfStatementRemainsInStatementStateIfCanBeContinued ()
133
parser.Parse ("@if(true) { $foo(); }$", () => {
134
parser.AssertStateIs<RazorStatementState> ();
135
parser.AssertPath ("//@if");
136
parser.AssertNodeIs<RazorStatement> ();
138
parser.AssertStateIs<RazorStatementState> ();
139
parser.AssertPath ("/");
140
parser.AssertNodeIs<XDocument> (); // if statement is ended
145
public void IfStatementReturnsToParentStateWhenNotContinued ()
147
parser.Parse ("@if(true) { $foo(); } bar$", () => {
148
parser.AssertStateIs<RazorStatementState> ();
149
parser.AssertPath ("//@if");
150
parser.AssertNodeIs<RazorStatement> ();
152
parser.AssertStateIs<RazorFreeState> ();
153
parser.AssertPath ("/");
158
public void IfStatementCanBeContinuedWithElseIf ()
160
parser.Parse ("@if (true) { $foo(); } else if (false) { $foo(); }", () => {
161
parser.AssertStateIs<RazorStatementState> ();
162
parser.AssertPath ("//@if");
163
parser.AssertNodeIs<RazorStatement> ();
165
parser.AssertStateIs<RazorStatementState> ();
166
parser.AssertPath ("//@else if");
167
parser.AssertNodeIs<RazorStatement> ();
172
public void IfStatementCanBeContinuedWithElse ()
174
parser.Parse ("@if (true) { $foo(); } else { $foo(); }", () => {
175
parser.AssertStateIs<RazorStatementState> ();
176
parser.AssertPath ("//@if");
177
parser.AssertNodeIs<RazorStatement> ();
179
parser.AssertStateIs<RazorStatementState> ();
180
parser.AssertPath ("//@else");
181
parser.AssertNodeIs<RazorStatement> ();
186
public void ElseIfStatementCanBeContinuedWithElse ()
188
parser.Parse ("@if (true) { foo(); } else if (false) { $foo(); } else { bar $(); }", () => {
189
parser.AssertStateIs<RazorStatementState> ();
190
parser.AssertPath ("//@else if");
191
parser.AssertNodeIs<RazorStatement> ();
193
parser.AssertStateIs<RazorStatementState> ();
194
parser.AssertPath ("//@else");
195
parser.AssertNodeIs<RazorStatement> ();
200
public void ElseIfStatementCanBeContinuedWithElseIf ()
202
parser.Parse ("@if (true) { foo(); } else if (true) { $foo(); } else if (false) { bar $(); }", () => {
203
parser.AssertStateIs<RazorStatementState> ();
204
parser.AssertPath ("//@else if");
205
parser.AssertNodeIs<RazorStatement> ();
207
parser.AssertStateIs<RazorStatementState> ();
208
parser.AssertPath ("//@else if");
209
parser.AssertNodeIs<RazorStatement> ();
214
public void TryStatementRemainsInStatementStateIfCanBeContinued ()
216
parser.Parse ("@try { $foo(); }$", () => {
217
parser.AssertStateIs<RazorStatementState> ();
218
parser.AssertPath ("//@try");
219
parser.AssertNodeIs<RazorStatement> ();
221
parser.AssertStateIs<RazorStatementState> ();
222
parser.AssertPath ("/");
223
parser.AssertNodeIs<XDocument> (); // try statement is ended
228
public void TryStatementReturnsToParentStateWhenNotContinued ()
230
parser.Parse ("@try { $foo(); } bar$", () => {
231
parser.AssertStateIs<RazorStatementState> ();
232
parser.AssertPath ("//@try");
233
parser.AssertNodeIs<RazorStatement> ();
235
parser.AssertStateIs<RazorFreeState> ();
236
parser.AssertPath ("/");
241
public void TryStatementCanBeContinuedWithCatch ()
243
parser.Parse ("@try { $foo(); } catch(Exception e) { $Foo(); }", () => {
244
parser.AssertStateIs<RazorStatementState> ();
245
parser.AssertPath ("//@try");
246
parser.AssertNodeIs<RazorStatement> ();
248
parser.AssertStateIs<RazorStatementState> ();
249
parser.AssertPath ("//@catch");
250
parser.AssertNodeIs<RazorStatement> ();
255
public void TryStatementCanBeContinuedWithFinally ()
257
parser.Parse ("@try { $foo(); } finally { $Foo(); }", () => {
258
parser.AssertStateIs<RazorStatementState> ();
259
parser.AssertPath ("//@try");
260
parser.AssertNodeIs<RazorStatement> ();
262
parser.AssertStateIs<RazorStatementState> ();
263
parser.AssertPath ("//@finally");
264
parser.AssertNodeIs<RazorStatement> ();
269
public void CatchStatementCanBeContinuedWithCatchOrFinally ()
271
parser.Parse ("@try { foo(); } catch { $Foo(); } catch (Exception e) { $Foo(); } finally { $Foo(); }", () => {
272
parser.AssertStateIs<RazorStatementState> ();
273
parser.AssertPath ("//@catch");
274
parser.AssertNodeIs<RazorStatement> ();
276
parser.AssertStateIs<RazorStatementState> ();
277
parser.AssertPath ("//@catch");
278
parser.AssertNodeIs<RazorStatement> ();
280
parser.AssertStateIs<RazorStatementState> ();
281
parser.AssertPath ("//@finally");
282
parser.AssertNodeIs<RazorStatement> ();
287
public void StatementWithNestedBrackets ()
289
parser.Parse ("@foreach (var item in Foo) { { { $ } } $}$", () => {
290
parser.AssertStateIs<RazorStatementState> ();
291
parser.AssertPath ("//@foreach");
293
parser.AssertStateIs<RazorStatementState> ();
294
parser.AssertPath ("//@foreach");
296
parser.AssertStateIs<RazorFreeState> ();
297
parser.AssertPath ("/");
302
public void StatementInHtml ()
304
parser.Parse ("<foo><bar>@if (true) { Foo $ bar }</bar></foo>", () => {
305
parser.AssertStateIs<RazorStatementState> ();
306
parser.AssertPath ("//foo/bar/@if");
311
public void StatementSupportsHtml ()
313
parser.Parse ("@while (true) {<foo><bar>$</bar></foo> }", () => {
314
parser.AssertStateIs<RazorStatementState> ();
315
parser.AssertPath ("//@while/foo/bar");