Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

209 lines
6.6 KiB
C#

// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
using System.Collections.Generic;
using System.Linq;
using Xunit;
using Xunit.Extensions;
using Assert = Microsoft.TestCommon.AssertEx;
namespace System.Web
{
[CLSCompliant(false)]
public class PrefixContainerTests
{
[Fact]
public void Constructor_GuardClauses()
{
// Act & assert
Assert.ThrowsArgumentNull(() => new PrefixContainer(null), "values");
}
[Fact]
public void ContainsPrefix_GuardClauses()
{
// Arrange
var container = new PrefixContainer(new string[0]);
// Act & assert
Assert.ThrowsArgumentNull(() => container.ContainsPrefix(null), "prefix");
}
[Fact]
public void ContainsPrefix_EmptyCollectionReturnsFalse()
{
// Arrange
var container = new PrefixContainer(new string[0]);
// Act & Assert
Assert.False(container.ContainsPrefix(""));
}
[Fact]
public void ContainsPrefix_ExactMatch()
{
// Arrange
var container = new PrefixContainer(new[] { "Hello" });
// Act & Assert
Assert.True(container.ContainsPrefix("Hello"));
}
[Fact]
public void ContainsPrefix_MatchIsCaseInsensitive()
{
// Arrange
var container = new PrefixContainer(new[] { "Hello" });
// Act & Assert
Assert.True(container.ContainsPrefix("hello"));
}
[Fact]
public void ContainsPrefix_MatchIsNotSimpleSubstringMatch()
{
// Arrange
var container = new PrefixContainer(new[] { "Hello" });
// Act & Assert
Assert.False(container.ContainsPrefix("He"));
}
[Fact]
public void ContainsPrefix_NonEmptyCollectionReturnsTrueIfPrefixIsEmptyString()
{
// Arrange
var container = new PrefixContainer(new[] { "Hello" });
// Act & Assert
Assert.True(container.ContainsPrefix(""));
}
[Fact]
public void ContainsPrefix_PrefixBoundaries()
{
// Arrange
var container = new PrefixContainer(new[] { "Hello.There[0]" });
// Act & Assert
Assert.True(container.ContainsPrefix("hello"));
Assert.True(container.ContainsPrefix("hello.there"));
Assert.True(container.ContainsPrefix("hello.there[0]"));
Assert.False(container.ContainsPrefix("hello.there.0"));
}
[Theory]
[InlineData("a")]
[InlineData("a[d]")]
[InlineData("c.b")]
[InlineData("c.b.a")]
public void ContainsPrefix_PositiveTests(string testValue)
{
// Arrange
var container = new PrefixContainer(new[] { "a.b", "c.b.a", "a[d]", "a.c" });
// Act & Assert
Assert.True(container.ContainsPrefix(testValue));
}
[Theory]
[InlineData("a.d")]
[InlineData("b")]
[InlineData("c.a")]
[InlineData("c.b.a.a")]
public void ContainsPrefix_NegativeTests(string testValue)
{
// Arrange
var container = new PrefixContainer(new[] { "a.b", "c.b.a", "a[d]", "a.c" });
// Act & Assert
Assert.False(container.ContainsPrefix(testValue));
}
[Fact]
public void GetKeysFromPrefix_DotsNotation()
{
// Arrange
var container = new PrefixContainer(new[] { "foo.bar.baz", "something.other", "foo.baz", "foot.hello", "fo.nothing", "foo" });
string prefix = "foo";
// Act
IDictionary<string, string> result = container.GetKeysFromPrefix(prefix);
// Assert
Assert.Equal(2, result.Count());
Assert.True(result.ContainsKey("bar"));
Assert.True(result.ContainsKey("baz"));
Assert.Equal("foo.bar", result["bar"]);
Assert.Equal("foo.baz", result["baz"]);
}
[Fact]
public void GetKeysFromPrefix_BracketsNotation()
{
// Arrange
var container = new PrefixContainer(new[] { "foo[bar]baz", "something[other]", "foo[baz]", "foot[hello]", "fo[nothing]", "foo" });
string prefix = "foo";
// Act
IDictionary<string, string> result = container.GetKeysFromPrefix(prefix);
// Assert
Assert.Equal(2, result.Count());
Assert.True(result.ContainsKey("bar"));
Assert.True(result.ContainsKey("baz"));
Assert.Equal("foo[bar]", result["bar"]);
Assert.Equal("foo[baz]", result["baz"]);
}
[Fact]
public void GetKeysFromPrefix_MixedDotsAndBrackets()
{
// Arrange
var container = new PrefixContainer(new[] { "foo[bar]baz", "something[other]", "foo.baz", "foot[hello]", "fo[nothing]", "foo" });
string prefix = "foo";
// Act
IDictionary<string, string> result = container.GetKeysFromPrefix(prefix);
// Assert
Assert.Equal(2, result.Count());
Assert.True(result.ContainsKey("bar"));
Assert.True(result.ContainsKey("baz"));
Assert.Equal("foo[bar]", result["bar"]);
Assert.Equal("foo.baz", result["baz"]);
}
[Fact]
public void GetKeysFromPrefix_AllValues()
{
// Arrange
var container = new PrefixContainer(new[] { "foo[bar]baz", "something[other]", "foo.baz", "foot[hello]", "fo[nothing]", "foo" });
string prefix = "";
// Act
IDictionary<string, string> result = container.GetKeysFromPrefix(prefix);
// Assert
Assert.Equal(4, result.Count());
Assert.Equal("foo", result["foo"]);
Assert.Equal("something", result["something"]);
Assert.Equal("foot", result["foot"]);
Assert.Equal("fo", result["fo"]);
}
[Fact]
public void GetKeysFromPrefix_PrefixNotFound()
{
// Arrange
var container = new PrefixContainer(new[] { "foo[bar]", "something[other]", "foo.baz", "foot[hello]", "fo[nothing]", "foo" });
string prefix = "notfound";
// Act
IDictionary<string, string> result = container.GetKeysFromPrefix(prefix);
// Assert
Assert.Empty(result);
}
}
}