public void Execute_SkipsDocumentWithNoClassNode() { // Arrange var projectEngine = CreateProjectEngine(); var pass = new FunctionsDirectivePass() { Engine = projectEngine.Engine, }; var sourceDocument = TestRazorSourceDocument.Create("@functions { var value = true; }"); var codeDocument = RazorCodeDocument.Create(sourceDocument); var irDocument = new DocumentIntermediateNode(); irDocument.Children.Add(new DirectiveIntermediateNode() { Directive = FunctionsDirective.Directive, }); // Act pass.Execute(codeDocument, irDocument); // Assert Children( irDocument, node => Assert.IsType <DirectiveIntermediateNode>(node)); }
public void Execute_FunctionsAndComponentCodeDirective_AddsStatementsToClassLevel() { // Arrange var projectEngine = CreateProjectEngine(b => b.AddDirective(ComponentCodeDirective.Directive)); var pass = new FunctionsDirectivePass() { Engine = projectEngine.Engine, }; var sourceDocument = TestRazorSourceDocument.Create(@" @functions { var value1 = true; } @code { var value2 = true; } @functions { var value3 = true; }"); var codeDocument = RazorCodeDocument.Create(sourceDocument); codeDocument.SetFileKind(FileKinds.Component); var irDocument = Lower(codeDocument, projectEngine); // Act pass.Execute(codeDocument, irDocument); // Assert Children( irDocument, node => Assert.IsType <NamespaceDeclarationIntermediateNode>(node)); var @namespace = irDocument.Children[0]; Children( @namespace, node => Assert.IsType <ClassDeclarationIntermediateNode>(node)); var @class = @namespace.Children[0]; Children( @class, node => Assert.IsType <MethodDeclarationIntermediateNode>(node), node => CSharpCode(" var value1 = true; ", node), node => CSharpCode(" var value2 = true; ", node), node => CSharpCode(" var value3 = true; ", node)); var method = @class.Children[0]; Children( method, node => Assert.IsType <HtmlContentIntermediateNode>(node)); }
public void Execute_AddsStatementsToClassLevel() { // Arrange var projectEngine = CreateProjectEngine(); var pass = new FunctionsDirectivePass() { Engine = projectEngine.Engine, }; var sourceDocument = TestRazorSourceDocument.Create("@functions { var value = true; }"); var codeDocument = RazorCodeDocument.Create(sourceDocument); var irDocument = Lower(codeDocument, projectEngine); // Act pass.Execute(codeDocument, irDocument); // Assert Children( irDocument, node => Assert.IsType <NamespaceDeclarationIntermediateNode>(node)); var @namespace = irDocument.Children[0]; Children( @namespace, node => Assert.IsType <ClassDeclarationIntermediateNode>(node)); var @class = @namespace.Children[0]; Children( @class, node => Assert.IsType <MethodDeclarationIntermediateNode>(node), node => CSharpCode(" var value = true; ", node)); var method = @class.Children[0]; Assert.Empty(method.Children); }