Exemplo n.º 1
0
        public void Execute_CanInitializeDefaults()
        {
            // Arrange
            var documentNode = new DocumentIntermediateNode()
            {
                Options = RazorCodeGenerationOptions.CreateDefault(),
            };

            var builder = IntermediateNodeBuilder.Create(documentNode);

            builder.Add(new HtmlContentIntermediateNode());
            builder.Add(new CSharpCodeIntermediateNode());

            var pass = new TestDocumentClassifierPass()
            {
                Engine    = Engine,
                Namespace = "TestNamespace",
                Class     = "TestClass",
                Method    = "TestMethod",
            };

            // Act
            pass.Execute(TestRazorCodeDocument.CreateEmpty(), documentNode);

            // Assert
            var @namespace = SingleChild <NamespaceDeclarationIntermediateNode>(documentNode);

            Assert.Equal("TestNamespace", @namespace.Content);

            var @class = SingleChild <ClassDeclarationIntermediateNode>(@namespace);

            Assert.Equal("TestClass", @class.ClassName);

            var method = SingleChild <MethodDeclarationIntermediateNode>(@class);

            Assert.Equal("TestMethod", method.MethodName);
        }
        public void Execute_AddsPrimaryAnnotations()
        {
            // Arrange
            var documentNode = new DocumentIntermediateNode()
            {
                Options = RazorCodeGenerationOptions.CreateDefault(),
            };

            var builder = IntermediateNodeBuilder.Create(documentNode);

            builder.Add(new HtmlContentIntermediateNode());
            builder.Add(new CSharpCodeIntermediateNode());

            var pass = new TestDocumentClassifierPass()
            {
                Engine    = RazorEngine.CreateEmpty(b => { }),
                Namespace = "TestNamespace",
                Class     = "TestClass",
                Method    = "TestMethod",
            };

            // Act
            pass.Execute(TestRazorCodeDocument.CreateEmpty(), documentNode);

            // Assert
            var @namespace = SingleChild <NamespaceDeclarationIntermediateNode>(documentNode);

            AnnotationEquals(@namespace, CommonAnnotations.PrimaryNamespace);

            var @class = SingleChild <ClassDeclarationIntermediateNode>(@namespace);

            AnnotationEquals(@class, CommonAnnotations.PrimaryClass);

            var method = SingleChild <MethodDeclarationIntermediateNode>(@class);

            AnnotationEquals(method, CommonAnnotations.PrimaryMethod);
        }
        public void Execute_CreatesClassStructure()
        {
            // Arrange
            var documentNode = new DocumentIntermediateNode()
            {
                Options = RazorCodeGenerationOptions.CreateDefault(),
            };

            var pass = new DefaultDocumentClassifierPass();

            pass.Engine = RazorProjectEngine.Create().Engine;

            // Act
            pass.Execute(TestRazorCodeDocument.CreateEmpty(), documentNode);

            // Assert
            Assert.Equal("default", documentNode.DocumentKind);

            var @namespace = SingleChild <NamespaceDeclarationIntermediateNode>(documentNode);
            var @class     = SingleChild <ClassDeclarationIntermediateNode>(@namespace);
            var method     = SingleChild <MethodDeclarationIntermediateNode>(@class);

            NoChildren(method);
        }
Exemplo n.º 4
0
        public void Execute_ThrowsForMissingDependency_CodeTarget()
        {
            // Arrange
            var phase = new DefaultRazorCSharpLoweringPhase();

            var engine = RazorEngine.CreateEmpty(b => b.Phases.Add(phase));

            var codeDocument = TestRazorCodeDocument.CreateEmpty();

            codeDocument.SetSyntaxTree(RazorSyntaxTree.Parse(codeDocument.Source));

            var irDocument = new DocumentIntermediateNode()
            {
                DocumentKind = "test",
            };

            codeDocument.SetDocumentIntermediateNode(irDocument);

            // Act & Assert
            ExceptionAssert.Throws <InvalidOperationException>(
                () => phase.Execute(codeDocument),
                $"The document of kind 'test' does not have a '{nameof(CodeTarget)}'. " +
                $"The document classifier must set a value for '{nameof(DocumentIntermediateNode.Target)}'.");
        }