This commit is contained in:
Drew Tingen
2017-11-17 13:52:09 -05:00
5 changed files with 199 additions and 49 deletions

View File

@@ -7,6 +7,12 @@ namespace ICD.Common.Utils.Tests.Extensions
{ {
[Test] [Test]
public void GetPathTest() public void GetPathTest()
{
Assert.Inconclusive();
}
[Test]
public void GetCreationTimeTest()
{ {
Assert.Inconclusive(); Assert.Inconclusive();
} }

View File

@@ -8,11 +8,62 @@ namespace ICD.Common.Utils.Tests.Extensions
[TestFixture] [TestFixture]
public sealed class TypeExtensionsTest public sealed class TypeExtensionsTest
{ {
[Test] [TestCase(typeof(byte), true)]
public void IsAssignableToTest() [TestCase(typeof(decimal), true)]
[TestCase(typeof(double), true)]
[TestCase(typeof(float), true)]
[TestCase(typeof(int), true)]
[TestCase(typeof(long), true)]
[TestCase(typeof(sbyte), true)]
[TestCase(typeof(short), true)]
[TestCase(typeof(uint), true)]
[TestCase(typeof(ulong), true)]
[TestCase(typeof(ushort), true)]
[TestCase(typeof(string), false)]
public void IsNumericTest(Type value, bool expected)
{ {
Assert.IsTrue(typeof(string).IsAssignableTo(typeof(object))); Assert.AreEqual(expected, value.IsNumeric());
Assert.IsFalse(typeof(object).IsAssignableTo(typeof(string))); }
[TestCase(typeof(byte), false)]
[TestCase(typeof(decimal), true)]
[TestCase(typeof(double), true)]
[TestCase(typeof(float), true)]
[TestCase(typeof(int), true)]
[TestCase(typeof(long), true)]
[TestCase(typeof(sbyte), true)]
[TestCase(typeof(short), true)]
[TestCase(typeof(uint), false)]
[TestCase(typeof(ulong), false)]
[TestCase(typeof(ushort), false)]
[TestCase(typeof(string), false)]
public void IsSignedNumericTest(Type value, bool expected)
{
Assert.AreEqual(expected, value.IsSignedNumeric());
}
[TestCase(typeof(byte), false)]
[TestCase(typeof(decimal), true)]
[TestCase(typeof(double), true)]
[TestCase(typeof(float), true)]
[TestCase(typeof(int), false)]
[TestCase(typeof(long), false)]
[TestCase(typeof(sbyte), false)]
[TestCase(typeof(short), false)]
[TestCase(typeof(uint), false)]
[TestCase(typeof(ulong), false)]
[TestCase(typeof(ushort), false)]
[TestCase(typeof(string), false)]
public void IsDecimalNumericTest(Type value, bool expected)
{
Assert.AreEqual(expected, value.IsDecimalNumeric());
}
[TestCase(typeof(string), typeof(object), true)]
[TestCase(typeof(object), typeof(string), false)]
public void IsAssignableToTest(Type a, Type b, bool expected)
{
Assert.AreEqual(expected, a.IsAssignableTo(b));
} }
[Test] [Test]

View File

@@ -20,7 +20,7 @@ namespace ICD.Common.Utils.Extensions
public static string GetPath(this Assembly extends) public static string GetPath(this Assembly extends)
{ {
if (extends == null) if (extends == null)
throw new ArgumentNullException(); throw new ArgumentNullException("extends");
string path = extends string path = extends
#if SIMPLSHARP #if SIMPLSHARP
@@ -43,5 +43,19 @@ namespace ICD.Common.Utils.Extensions
return IcdFile.Exists(path) ? path : null; return IcdFile.Exists(path) ? path : null;
} }
/// <summary>
/// Gets the creation date of the given assembly.
/// </summary>
/// <param name="extends"></param>
/// <returns></returns>
public static DateTime GetCreationTime(this Assembly extends)
{
if (extends == null)
throw new ArgumentNullException("extends");
string path = extends.GetPath();
return path == null ? DateTime.MinValue : IcdFile.GetCreationTime(path);
}
} }
} }

View File

@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using ICD.Common.Utils.Collections;
#if SIMPLSHARP #if SIMPLSHARP
using Crestron.SimplSharp.Reflection; using Crestron.SimplSharp.Reflection;
#else #else
@@ -10,6 +11,78 @@ namespace ICD.Common.Utils.Extensions
{ {
public static class TypeExtensions public static class TypeExtensions
{ {
private static readonly IcdHashSet<Type> s_NumericTypes = new IcdHashSet<Type>
{
typeof(byte),
typeof(decimal),
typeof(double),
typeof(float),
typeof(int),
typeof(long),
typeof(sbyte),
typeof(short),
typeof(uint),
typeof(ulong),
typeof(ushort)
};
private static readonly IcdHashSet<Type> s_SignedNumericTypes = new IcdHashSet<Type>
{
typeof(decimal),
typeof(double),
typeof(float),
typeof(int),
typeof(long),
typeof(sbyte),
typeof(short),
};
private static readonly IcdHashSet<Type> s_DecimalNumericTypes = new IcdHashSet<Type>
{
typeof(decimal),
typeof(double),
typeof(float),
};
/// <summary>
/// Returns true if the given type is a numeric type.
/// </summary>
/// <param name="extends"></param>
/// <returns></returns>
public static bool IsNumeric(this Type extends)
{
if (extends == null)
throw new ArgumentException("extends");
return s_NumericTypes.Contains(extends);
}
/// <summary>
/// Returns true if the given type is a signed numeric type.
/// </summary>
/// <param name="extends"></param>
/// <returns></returns>
public static bool IsSignedNumeric(this Type extends)
{
if (extends == null)
throw new ArgumentException("extends");
return s_SignedNumericTypes.Contains(extends);
}
/// <summary>
/// Returns true if the given type is a non-integer numeric type.
/// </summary>
/// <param name="extends"></param>
/// <returns></returns>
public static bool IsDecimalNumeric(this Type extends)
{
if (extends == null)
throw new ArgumentException("extends");
return s_DecimalNumericTypes.Contains(extends);
}
public static Assembly GetAssembly(this Type extends) public static Assembly GetAssembly(this Type extends)
{ {
if (extends == null) if (extends == null)

View File

@@ -77,5 +77,11 @@ namespace ICD.Common.Utils.IO
{ {
return new IcdFileStream(File.Open(path, mode)); return new IcdFileStream(File.Open(path, mode));
} }
[PublicAPI]
public static DateTime GetCreationTime(string path)
{
return File.GetCreationTime(path);
}
} }
} }