170 lines
4.9 KiB
C#
170 lines
4.9 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using Microsoft.AspNetCore.Blazor.Components;
|
|
using Microsoft.AspNetCore.Blazor.Razor;
|
|
using Microsoft.AspNetCore.Razor.Language;
|
|
using Xunit;
|
|
|
|
namespace Microsoft.AspNetCore.Blazor.Build.Test
|
|
{
|
|
public class DeclarationRazorIntegrationTest : RazorIntegrationTestBase
|
|
{
|
|
internal override RazorConfiguration Configuration => BlazorExtensionInitializer.DeclarationConfiguration;
|
|
|
|
[Fact]
|
|
public void DeclarationConfiguration_IncludesFunctions()
|
|
{
|
|
// Arrange & Act
|
|
var component = CompileToComponent(@"
|
|
@functions {
|
|
public string Value { get; set; }
|
|
}");
|
|
|
|
// Assert
|
|
var property = component.GetType().GetProperty("Value");
|
|
Assert.NotNull(property);
|
|
Assert.Same(typeof(string), property.PropertyType);
|
|
}
|
|
|
|
[Fact]
|
|
public void DeclarationConfiguration_IncludesInject()
|
|
{
|
|
// Arrange & Act
|
|
var component = CompileToComponent(@"
|
|
@inject string Value
|
|
");
|
|
|
|
// Assert
|
|
var property = component.GetType().GetProperty("Value", BindingFlags.NonPublic | BindingFlags.Instance);
|
|
Assert.NotNull(property);
|
|
Assert.Same(typeof(string), property.PropertyType);
|
|
}
|
|
|
|
[Fact]
|
|
public void DeclarationConfiguration_IncludesUsings()
|
|
{
|
|
// Arrange & Act
|
|
var component = CompileToComponent(@"
|
|
@using System.Text
|
|
@inject StringBuilder Value
|
|
");
|
|
|
|
// Assert
|
|
var property = component.GetType().GetProperty("Value", BindingFlags.NonPublic | BindingFlags.Instance);
|
|
Assert.NotNull(property);
|
|
Assert.Same(typeof(StringBuilder), property.PropertyType);
|
|
}
|
|
|
|
[Fact]
|
|
public void DeclarationConfiguration_IncludesInherits()
|
|
{
|
|
// Arrange & Act
|
|
var component = CompileToComponent($@"
|
|
@inherits {FullTypeName<BaseClass>()}
|
|
");
|
|
|
|
// Assert
|
|
Assert.Same(typeof(BaseClass), component.GetType().BaseType);
|
|
}
|
|
|
|
[Fact]
|
|
public void DeclarationConfiguration_IncludesImplements()
|
|
{
|
|
// Arrange & Act
|
|
var component = CompileToComponent($@"
|
|
@implements {FullTypeName<IDoCoolThings>()}
|
|
");
|
|
|
|
// Assert
|
|
var type = component.GetType();
|
|
Assert.Contains(typeof(IDoCoolThings), component.GetType().GetInterfaces());
|
|
}
|
|
|
|
[Fact]
|
|
public void DeclarationConfiguration_RenderMethodIsEmpty()
|
|
{
|
|
// Arrange & Act
|
|
var component = CompileToComponent(@"
|
|
<html>
|
|
@{ var message = ""hi""; }
|
|
<span class=""@(5 + 7)"">@message</span>
|
|
</html>
|
|
");
|
|
|
|
var frames = GetRenderTree(component);
|
|
|
|
// Assert
|
|
Assert.Empty(frames);
|
|
}
|
|
|
|
[Fact] // Regression test for https://github.com/aspnet/Blazor/issues/453
|
|
public void DeclarationConfiguration_FunctionsBlockHasLineMappings_MappingsApplyToError()
|
|
{
|
|
// Arrange & Act 1
|
|
var generated = CompileToCSharp(@"
|
|
@functions {
|
|
public StringBuilder Builder { get; set; }
|
|
}
|
|
");
|
|
|
|
// Assert 1
|
|
AssertSourceEquals(@"
|
|
// <auto-generated/>
|
|
#pragma warning disable 1591
|
|
#pragma warning disable 0414
|
|
#pragma warning disable 0649
|
|
#pragma warning disable 0169
|
|
|
|
namespace Test
|
|
{
|
|
#line hidden
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.AspNetCore.Blazor;
|
|
using Microsoft.AspNetCore.Blazor.Components;
|
|
public class TestComponent : Microsoft.AspNetCore.Blazor.Components.BlazorComponent
|
|
{
|
|
#pragma warning disable 1998
|
|
protected override void BuildRenderTree(Microsoft.AspNetCore.Blazor.RenderTree.RenderTreeBuilder builder)
|
|
{
|
|
}
|
|
#pragma warning restore 1998
|
|
#line 1 ""x:\dir\subdir\Test\TestComponent.cshtml""
|
|
|
|
public StringBuilder Builder { get; set; }
|
|
|
|
#line default
|
|
#line hidden
|
|
}
|
|
}
|
|
#pragma warning restore 1591
|
|
", generated);
|
|
|
|
// Act 2
|
|
var assembly = CompileToAssembly(generated, throwOnFailure: false);
|
|
|
|
// Assert 2
|
|
var diagnostic = Assert.Single(assembly.Diagnostics);
|
|
|
|
// This error should map to line 2 of the generated file, the test
|
|
// says 1 because Roslyn's line/column data structures are 0-based.
|
|
var position = diagnostic.Location.GetMappedLineSpan();
|
|
Assert.EndsWith(".cshtml", position.Path);
|
|
Assert.Equal(1, position.StartLinePosition.Line);
|
|
}
|
|
|
|
public class BaseClass : BlazorComponent
|
|
{
|
|
}
|
|
|
|
public interface IDoCoolThings
|
|
{
|
|
}
|
|
}
|
|
}
|