254 lines
8.7 KiB
C#
Raw Normal View History

// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
using System.Globalization;
using System.Web.TestUtil;
using Xunit;
using Xunit.Extensions;
namespace System.Web.WebPages.Test
{
public class StringExtensionsTest
{
[Fact]
public void IsIntTests()
{
Assert.False("1.3".IsInt());
Assert.False(".13".IsInt());
Assert.False("0.0".IsInt());
Assert.False("12345678900123456".IsInt());
Assert.False("gooblygook".IsInt());
Assert.True("0".IsInt());
Assert.True("123456".IsInt());
Assert.True(Int32.MaxValue.ToString().IsInt());
Assert.True(Int32.MinValue.ToString().IsInt());
Assert.False(((string)null).IsInt());
}
[Fact]
public void AsIntBasicTests()
{
Assert.Equal(-123, "-123".AsInt());
Assert.Equal(12345, "12345".AsInt());
Assert.Equal(0, "0".AsInt());
}
[Fact]
public void AsIntDefaultTests()
{
// Illegal values default to 0
Assert.Equal(0, "-100000000000000000000000".AsInt());
// Illegal values default to 0
Assert.Equal(0, "adlfkj".AsInt());
Assert.Equal(-1, "adlfkj".AsInt(-1));
Assert.Equal(-1, "-100000000000000000000000".AsInt(-1));
}
[Fact]
public void IsDecimalTests()
{
Assert.True("1.3".IsDecimal());
Assert.True(".13".IsDecimal());
Assert.True("0.0".IsDecimal());
Assert.True("12345678900123456".IsDecimal());
Assert.True("0".IsDecimal());
Assert.True("123456".IsDecimal());
Assert.True(decimal.MaxValue.ToString().IsDecimal());
Assert.True(decimal.MinValue.ToString().IsDecimal());
Assert.False("gooblygook".IsDecimal());
Assert.False("..0".IsDecimal());
Assert.False(((string)null).IsDecimal());
}
[Fact]
public void AsDecimalBasicTests()
{
Assert.Equal(-123m, "-123".AsDecimal());
Assert.Equal(9.99m, "9.99".AsDecimal());
Assert.Equal(0m, "0".AsDecimal());
Assert.Equal(-1.1111m, "-1.1111".AsDecimal());
}
[Fact]
public void AsDecimalDefaultTests()
{
// Illegal values default to 0
Assert.Equal(0m, "abc".AsDecimal());
Assert.Equal(-1.11m, "adlfkj".AsDecimal(-1.11m));
}
[Fact]
public void AsDecimalUsesCurrentCulture()
{
decimal value = 12345.00M;
using (new CultureReplacer("ar-DZ"))
{
Assert.Equal(value.ToString(CultureInfo.CurrentCulture), "12345.00");
Assert.Equal(value.ToString(), "12345.00");
}
using (new CultureReplacer("bg-BG"))
{
Assert.Equal(value.ToString(CultureInfo.CurrentCulture), "12345,00");
Assert.Equal(value.ToString(), "12345,00");
}
}
[Fact]
public void IsAndAsDecimalsUsesCurrentCulture()
{
// Pretty identical to the earlier test case. This was a post on the forums, making sure it works.
using (new CultureReplacer(culture: "lt-LT"))
{
Assert.False("1.2".IsDecimal());
Assert.True("1,2".IsDecimal());
Assert.Equal(1.2M, "1,2".AsDecimal());
Assert.Equal(0, "1.2".AsDecimal());
}
}
[Fact]
public void IsFloatTests()
{
Assert.True("1.3".IsFloat());
Assert.True(".13".IsFloat());
Assert.True("0.0".IsFloat());
Assert.True("12345678900123456".IsFloat());
Assert.True("0".IsFloat());
Assert.True("123456".IsFloat());
Assert.True(float.MaxValue.ToString().IsFloat());
Assert.True(float.MinValue.ToString().IsFloat());
Assert.True(float.NegativeInfinity.ToString().IsFloat());
Assert.True(float.PositiveInfinity.ToString().IsFloat());
Assert.False("gooblygook".IsFloat());
Assert.False(((string)null).IsFloat());
}
[Fact]
public void AsFloatBasicTests()
{
Assert.Equal(-123f, "-123".AsFloat());
Assert.Equal(9.99f, "9.99".AsFloat());
Assert.Equal(0f, "0".AsFloat());
Assert.Equal(-1.1111f, "-1.1111".AsFloat());
}
[Fact]
public void AsFloatDefaultTests()
{
// Illegal values default to 0
Assert.Equal(0f, "abc".AsFloat());
Assert.Equal(-1.11f, "adlfkj".AsFloat(-1.11f));
}
[Fact]
public void IsDateTimeTests()
{
using (new CultureReplacer())
{
Assert.True("Sat, 01 Nov 2008 19:35:00 GMT".IsDateTime());
Assert.True("1/5/1979".IsDateTime());
Assert.False("0".IsDateTime());
Assert.True(DateTime.MaxValue.ToString().IsDateTime());
Assert.True(DateTime.MinValue.ToString().IsDateTime());
Assert.True(new DateTime(2010, 12, 21).ToUniversalTime().ToString().IsDateTime());
Assert.False("gooblygook".IsDateTime());
Assert.False(((string)null).IsDateTime());
}
}
/// <remarks>Tests for bug 153439</remarks>
[Fact]
public void IsDateTimeUsesLocalCulture()
{
using (new CultureReplacer(culture: "en-gb"))
{
Assert.True(new DateTime(2010, 12, 21).ToString().IsDateTime());
Assert.True(new DateTime(2010, 12, 11).ToString().IsDateTime());
Assert.True("2010/01/01".IsDateTime());
Assert.True("12/01/2010".IsDateTime());
Assert.True("12/12/2010".IsDateTime());
Assert.True("13/12/2010".IsDateTime());
Assert.True("2010-12-01".IsDateTime());
Assert.True("2010-12-13".IsDateTime());
Assert.False("12/13/2010".IsDateTime());
Assert.False("13/13/2010".IsDateTime());
Assert.False("2010-13-12".IsDateTime());
}
}
[Fact]
public void AsDateTimeBasicTests()
{
using (new CultureReplacer())
{
Assert.Equal(DateTime.Parse("1/14/1979"), "1/14/1979".AsDateTime());
Assert.Equal(DateTime.Parse("Sat, 01 Nov 2008 19:35:00 GMT"), "Sat, 01 Nov 2008 19:35:00 GMT".AsDateTime());
}
}
[Theory]
[InlineData(new object[] { "en-us" })]
[InlineData(new object[] { "en-gb" })]
[InlineData(new object[] { "ug" })]
[InlineData(new object[] { "lt-LT" })]
public void AsDateTimeDefaultTests(string culture)
{
using (new CultureReplacer(culture))
{
// Illegal values default to MinTime
Assert.Equal(DateTime.MinValue, "1".AsDateTime());
DateTime defaultV = new DateTime(1979, 01, 05);
Assert.Equal(defaultV, "adlfkj".AsDateTime(defaultV));
Assert.Equal(defaultV, "Jn 69".AsDateTime(defaultV));
}
}
[Theory]
[InlineData(new object[] { "en-us" })]
[InlineData(new object[] { "en-gb" })]
[InlineData(new object[] { "lt-LT" })]
public void IsDateTimeDefaultTests(string culture)
{
using (new CultureReplacer(culture))
{
var dateTime = new DateTime(2011, 10, 25, 10, 10, 00);
Assert.True(dateTime.ToShortDateString().IsDateTime());
Assert.True(dateTime.ToString().IsDateTime());
Assert.True(dateTime.ToLongDateString().IsDateTime());
}
}
[Fact]
public void IsBoolTests()
{
Assert.True("TRUE".IsBool());
Assert.True("TRUE ".IsBool());
Assert.True("false".IsBool());
Assert.False("falsey".IsBool());
Assert.False("gooblygook".IsBool());
Assert.False("".IsBool());
Assert.False(((string)null).IsBool());
}
[Fact]
public void AsBoolTests()
{
Assert.True("TRuE".AsBool());
Assert.False("False".AsBool());
Assert.False("Die".AsBool(false));
Assert.True("true!".AsBool(true));
Assert.False("".AsBool());
Assert.False(((string)null).AsBool());
Assert.True("".AsBool(true));
Assert.True(((string)null).AsBool(true));
}
}
}