// 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 ParseBlockGivesSpacesToCodeOnAtTagTemplateTransitionInDesignTimeMode() { ParseBlockTest("Foo( @
Foo
)", designTime: true); } [Fact] public void ParseBlockGivesSpacesToCodeOnAtColonTemplateTransitionInDesignTimeMode() { ParseBlockTest("Foo( " + Environment.NewLine + "@:Foo
" + Environment.NewLine + ")", designTime: true); } [Fact] public void ParseBlockGivesSpacesToCodeOnTagTransitionInDesignTimeMode() { ParseBlockTest("{" + Environment.NewLine + "Foo
" + Environment.NewLine + "}", designTime: true); } [Fact] public void ParseBlockGivesSpacesToCodeOnInvalidAtTagTransitionInDesignTimeMode() { ParseBlockTest("{" + Environment.NewLine + " @Foo
" + Environment.NewLine + "}", designTime: true); } [Fact] public void ParseBlockGivesSpacesToCodeOnAtColonTransitionInDesignTimeMode() { ParseBlockTest("{" + Environment.NewLine + " @:Foo
" + Environment.NewLine + "}", designTime: true); } [Fact] public void ParseBlockShouldSupportSingleLineMarkupContainingStatementBlock() { ParseBlockTest("Repeat(10," + Environment.NewLine + " @: @{}" + Environment.NewLine + ")"); } [Fact] public void ParseBlockShouldSupportMarkupWithoutPreceedingWhitespace() { 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 ParseBlockAllowsMarkupInIfBodyWithBraces() { ParseBlockTest("if(foo) {Bar
} else if(bar) {Baz
} else {Boz
}"); } [Fact] public void ParseBlockAllowsMarkupInIfBodyWithBracesWithinCodeBlock() { ParseBlockTest("{ if(foo) {Bar
} else if(bar) {Baz
} else {Boz
} }"); } [Fact] public void ParseBlockSupportsMarkupInCaseAndDefaultBranchesOfSwitch() { // 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 ParseBlockSupportsMarkupInCaseAndDefaultBranchesOfSwitchInCodeBlock() { // 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 ParseBlockParsesMarkupStatementOnOpenAngleBracket() { ParseBlockTest("for(int i = 0; i < 10; i++) {Foo
}"); } [Fact] public void ParseBlockParsesMarkupStatementOnOpenAngleBracketInCodeBlock() { ParseBlockTest("{ for(int i = 0; i < 10; i++) {Foo
} }"); } [Fact] public void ParseBlockParsesMarkupStatementOnSwitchCharacterFollowedByColon() { // Arrange ParseBlockTest("if(foo) { @:Bar" + Environment.NewLine + "} zoop"); } [Fact] public void ParseBlockParsesMarkupStatementOnSwitchCharacterFollowedByDoubleColon() { // Arrange ParseBlockTest("if(foo) { @::Sometext" + Environment.NewLine + "}"); } [Fact] public void ParseBlockParsesMarkupStatementOnSwitchCharacterFollowedByTripleColon() { // Arrange ParseBlockTest("if(foo) { @:::Sometext" + Environment.NewLine + "}"); } [Fact] public void ParseBlockParsesMarkupStatementOnSwitchCharacterFollowedByColonInCodeBlock() { // Arrange ParseBlockTest("{ if(foo) { @:Bar" + Environment.NewLine + "} } zoop"); } [Fact] public void ParseBlockCorrectlyReturnsFromMarkupBlockWithPseudoTag() { ParseBlockTest("if (i > 0) {A real tag!
" + Environment.NewLine + " }" + Environment.NewLine + "}"); } } }