222 lines
6.6 KiB
C#
222 lines
6.6 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.Linq;
|
|
using Microsoft.AspNetCore.Razor.Language.Legacy;
|
|
using Xunit;
|
|
|
|
namespace Microsoft.AspNetCore.Razor.Language.Test.Legacy
|
|
{
|
|
public class CodeBlockEditHandlerTest
|
|
{
|
|
[Fact]
|
|
public void IsAcceptableReplacement_AcceptableReplacement_ReturnsTrue()
|
|
{
|
|
// Arrange
|
|
var span = GetSpan(SourceLocation.Zero, "Hello {world}.");
|
|
var change = new SourceChange(new SourceSpan(0, 5), "H3ll0");
|
|
|
|
// Act
|
|
var result = CodeBlockEditHandler.IsAcceptableReplacement(span, change);
|
|
|
|
// Assert
|
|
Assert.True(result);
|
|
}
|
|
|
|
[Fact]
|
|
public void IsAcceptableReplacement_ChangeModifiesInvalidContent_ReturnsFalse()
|
|
{
|
|
// Arrange
|
|
var span = GetSpan(SourceLocation.Zero, "Hello {world}.");
|
|
var change = new SourceChange(new SourceSpan(6, 1), "!");
|
|
|
|
// Act
|
|
var result = CodeBlockEditHandler.IsAcceptableReplacement(span, change);
|
|
|
|
// Assert
|
|
Assert.False(result);
|
|
}
|
|
|
|
[Fact]
|
|
public void IsAcceptableReplacement_ChangeContainsInvalidContent_ReturnsFalse()
|
|
{
|
|
// Arrange
|
|
var span = GetSpan(SourceLocation.Zero, "Hello {world}.");
|
|
var change = new SourceChange(new SourceSpan(0, 0), "{");
|
|
|
|
// Act
|
|
var result = CodeBlockEditHandler.IsAcceptableReplacement(span, change);
|
|
|
|
// Assert
|
|
Assert.False(result);
|
|
}
|
|
|
|
[Fact]
|
|
public void IsAcceptableReplacement_NotReplace_ReturnsFalse()
|
|
{
|
|
// Arrange
|
|
var span = GetSpan(SourceLocation.Zero, "Hello {world}.");
|
|
var change = new SourceChange(new SourceSpan(0, 5), string.Empty);
|
|
|
|
// Act
|
|
var result = CodeBlockEditHandler.IsAcceptableReplacement(span, change);
|
|
|
|
// Assert
|
|
Assert.False(result);
|
|
}
|
|
|
|
[Fact]
|
|
public void IsAcceptableDeletion_ValidChange_ReturnsTrue()
|
|
{
|
|
// Arrange
|
|
var span = GetSpan(SourceLocation.Zero, "Hello {world}.");
|
|
var change = new SourceChange(new SourceSpan(0, 5), string.Empty);
|
|
|
|
// Act
|
|
var result = CodeBlockEditHandler.IsAcceptableDeletion(span, change);
|
|
|
|
// Assert
|
|
Assert.True(result);
|
|
}
|
|
|
|
[Fact]
|
|
public void IsAcceptableDeletion_InvalidChange_ReturnsFalse()
|
|
{
|
|
// Arrange
|
|
var span = GetSpan(SourceLocation.Zero, "Hello {world}.");
|
|
var change = new SourceChange(new SourceSpan(5, 3), string.Empty);
|
|
|
|
// Act
|
|
var result = CodeBlockEditHandler.IsAcceptableDeletion(span, change);
|
|
|
|
// Assert
|
|
Assert.False(result);
|
|
}
|
|
|
|
[Fact]
|
|
public void IsAcceptableDeletion_NotDelete_ReturnsFalse()
|
|
{
|
|
// Arrange
|
|
var span = GetSpan(SourceLocation.Zero, "world");
|
|
var change = new SourceChange(new SourceSpan(0, 0), "hello");
|
|
|
|
// Act
|
|
var result = CodeBlockEditHandler.IsAcceptableDeletion(span, change);
|
|
|
|
// Assert
|
|
Assert.False(result);
|
|
}
|
|
|
|
[Fact]
|
|
public void ModifiesInvalidContent_ValidContent_ReturnsFalse()
|
|
{
|
|
// Arrange
|
|
var span = GetSpan(SourceLocation.Zero, "Hello {world}.");
|
|
var change = new SourceChange(new SourceSpan(0, 5), string.Empty);
|
|
|
|
// Act
|
|
var result = CodeBlockEditHandler.ModifiesInvalidContent(span, change);
|
|
|
|
// Assert
|
|
Assert.False(result);
|
|
}
|
|
|
|
[Fact]
|
|
public void ModifiesInvalidContent_InvalidContent_ReturnsTrue()
|
|
{
|
|
// Arrange
|
|
var span = GetSpan(SourceLocation.Zero, "Hello {world}.");
|
|
var change = new SourceChange(new SourceSpan(5, 7), string.Empty);
|
|
|
|
// Act
|
|
var result = CodeBlockEditHandler.ModifiesInvalidContent(span, change);
|
|
|
|
// Assert
|
|
Assert.True(result);
|
|
}
|
|
|
|
[Fact]
|
|
public void IsAcceptableInsertion_ValidChange_ReturnsTrue()
|
|
{
|
|
// Arrange
|
|
var change = new SourceChange(new SourceSpan(0, 0), "hello");
|
|
|
|
// Act
|
|
var result = CodeBlockEditHandler.IsAcceptableInsertion(change);
|
|
|
|
// Assert
|
|
Assert.True(result);
|
|
}
|
|
|
|
[Fact]
|
|
public void IsAcceptableInsertion_InvalidChange_ReturnsFalse()
|
|
{
|
|
// Arrange
|
|
var change = new SourceChange(new SourceSpan(0, 0), "{");
|
|
|
|
// Act
|
|
var result = CodeBlockEditHandler.IsAcceptableInsertion(change);
|
|
|
|
// Assert
|
|
Assert.False(result);
|
|
}
|
|
|
|
[Fact]
|
|
public void IsAcceptableInsertion_NotInsert_ReturnsFalse()
|
|
{
|
|
// Arrange
|
|
var change = new SourceChange(new SourceSpan(0, 2), string.Empty);
|
|
|
|
// Act
|
|
var result = CodeBlockEditHandler.IsAcceptableInsertion(change);
|
|
|
|
// Assert
|
|
Assert.False(result);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("{")]
|
|
[InlineData("}")]
|
|
[InlineData("if (true) { }")]
|
|
public void ContainsInvalidContent_InvalidContent_ReturnsTrue(string content)
|
|
{
|
|
// Arrange
|
|
var change = new SourceChange(new SourceSpan(0, 0), content);
|
|
|
|
// Act
|
|
var result = CodeBlockEditHandler.ContainsInvalidContent(change);
|
|
|
|
// Assert
|
|
Assert.True(result);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("var x = true;")]
|
|
[InlineData("if (true) Console.WriteLine('!')")]
|
|
public void ContainsInvalidContent_ValidContent_ReturnsFalse(string content)
|
|
{
|
|
// Arrange
|
|
var change = new SourceChange(new SourceSpan(0, 0), content);
|
|
|
|
// Act
|
|
var result = CodeBlockEditHandler.ContainsInvalidContent(change);
|
|
|
|
// Assert
|
|
Assert.False(result);
|
|
}
|
|
|
|
private static Span GetSpan(SourceLocation start, string content)
|
|
{
|
|
var spanBuilder = new SpanBuilder(start);
|
|
var tokens = CSharpLanguageCharacteristics.Instance.TokenizeString(content).ToArray();
|
|
foreach (var token in tokens)
|
|
{
|
|
spanBuilder.Accept(token);
|
|
}
|
|
var span = spanBuilder.Build();
|
|
|
|
return span;
|
|
}
|
|
}
|
|
}
|