// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using Xunit; namespace Microsoft.AspNetCore.Razor.Language.Legacy { public class CSharpToMarkupSwitchTest : CsHtmlCodeParserTestBase { [Fact] public void SingleAngleBracketDoesNotCauseSwitchIfOuterBlockIsTerminated() { ParseBlockTest("{ List< }"); } [Fact] public void GivesSpacesToCodeOnAtTagTemplateTransitionInDesignTimeMode() { ParseBlockTest("Foo( @

Foo

)", designTime: true); } [Fact] public void GivesSpacesToCodeOnAtColonTemplateTransitionInDesignTimeMode() { ParseBlockTest("Foo( " + Environment.NewLine + "@:

Foo

" + Environment.NewLine + ")", designTime: true); } [Fact] public void GivesSpacesToCodeOnTagTransitionInDesignTimeMode() { ParseBlockTest("{" + Environment.NewLine + "

Foo

" + Environment.NewLine + "}", designTime: true); } [Fact] public void GivesSpacesToCodeOnInvalidAtTagTransitionInDesignTimeMode() { ParseBlockTest("{" + Environment.NewLine + " @

Foo

" + Environment.NewLine + "}", designTime: true); } [Fact] public void GivesSpacesToCodeOnAtColonTransitionInDesignTimeMode() { ParseBlockTest("{" + Environment.NewLine + " @:

Foo

" + Environment.NewLine + "}", designTime: true); } [Fact] public void ShouldSupportSingleLineMarkupContainingStatementBlock() { ParseBlockTest("Repeat(10," + Environment.NewLine + " @: @{}" + Environment.NewLine + ")"); } [Fact] public void ShouldSupportMarkupWithoutPreceedingWhitespace() { ParseBlockTest("foreach(var file in files){" + Environment.NewLine + Environment.NewLine + Environment.NewLine + "@:Baz" + Environment.NewLine + "
" + Environment.NewLine + "Foo" + Environment.NewLine + "@:Bar" + Environment.NewLine + "}"); } [Fact] public void GivesAllWhitespaceOnSameLineWithTrailingNewLineToMarkupExclPreceedingNewline() { // ParseBlockGivesAllWhitespaceOnSameLineExcludingPreceedingNewlineButIncludingTrailingNewLineToMarkup ParseBlockTest("if(foo) {" + Environment.NewLine + " var foo = \"After this statement there are 10 spaces\"; " + Environment.NewLine + "

" + Environment.NewLine + " Foo" + Environment.NewLine + " @bar" + Environment.NewLine + "

" + Environment.NewLine + " @:Hello!" + Environment.NewLine + " var biz = boz;" + Environment.NewLine + "}"); } [Fact] public void AllowsMarkupInIfBodyWithBraces() { ParseBlockTest("if(foo) {

Bar

} else if(bar) {

Baz

} else {

Boz

}"); } [Fact] public void AllowsMarkupInIfBodyWithBracesWithinCodeBlock() { ParseBlockTest("{ if(foo) {

Bar

} else if(bar) {

Baz

} else {

Boz

} }"); } [Fact] public void SupportsMarkupInCaseAndDefaultBranchesOfSwitch() { // Arrange ParseBlockTest("switch(foo) {" + Environment.NewLine + " case 0:" + Environment.NewLine + "

Foo

" + Environment.NewLine + " break;" + Environment.NewLine + " case 1:" + Environment.NewLine + "

Bar

" + Environment.NewLine + " return;" + Environment.NewLine + " case 2:" + Environment.NewLine + " {" + Environment.NewLine + "

Baz

" + Environment.NewLine + "

Boz

" + Environment.NewLine + " }" + Environment.NewLine + " default:" + Environment.NewLine + "

Biz

" + Environment.NewLine + "}"); } [Fact] public void SupportsMarkupInCaseAndDefaultBranchesOfSwitchInCodeBlock() { // Arrange ParseBlockTest("{ switch(foo) {" + Environment.NewLine + " case 0:" + Environment.NewLine + "

Foo

" + Environment.NewLine + " break;" + Environment.NewLine + " case 1:" + Environment.NewLine + "

Bar

" + Environment.NewLine + " return;" + Environment.NewLine + " case 2:" + Environment.NewLine + " {" + Environment.NewLine + "

Baz

" + Environment.NewLine + "

Boz

" + Environment.NewLine + " }" + Environment.NewLine + " default:" + Environment.NewLine + "

Biz

" + Environment.NewLine + "} }"); } [Fact] public void ParsesMarkupStatementOnOpenAngleBracket() { ParseBlockTest("for(int i = 0; i < 10; i++) {

Foo

}"); } [Fact] public void ParsesMarkupStatementOnOpenAngleBracketInCodeBlock() { ParseBlockTest("{ for(int i = 0; i < 10; i++) {

Foo

} }"); } [Fact] public void ParsesMarkupStatementOnSwitchCharacterFollowedByColon() { // Arrange ParseBlockTest("if(foo) { @:Bar" + Environment.NewLine + "} zoop"); } [Fact] public void ParsesMarkupStatementOnSwitchCharacterFollowedByDoubleColon() { // Arrange ParseBlockTest("if(foo) { @::Sometext" + Environment.NewLine + "}"); } [Fact] public void ParsesMarkupStatementOnSwitchCharacterFollowedByTripleColon() { // Arrange ParseBlockTest("if(foo) { @:::Sometext" + Environment.NewLine + "}"); } [Fact] public void ParsesMarkupStatementOnSwitchCharacterFollowedByColonInCodeBlock() { // Arrange ParseBlockTest("{ if(foo) { @:Bar" + Environment.NewLine + "} } zoop"); } [Fact] public void CorrectlyReturnsFromMarkupBlockWithPseudoTag() { ParseBlockTest("if (i > 0) { ; }"); } [Fact] public void CorrectlyReturnsFromMarkupBlockWithPseudoTagInCodeBlock() { ParseBlockTest("{ if (i > 0) { ; } }"); } [Fact] public void SupportsAllKindsOfImplicitMarkupInCodeBlock() { ParseBlockTest("{" + Environment.NewLine + " if(true) {" + Environment.NewLine + " @:Single Line Markup" + Environment.NewLine + " }" + Environment.NewLine + " foreach (var p in Enumerable.Range(1, 10)) {" + Environment.NewLine + " The number is @p" + Environment.NewLine + " }" + Environment.NewLine + " if(!false) {" + Environment.NewLine + "

A real tag!

" + Environment.NewLine + " }" + Environment.NewLine + "}"); } } }