diff UnitTests/CS/Common/ConvertTest.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UnitTests/CS/Common/ConvertTest.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,237 @@
+using System;
+#if ORACLE
+using Oracle.DataAccess.Types;
+#endif
+using System.Reflection;
+using BLToolkit.Common;
+using BLToolkit.Reflection;
+
+using NUnit.Framework;
+
+using Convert = BLToolkit.Common.Convert;
+
+namespace Common
+{
+	[TestFixture]
+	public class ConvertTest
+	{
+		[Test]
+		public void StringTest()
+		{
+			string testStr = "123";
+
+			Assert.AreEqual(123, Convert.ToSByte(testStr));
+			Assert.AreEqual(123, Convert.ToInt16(testStr));
+			Assert.AreEqual(123, Convert.ToInt32(testStr));
+			Assert.AreEqual(123, Convert.ToInt64(testStr));
+
+			Assert.AreEqual(123, Convert.ToByte(testStr));
+			Assert.AreEqual(123, Convert.ToUInt16(testStr));
+			Assert.AreEqual(123, Convert.ToUInt32(testStr));
+			Assert.AreEqual(123, Convert.ToUInt64(testStr));
+
+			Assert.AreEqual(123.0m, Convert.ToDecimal(testStr));
+			Assert.AreEqual(123.0f, Convert.ToSingle(testStr));
+			Assert.AreEqual(123.0,  Convert.ToDouble(testStr));
+
+			string zeroStr = "0";
+
+			Assert.AreEqual(0, Convert.ToSByte((string)null));
+			Assert.AreEqual(0, Convert.ToSByte(zeroStr));
+			Assert.AreEqual(0, Convert.ToInt16(zeroStr));
+			Assert.AreEqual(0, Convert.ToInt32(zeroStr));
+			Assert.AreEqual(0, Convert.ToInt64(zeroStr));
+
+			Assert.AreEqual(0, Convert.ToByte(zeroStr));
+			Assert.AreEqual(0, Convert.ToUInt16(zeroStr));
+			Assert.AreEqual(0, Convert.ToUInt32(zeroStr));
+			Assert.AreEqual(0, Convert.ToUInt64(zeroStr));
+
+			Assert.AreEqual(0.0m, Convert.ToDecimal(zeroStr));
+			Assert.AreEqual(0.0f, Convert.ToSingle(zeroStr));
+			Assert.AreEqual(0.0,  Convert.ToDouble(zeroStr));
+
+			Assert.IsTrue(Convert.ToBoolean("True"));
+			Assert.IsTrue(Convert.ToBoolean("true"));
+
+			Assert.IsFalse(Convert.ToBoolean("false"));
+			Assert.IsFalse(Convert.ToBoolean("FALSE"));
+			Assert.IsFalse(Convert.ToBoolean((string)null));
+
+			Assert.AreEqual('T', Convert.ToChar("T"));
+			Assert.AreEqual(0, Convert.ToChar((string)null));
+
+			Assert.AreEqual(DateTime.Today, Convert.ToDateTime(DateTime.Today.ToString()));
+			Assert.AreEqual(DateTime.MinValue, Convert.ToDateTime((string)null));
+
+			Assert.AreEqual(TimeSpan.FromDays(123.0), Convert.ToTimeSpan("123"));
+			Assert.AreEqual(TimeSpan.MinValue, Convert.ToTimeSpan((string)null));
+
+			Assert.AreEqual(typeof(int).GUID, Convert.ToGuid(typeof(int).GUID.ToString()));
+			Assert.AreEqual(Guid.Empty, Convert.ToGuid((string)null));
+
+			Assert.AreEqual(typeof(int), Convert.ToType("System.Int32, mscorlib"));
+			Assert.IsNull(Convert.ToType((string)null));
+		}
+
+		private static readonly Type[] NumericTypes =
+		{
+            typeof(SByte),
+            typeof(Byte),
+            typeof(Int16),
+            typeof(UInt16),
+            typeof(Int32),
+            typeof(UInt32),
+            typeof(Int64),
+            typeof(UInt64),
+            typeof(Single),
+            typeof(Double),
+            typeof(Decimal),
+        };
+
+		private const BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Static;
+
+		[Test]
+		public void NumericTest()
+		{
+			TypeHelper helper = new TypeHelper(typeof(Convert));
+			IConvertible src  = 123;
+
+			// All types from SByte to Decimal can convert to each other
+			//
+			for (int from = 0; from < NumericTypes.Length; ++from)
+			{
+				Type typeFrom = NumericTypes[from];
+				object   test = src.ToType(typeFrom, null);
+
+				for (int to = 0; to < NumericTypes.Length; ++to)
+				{
+					if (from == to)
+						continue;
+
+					Type   typeTo = NumericTypes[to];
+					MethodInfo mi = helper.GetMethod("To" + typeTo.Name, bindingFlags, typeFrom);
+
+					Assert.IsNotNull(mi, string.Format("Missed To{0}({1})", typeTo.Name, typeFrom.Name));
+					Assert.AreEqual(123, mi.Invoke(null, new object[] { test }));
+				}
+			}
+		}
+
+		[Test]
+		public void DateTimeTest()
+		{
+			Assert.AreEqual(DateTime.MinValue + TimeSpan.FromDays(1), Convert.ToDateTime(1.0));
+			Assert.AreEqual(TimeSpan.FromDays(1), Convert.ToTimeSpan(1.0));
+
+			Assert.AreEqual(DateTime.MinValue + TimeSpan.FromTicks(1), Convert.ToDateTime(1L));
+			Assert.AreEqual(TimeSpan.FromTicks(1), Convert.ToTimeSpan(1L));
+		}
+
+		[Test]
+		public void InterfaceTest()
+		{
+			Assert.AreEqual(123, ConvertTo<IConvertible>.From(123).ToByte(null));
+		}
+
+		[Test]
+		public void EnumTest()
+		{
+			// Enum-to-enum.
+			//
+			Assert.AreEqual(BindingFlags.DeclaredOnly,
+				ConvertTo<BindingFlags>.From(CallingConventions.VarArgs));
+
+			// Enum-to-nullable byte.
+			//
+			Assert.AreEqual((byte?)BindingFlags.DeclaredOnly,
+				ConvertTo<byte?>.From(BindingFlags.DeclaredOnly));
+
+			// Nullable Enum-to-nullable enum.
+			//
+			Assert.AreEqual((CallingConventions?)CallingConventions.VarArgs,
+				ConvertTo<CallingConventions?>.From((BindingFlags?)BindingFlags.DeclaredOnly));
+
+			// Integer-to-enum.
+			//
+			Assert.AreEqual(BindingFlags.DeclaredOnly,
+				ConvertTo<BindingFlags>.From((int)BindingFlags.DeclaredOnly));
+
+			// Integer-to-nullable enum.
+			//
+			Assert.AreEqual(BindingFlags.DeclaredOnly,
+				ConvertTo<BindingFlags?>.From((int)BindingFlags.DeclaredOnly));
+
+		}
+
+		[Test]
+		public void ByteArrayTest()
+		{
+			Byte[] bytes;
+			object value;
+
+			bytes = new byte[] {123};
+			value = (byte)123;
+			Assert.AreEqual(bytes, Convert.ToByteArray(value));
+			Assert.AreEqual(value, Convert.ToByte(bytes));
+
+			bytes = new byte[] {123, 0};
+			value = (short)123;
+			Assert.AreEqual(bytes, Convert.ToByteArray(value));
+			Assert.AreEqual(value, Convert.ToInt16(bytes));
+
+			bytes = new byte[] {210, 2, 150, 73};
+			value = 1234567890;
+			Assert.AreEqual(bytes, Convert.ToByteArray(value));
+			Assert.AreEqual(value, Convert.ToInt32(bytes));
+
+			bytes = new byte[] {(byte) 't', (byte) 's', (byte) 't'};
+			value = "tst";
+			Assert.AreEqual(bytes, Convert.ToByteArray(value));
+			Assert.AreEqual(value, Convert.ToString(bytes));
+
+			bytes = new byte[] {12, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 70};
+			value = typeof(System.Runtime.InteropServices.ComTypes.IStream).GUID;
+			Assert.AreEqual(bytes, Convert.ToByteArray(value));
+			Assert.AreEqual(value, Convert.ToGuid(bytes));
+
+			bytes = new byte[] {210, 10, 31, 235, 140, 169, 84, 171, 0, 0, 0, 0, 0, 0, 0, 0};
+			value = 12345678901234567890m;
+			Assert.AreEqual(bytes, Convert.ToByteArray(value));
+			Assert.AreEqual(value, Convert.ToDecimal(bytes));
+
+			bytes = new byte[] {121, 233, 246, 66};
+			value = 123.456f;
+			Assert.AreEqual(bytes, Convert.ToByteArray(value));
+			Assert.AreEqual(value, Convert.ToSingle(bytes));
+
+			bytes = new byte[] {119, 190, 159, 26, 47, 221, 94, 64};
+			value = 123.456;
+			Assert.AreEqual(bytes, Convert.ToByteArray(value));
+			Assert.AreEqual(value, Convert.ToDouble(bytes));
+		}
+
+		[Test]
+		public void ConvertT()
+		{
+			decimal d = ConvertTo<decimal>.From(123);
+			Assert.AreEqual(123.0m, d);
+		}
+
+#if ORACLE
+		[Test]
+		public void TypeCast()
+		{
+			// Note that method BLToolkit.Common.Convert.ToDecimal(OracleNumber p) does not exist.
+			//
+			decimal d = ConvertTo<decimal>.From(new OracleDecimal(123));
+			Assert.AreEqual(123.0m, d);
+
+			// Method BLToolkit.Common.Convert.ToOracleString(string p) does not exist too.
+			//
+			OracleString s = ConvertTo<OracleString>.From("test");
+			Assert.AreEqual("test", s.Value);
+		}
+#endif
+	}
+}