// 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 + "
" + 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) {A real tag!
" + Environment.NewLine + " }" + Environment.NewLine + "}"); } } }