public void OnEndSpan_ProcessesModelSpansAndAddsDesignTimeStatement()
        {
            // Arrange
            Mock <RazorEngineHost> mockHost = new Mock <RazorEngineHost>();

            mockHost.SetupGet(h => h.NamespaceImports).Returns(new HashSet <string>());
            mockHost.SetupGet(h => h.DefaultBaseClass).Returns("System.Web.Mvc.WebViewPage");
            var generator = new MvcCSharpRazorCodeGenerator("FooClass", "Root.Namespace", "SomeSourceFile.cshtml", mockHost.Object)
            {
                DesignTimeMode = true
            };
            Span modelNameSpan = new ModelSpan(SourceLocation.Zero, "MyFooModel", "MyFooModel");

            generator.VisitStartBlock(BlockType.Statement);

            // Act
            generator.VisitSpan(modelNameSpan);

            // Assert
            Assert.AreEqual(3, generator.HelperVariablesMethod.Statements.Count);
            var statements = generator.HelperVariablesMethod.Statements.Cast <CodeSnippetStatement>().Select(s => s.Value).ToList();

            Assert.AreEqual("#pragma warning disable 219", statements[0]);
            Assert.AreEqual("MyFooModel __modelHelper = null;\r\n", statements[1]);
            Assert.AreEqual("#pragma warning restore 219", statements[2]);
        }
        public void Constructor_SetsBaseTypeForRegularPage()
        {
            // Arrange
            Mock <MvcWebPageRazorHost> mockHost = new Mock <MvcWebPageRazorHost>(
                "SomeSourceFile.cshtml",
                "SomeSourceFile.cshtml"
                )
            {
                CallBase = true
            };

            mockHost.SetupGet(h => h.NamespaceImports).Returns(new HashSet <string>());

            // Act
            var generator = new MvcCSharpRazorCodeGenerator(
                "FooClass",
                "Root.Namespace",
                "SomeSourceFile.cshtml",
                mockHost.Object
                );

            // Assert
            var baseType = Assert.IsType <CodeTypeReference>(
                Assert.Single(generator.Context.GeneratedClass.BaseTypes)
                );

            Assert.Equal("System.Web.Mvc.WebViewPage<dynamic>", baseType.BaseType);
        }
        public void Constructor_DoesNotSetBaseTypeForSpecialPage() {
            // Arrange
            Mock<MvcWebPageRazorHost> mockHost = new Mock<MvcWebPageRazorHost>("_viewStart.cshtml", "_viewStart.cshtml");
            mockHost.SetupGet(h => h.NamespaceImports).Returns(new HashSet<string>());

            // Act
            var generator = new MvcCSharpRazorCodeGenerator("FooClass", "Root.Namespace", "_viewStart.cshtml", mockHost.Object);

            // Assert
            Assert.AreEqual(0, generator.GeneratedClass.BaseTypes.Count);
        }
        public void Constructor_DoesNotSetBaseTypeForNonMvcHost() {
            // Arrange
            Mock<RazorEngineHost> mockHost = new Mock<RazorEngineHost>();
            mockHost.SetupGet(h => h.NamespaceImports).Returns(new HashSet<string>());

            // Act
            var generator = new MvcCSharpRazorCodeGenerator("FooClass", "Root.Namespace", "SomeSourceFile.cshtml", mockHost.Object);

            // Assert
            Assert.AreEqual(0, generator.GeneratedClass.BaseTypes.Count);
        }
        public void Constructor_SetsBaseTypeForRegularPage() {
            // Arrange
            Mock<MvcWebPageRazorHost> mockHost = new Mock<MvcWebPageRazorHost>("SomeSourceFile.cshtml", "SomeSourceFile.cshtml") { CallBase = true };
            mockHost.SetupGet(h => h.NamespaceImports).Returns(new HashSet<string>());

            // Act
            var generator = new MvcCSharpRazorCodeGenerator("FooClass", "Root.Namespace", "SomeSourceFile.cshtml", mockHost.Object);

            // Assert
            Assert.AreEqual(1, generator.GeneratedClass.BaseTypes.Count);
            Assert.AreEqual("System.Web.Mvc.WebViewPage<dynamic>", generator.GeneratedClass.BaseTypes[0].BaseType);
        }
        public void Constructor_DoesNotSetBaseTypeForSpecialPage()
        {
            // Arrange
            Mock <MvcWebPageRazorHost> mockHost = new Mock <MvcWebPageRazorHost>("_viewStart.cshtml", "_viewStart.cshtml");

            mockHost.SetupGet(h => h.NamespaceImports).Returns(new HashSet <string>());

            // Act
            var generator = new MvcCSharpRazorCodeGenerator("FooClass", "Root.Namespace", "_viewStart.cshtml", mockHost.Object);

            // Assert
            Assert.Equal(0, generator.Context.GeneratedClass.BaseTypes.Count);
        }
        public void Constructor_DoesNotSetBaseTypeForNonMvcHost()
        {
            // Arrange
            Mock <RazorEngineHost> mockHost = new Mock <RazorEngineHost>();

            mockHost.SetupGet(h => h.NamespaceImports).Returns(new HashSet <string>());

            // Act
            var generator = new MvcCSharpRazorCodeGenerator("FooClass", "Root.Namespace", "SomeSourceFile.cshtml", mockHost.Object);

            // Assert
            Assert.Equal(0, generator.Context.GeneratedClass.BaseTypes.Count);
        }
        public void Constructor() {
            // Arrange
            Mock<RazorEngineHost> mockHost = new Mock<RazorEngineHost>();

            // Act
            var generator = new MvcCSharpRazorCodeGenerator("FooClass", "Root.Namespace", "SomeSourceFile.cshtml", mockHost.Object);

            // Assert
            Assert.AreEqual("FooClass", generator.ClassName);
            Assert.AreEqual("Root.Namespace", generator.RootNamespaceName);
            Assert.AreEqual("SomeSourceFile.cshtml", generator.SourceFileName);
            Assert.AreSame(mockHost.Object, generator.Host);
        }
        public void Constructor()
        {
            // Arrange
            Mock <RazorEngineHost> mockHost = new Mock <RazorEngineHost>();

            // Act
            var generator = new MvcCSharpRazorCodeGenerator("FooClass", "Root.Namespace", "SomeSourceFile.cshtml", mockHost.Object);

            // Assert
            Assert.Equal("FooClass", generator.ClassName);
            Assert.Equal("Root.Namespace", generator.RootNamespaceName);
            Assert.Equal("SomeSourceFile.cshtml", generator.SourceFileName);
            Assert.Same(mockHost.Object, generator.Host);
        }
        public void OnEndSpan_ProcessesModelSpans() {
            // Arrange
            Mock<RazorEngineHost> mockHost = new Mock<RazorEngineHost>();
            mockHost.SetupGet(h => h.NamespaceImports).Returns(new HashSet<string>());
            mockHost.SetupGet(h => h.DefaultBaseClass).Returns("System.Web.Mvc.WebViewPage");
            var generator = new MvcCSharpRazorCodeGenerator("FooClass", "Root.Namespace", "SomeSourceFile.cshtml", mockHost.Object);
            Span modelSpan = new ModelSpan(SourceLocation.Zero, "MyFooModel", "MyFooModel");
            generator.VisitStartBlock(BlockType.Statement);

            // Act
            generator.VisitSpan(modelSpan);

            // Assert
            Assert.AreEqual(1, generator.GeneratedClass.BaseTypes.Count);
            var baseType = generator.GeneratedClass.BaseTypes[0];
            Assert.AreEqual("System.Web.Mvc.WebViewPage<MyFooModel>", baseType.BaseType);
            Assert.AreEqual(0, generator.GeneratedExecuteMethod.Statements.Count);
        }
        public void OnEndSpan_ProcessesModelSpans()
        {
            // Arrange
            Mock <RazorEngineHost> mockHost = new Mock <RazorEngineHost>();

            mockHost.SetupGet(h => h.NamespaceImports).Returns(new HashSet <string>());
            mockHost.SetupGet(h => h.DefaultBaseClass).Returns("System.Web.Mvc.WebViewPage");
            var  generator = new MvcCSharpRazorCodeGenerator("FooClass", "Root.Namespace", "SomeSourceFile.cshtml", mockHost.Object);
            Span modelSpan = new ModelSpan(SourceLocation.Zero, "MyFooModel", "MyFooModel");

            generator.VisitStartBlock(BlockType.Statement);

            // Act
            generator.VisitSpan(modelSpan);

            // Assert
            Assert.AreEqual(1, generator.GeneratedClass.BaseTypes.Count);
            var baseType = generator.GeneratedClass.BaseTypes[0];

            Assert.AreEqual("System.Web.Mvc.WebViewPage<MyFooModel>", baseType.BaseType);
            Assert.AreEqual(0, generator.GeneratedExecuteMethod.Statements.Count);
        }
        public void OnEndSpan_ProcessesModelSpansAndAddsDesignTimeStatement() {
            // Arrange
            Mock<RazorEngineHost> mockHost = new Mock<RazorEngineHost>();
            mockHost.SetupGet(h => h.NamespaceImports).Returns(new HashSet<string>());
            mockHost.SetupGet(h => h.DefaultBaseClass).Returns("System.Web.Mvc.WebViewPage");
            var generator = new MvcCSharpRazorCodeGenerator("FooClass", "Root.Namespace", "SomeSourceFile.cshtml", mockHost.Object) {
                DesignTimeMode = true
            };
            Span modelNameSpan = new ModelSpan(SourceLocation.Zero, "MyFooModel", "MyFooModel");
            generator.VisitStartBlock(BlockType.Statement);

            // Act
            generator.VisitSpan(modelNameSpan);

            // Assert
            Assert.AreEqual(3, generator.HelperVariablesMethod.Statements.Count);
            var statements = generator.HelperVariablesMethod.Statements.Cast<CodeSnippetStatement>().Select(s => s.Value).ToList();
            Assert.AreEqual("#pragma warning disable 219", statements[0]);
            Assert.AreEqual("MyFooModel __modelHelper = null;\r\n", statements[1]);
            Assert.AreEqual("#pragma warning restore 219", statements[2]);
        }