public void WriteDocument_SHA256_WritesChecksumAndMarksAutoGenerated() { // Arrange var checksumBytes = new byte[] { (byte)'t', (byte)'e', (byte)'s', (byte)'t', }; var sourceDocument = Mock.Of <RazorSourceDocument>(d => d.FilePath == "test.cshtml" && d.GetChecksum() == checksumBytes && d.GetChecksumAlgorithm() == "SHA256"); var document = new DocumentIntermediateNode(); var codeDocument = RazorCodeDocument.Create(sourceDocument); var options = RazorCodeGenerationOptions.CreateDefault(); var target = CodeTarget.CreateDefault(codeDocument, options); var writer = new DefaultDocumentWriter(target, options); // Act var result = writer.WriteDocument(codeDocument, document); // Assert var csharp = result.GeneratedCode; Assert.Equal( @"#pragma checksum ""test.cshtml"" ""{8829d00f-11b8-4213-878b-770e8597ac16}"" ""74657374"" // <auto-generated/> #pragma warning disable 1591 #pragma warning restore 1591 ", csharp, ignoreLineEndingDifferences: true); }
public void Execute_CollatesIRDocumentDiagnosticsFromSourceDocument() { // Arrange var phase = new DefaultRazorCSharpLoweringPhase(); var engine = RazorEngine.CreateEmpty(b => b.Phases.Add(phase)); var codeDocument = TestRazorCodeDocument.Create("<p class=@("); var options = RazorCodeGenerationOptions.CreateDefault(); var irDocument = new DocumentIntermediateNode() { DocumentKind = "test", Target = CodeTarget.CreateDefault(codeDocument, options), Options = options, }; var expectedDiagnostic = RazorDiagnostic.Create( new RazorDiagnosticDescriptor("1234", () => "I am an error.", RazorDiagnosticSeverity.Error), new SourceSpan("SomeFile.cshtml", 11, 0, 11, 1)); irDocument.Diagnostics.Add(expectedDiagnostic); codeDocument.SetDocumentIntermediateNode(irDocument); // Act phase.Execute(codeDocument); // Assert var csharpDocument = codeDocument.GetCSharpDocument(); var diagnostic = Assert.Single(csharpDocument.Diagnostics); Assert.Same(expectedDiagnostic, diagnostic); }
[Fact] // This test covers the whole process including actual hashing. public void WriteDocument_EndToEnd_WritesChecksumAndMarksAutoGenerated() { // Arrange var document = new DocumentIntermediateNode(); var codeDocument = TestRazorCodeDocument.CreateEmpty(); var options = RazorCodeGenerationOptions.CreateDefault(); var target = CodeTarget.CreateDefault(codeDocument, options); var writer = new DefaultDocumentWriter(target, options); // Act var result = writer.WriteDocument(codeDocument, document); // Assert var csharp = result.GeneratedCode; Assert.Equal( @"#pragma checksum ""test.cshtml"" ""{ff1816ec-aa5e-4d10-87f7-6f4963833460}"" ""da39a3ee5e6b4b0d3255bfef95601890afd80709"" // <auto-generated/> #pragma warning disable 1591 #pragma warning restore 1591 ", csharp, ignoreLineEndingDifferences: true); }
public void WriteDocument_Empty_SuppressChecksumTrue_DoesnotWriteChecksum() { // Arrange var document = new DocumentIntermediateNode(); var codeDocument = TestRazorCodeDocument.CreateEmpty(); var optionsBuilder = new DefaultRazorCodeGenerationOptionsBuilder(designTime: false) { SuppressChecksum = true }; var options = optionsBuilder.Build(); var target = CodeTarget.CreateDefault(codeDocument, options); var writer = new DefaultDocumentWriter(target, options); // Act var result = writer.WriteDocument(codeDocument, document); // Assert var csharp = result.GeneratedCode; Assert.Equal( @"// <auto-generated/> #pragma warning disable 1591 #pragma warning restore 1591 ", csharp, ignoreLineEndingDifferences: true); }
public void WriteDocument_UnsupportedChecksumAlgorithm_Throws() { // Arrange var checksumBytes = new byte[] { (byte)'t', (byte)'e', (byte)'s', (byte)'t', }; var sourceDocument = Mock.Of <RazorSourceDocument>(d => d.FilePath == "test.cshtml" && d.GetChecksum() == checksumBytes && d.GetChecksumAlgorithm() == "SHA3"); var document = new DocumentIntermediateNode(); var codeDocument = RazorCodeDocument.Create(sourceDocument); var options = RazorCodeGenerationOptions.CreateDefault(); var target = CodeTarget.CreateDefault(codeDocument, options); var writer = new DefaultDocumentWriter(target, options); // Act & Assert var exception = Assert.Throws <InvalidOperationException>(() => { var result = writer.WriteDocument(codeDocument, document); }); Assert.Equal( "The hash algorithm 'SHA3' is not supported for checksum generation. Supported algorithms are: 'SHA1 SHA256'. " + "Set 'RazorCodeGenerationOptions.SuppressChecksum' to 'True' to suppress automatic checksum generation.", exception.Message); }
public void WriteDocument_WritesClass_ConstrainedGenericTypeParameters() { // Arrange var document = new DocumentIntermediateNode(); var builder = IntermediateNodeBuilder.Create(document); builder.Add(new ClassDeclarationIntermediateNode() { Modifiers = { "internal" }, BaseType = "TestBase", Interfaces = new List <string> { "IFoo", "IBar", }, TypeParameters = new List <TypeParameter> { new TypeParameter() { ParameterName = "TKey", Constraints = "where TKey : class" }, new TypeParameter() { ParameterName = "TValue", Constraints = "where TValue : class" }, }, ClassName = "TestClass", }); var codeDocument = TestRazorCodeDocument.CreateEmpty(); var options = RazorCodeGenerationOptions.CreateDefault(); var target = CodeTarget.CreateDefault(codeDocument, options); var writer = new DefaultDocumentWriter(target, options); // Act var result = writer.WriteDocument(codeDocument, document); // Assert var csharp = result.GeneratedCode; Assert.Equal( @"#pragma checksum ""test.cshtml"" ""{ff1816ec-aa5e-4d10-87f7-6f4963833460}"" ""da39a3ee5e6b4b0d3255bfef95601890afd80709"" // <auto-generated/> #pragma warning disable 1591 internal class TestClass<TKey, TValue> : TestBase, IFoo, IBar where TKey : class where TValue : class { } #pragma warning restore 1591 ", csharp, ignoreLineEndingDifferences: true); }
public void CreateEmpty_AllowsNullDelegate() { // Arrange var codeDocument = TestRazorCodeDocument.CreateEmpty(); var options = RazorCodeGenerationOptions.CreateDefault(); // Act CodeTarget.CreateDefault(codeDocument, options, configure: null); // Assert (does not throw) }
// virtual to allow replacing the code target wholesale. protected virtual CodeTarget CreateTarget(RazorCodeDocument codeDocument, RazorCodeGenerationOptions options) { return(CodeTarget.CreateDefault(codeDocument, options, (builder) => { for (var i = 0; i < TargetExtensions.Count; i++) { builder.TargetExtensions.Add(TargetExtensions[i]); } ConfigureTarget(builder); })); }
private CodeTarget CreateTarget(RazorCodeDocument codeDocument, RazorCodeGenerationOptions options) { return(CodeTarget.CreateDefault(codeDocument, options, (builder) => { for (var i = 0; i < _targetExtensions.Length; i++) { builder.TargetExtensions.Add(_targetExtensions[i]); } ConfigureTarget(builder); })); }
public void CreateDefault_CreatesDefaultCodeTarget() { // Arrange var codeDocument = TestRazorCodeDocument.CreateEmpty(); var options = RazorCodeGenerationOptions.CreateDefault(); // Act var target = CodeTarget.CreateDefault(codeDocument, options); // Assert Assert.IsType <DefaultCodeTarget>(target); }
public void CreateDefault_CallsDelegate() { // Arrange var wasCalled = false; Action <CodeTargetBuilder> @delegate = (b) => { wasCalled = true; }; var codeDocument = TestRazorCodeDocument.CreateEmpty(); var options = RazorCodeGenerationOptions.CreateDefault(); // Act CodeTarget.CreateDefault(codeDocument, options, @delegate); // Assert Assert.True(wasCalled); }
public void WriteDocument_WritesProperty() { // Arrange var document = new DocumentIntermediateNode(); var builder = IntermediateNodeBuilder.Create(document); builder.Add(new PropertyDeclarationIntermediateNode() { Modifiers = { "internal", "virtual", }, PropertyName = "Foo", PropertyType = "string", }); var codeDocument = TestRazorCodeDocument.CreateEmpty(); var options = RazorCodeGenerationOptions.CreateDefault(); var target = CodeTarget.CreateDefault(codeDocument, options); var writer = new DefaultDocumentWriter(target, options); // Act var result = writer.WriteDocument(codeDocument, document); // Assert var csharp = result.GeneratedCode; Assert.Equal( @"#pragma checksum ""test.cshtml"" ""{ff1816ec-aa5e-4d10-87f7-6f4963833460}"" ""da39a3ee5e6b4b0d3255bfef95601890afd80709"" // <auto-generated/> #pragma warning disable 1591 internal virtual string Foo { get; set; } #pragma warning restore 1591 ", csharp, ignoreLineEndingDifferences: true); }
public void WriteDocument_WritesNamespace() { // Arrange var document = new DocumentIntermediateNode(); var builder = IntermediateNodeBuilder.Create(document); builder.Add(new NamespaceDeclarationIntermediateNode() { Content = "TestNamespace", }); var codeDocument = TestRazorCodeDocument.CreateEmpty(); var options = RazorCodeGenerationOptions.CreateDefault(); var target = CodeTarget.CreateDefault(codeDocument, options); var writer = new DefaultDocumentWriter(target, options); // Act var result = writer.WriteDocument(codeDocument, document); // Assert var csharp = result.GeneratedCode; Assert.Equal( @"#pragma checksum ""test.cshtml"" ""{ff1816ec-aa5e-4d10-87f7-6f4963833460}"" ""da39a3ee5e6b4b0d3255bfef95601890afd80709"" // <auto-generated/> #pragma warning disable 1591 namespace TestNamespace { #line hidden } #pragma warning restore 1591 ", csharp, ignoreLineEndingDifferences: true); }
public void WriteDocument_WritesMethod() { // Arrange var document = new DocumentIntermediateNode(); var builder = IntermediateNodeBuilder.Create(document); builder.Add(new MethodDeclarationIntermediateNode() { Modifiers = { "internal", "virtual", "async", }, MethodName = "TestMethod", Parameters = { new MethodParameter() { Modifiers = { "readonly", "ref", }, ParameterName = "a", TypeName = "int", }, new MethodParameter() { ParameterName = "b", TypeName = "string", } }, ReturnType = "string", }); var codeDocument = TestRazorCodeDocument.CreateEmpty(); var options = RazorCodeGenerationOptions.CreateDefault(); var target = CodeTarget.CreateDefault(codeDocument, options); var writer = new DefaultDocumentWriter(target, options); // Act var result = writer.WriteDocument(codeDocument, document); // Assert var csharp = result.GeneratedCode; Assert.Equal( @"#pragma checksum ""test.cshtml"" ""{ff1816ec-aa5e-4d10-87f7-6f4963833460}"" ""da39a3ee5e6b4b0d3255bfef95601890afd80709"" // <auto-generated/> #pragma warning disable 1591 #pragma warning disable 1998 internal virtual async string TestMethod(readonly ref int a, string b) { } #pragma warning restore 1998 #pragma warning restore 1591 ", csharp, ignoreLineEndingDifferences: true); }