public void Lower_WithMultipleImports_SingleLineFileScopedSinglyOccurring() { // Arrange var source = TestRazorSourceDocument.Create("<p>Hi!</p>"); var imports = new[] { TestRazorSourceDocument.Create("@test value1"), TestRazorSourceDocument.Create("@test value2"), }; var codeDocument = TestRazorCodeDocument.Create(source, imports); // Act var documentNode = Lower(codeDocument, b => { b.AddDirective(DirectiveDescriptor.CreateDirective( "test", DirectiveKind.SingleLine, builder => { builder.AddMemberToken(); builder.Usage = DirectiveUsage.FileScopedSinglyOccurring; })); }); // Assert Children( documentNode, n => Directive("test", n, c => DirectiveToken(DirectiveTokenKind.Member, "value2", c)), n => Html("<p>Hi!</p>", n)); }
public void CreateDirective_CreatesDirective_WithProvidedKind() { // Arrange & Act var directive = DirectiveDescriptor.CreateDirective("test", DirectiveKind.SingleLine); // Assert Assert.Equal("test", directive.Directive); Assert.Equal(DirectiveKind.SingleLine, directive.Kind); }
public void AddOptionalNamespaceToken_AddsToken() { // Arrange & Act var descriptor = DirectiveDescriptor.CreateDirective("custom", DirectiveKind.SingleLine, b => b.AddOptionalNamespaceToken()); // Assert var token = Assert.Single(descriptor.Tokens); Assert.Equal(DirectiveTokenKind.Namespace, token.Kind); Assert.True(token.Optional); }
public void AddOptionalMemberToken_AddsToken() { // Arrange & Act var descriptor = DirectiveDescriptor.CreateDirective("custom", DirectiveKind.SingleLine, b => b.AddOptionalMemberToken("Name", "Description")); // Assert var token = Assert.Single(descriptor.Tokens); Assert.Equal(DirectiveTokenKind.Member, token.Kind); Assert.True(token.Optional); Assert.Equal("Name", token.Name); Assert.Equal("Description", token.Description); }
public void AddStringToken_AddsToken() { // Arrange & Act var descriptor = DirectiveDescriptor.CreateDirective("custom", DirectiveKind.SingleLine, b => b.AddStringToken()); // Assert var token = Assert.Single(descriptor.Tokens); Assert.Equal(DirectiveTokenKind.String, token.Kind); Assert.False(token.Optional); Assert.Null(token.Name); Assert.Null(token.Description); }
public void CreateDirective_WithConfigure_CreatesDirective_WithProvidedKind() { // Arrange var called = false; Action <IDirectiveDescriptorBuilder> configure = b => { called = true; }; // Act var directive = DirectiveDescriptor.CreateDirective("test", DirectiveKind.SingleLine, configure); // Assert Assert.Equal("test", directive.Directive); Assert.Equal(DirectiveKind.SingleLine, directive.Kind); Assert.True(called); }
public void AddDirective_NoFeature_CreatesFeature() { // Arrange var engine = RazorEngine.CreateEmpty(b => { // Act b.AddDirective(DirectiveDescriptor.CreateDirective("test", DirectiveKind.SingleLine)); }); // Assert var actual = Assert.Single(engine.Features.OfType <IRazorDirectiveFeature>()); Assert.IsType <DefaultRazorDirectiveFeature>(actual); var directive = Assert.Single(actual.Directives); Assert.Equal("test", directive.Directive); }
public void Execute_DirectiveWithError_PreservesDiagnosticsAndRemovesDirectiveNodeFromDocument() { // Arrange var content = "@custom \"Hello\""; var expectedDiagnostic = RazorDiagnostic.Create(new RazorDiagnosticDescriptor("RZ9999", () => "Some diagnostic message.", RazorDiagnosticSeverity.Error), SourceSpan.Undefined); var sourceDocument = TestRazorSourceDocument.Create(content); var codeDocument = RazorCodeDocument.Create(sourceDocument); var defaultEngine = RazorProjectEngine.Create(b => { b.AddDirective(DirectiveDescriptor.CreateDirective("custom", DirectiveKind.SingleLine, d => d.AddStringToken())); }).Engine; var documentNode = Lower(codeDocument, defaultEngine); // Add the diagnostic to the directive node. var directiveNode = documentNode.FindDescendantNodes <DirectiveIntermediateNode>().Single(); directiveNode.Diagnostics.Add(expectedDiagnostic); var pass = new DirectiveRemovalOptimizationPass() { Engine = defaultEngine, }; // Act pass.Execute(codeDocument, documentNode); // Assert var diagnostic = Assert.Single(documentNode.Diagnostics); Assert.Equal(expectedDiagnostic, diagnostic); Children(documentNode, node => Assert.IsType <NamespaceDeclarationIntermediateNode>(node)); var @namespace = documentNode.Children[0]; Children(@namespace, node => Assert.IsType <ClassDeclarationIntermediateNode>(node)); var @class = @namespace.Children[0]; var method = SingleChild <MethodDeclarationIntermediateNode>(@class); Assert.Empty(method.Children); }
public void AddDirective_ExistingFeature_UsesFeature() { // Arrange var expected = new DefaultRazorDirectiveFeature(); var engine = RazorEngine.CreateEmpty(b => { b.Features.Add(expected); // Act b.AddDirective(DirectiveDescriptor.CreateDirective("test", DirectiveKind.SingleLine)); }); // Assert var actual = Assert.Single(engine.Features.OfType <IRazorDirectiveFeature>()); Assert.Same(expected, actual); var directive = Assert.Single(actual.Directives); Assert.Equal("test", directive.Directive); }
public void Lower_WithImports_IgnoresBlockDirective() { // Arrange var source = TestRazorSourceDocument.Create("<p>Hi!</p>"); var imports = new[] { TestRazorSourceDocument.Create("@block token { }"), }; var codeDocument = TestRazorCodeDocument.Create(source, imports); // Act var documentNode = Lower(codeDocument, b => { b.AddDirective(DirectiveDescriptor.CreateDirective("block", DirectiveKind.RazorBlock, d => d.AddMemberToken())); }); // Assert Children( documentNode, n => Html("<p>Hi!</p>", n)); }
public void Configure(RazorParserOptionsBuilder options) { options.Directives.Add(DirectiveDescriptor.CreateDirective("test", DirectiveKind.SingleLine)); }