예제 #1
0
        public void CreateTest()
        {
            AreEqual(RWHelper.CreateRW(new Dictionary <string, object>()).GetType().Name, "DictionaryRW`3");
            AreEqual(RWHelper.CreateRW(new ReadOnlyDictionary <string, object>(new Dictionary <string, object>())).GetType().Name, "DictionaryRW`3");
            AreEqual(RWHelper.CreateRW(new ConcurrentDictionary <string, object>()).GetType().Name, "DictionaryRW`3");
            AreEqual(RWHelper.CreateRW(new SortedDictionary <string, object>()).GetType().Name, "DictionaryRW`3");
            AreEqual(RWHelper.CreateRW(new SortedList <string, object>()).GetType().Name, "DictionaryRW`3");

            AreEqual(RWHelper.CreateRW(new List <object>()).GetType().Name, "ListRW`2");
            AreEqual(RWHelper.CreateRW(new ReadOnlyCollection <object>(new List <object>())).GetType().Name, "ListRW`2");
            AreEqual(RWHelper.CreateRW(new Collection <object>()).GetType().Name, "ListRW`2");

            AreEqual(RWHelper.CreateRW(new LinkedList <object>()).GetType().Name, "CollectionRW`2");
            AreEqual(RWHelper.CreateRW(new HashSet <object>()).GetType().Name, "CollectionRW`2");
            AreEqual(RWHelper.CreateRW(new SortedSet <object>()).GetType().Name, "CollectionRW`2");

            AreEqual(RWHelper.CreateRW(new Hashtable()).GetType().Name, "DictionaryRW`1");
            AreEqual(RWHelper.CreateRW(new SortedList()).GetType().Name, "DictionaryRW`1");
            AreEqual(RWHelper.CreateRW(new OrderedDictionary()).GetType().Name, "DictionaryRW`1");
            AreEqual(RWHelper.CreateRW(new ListDictionary()).GetType().Name, "DictionaryRW`1");

            AreEqual(RWHelper.CreateRW(new ArrayList()).GetType().Name, "ListRW`1");
            AreEqual(RWHelper.CreateRW(new StringCollection()).GetType().Name, "ListRW`1");


            AreEqual(RWHelper.CreateRW(new DataSet()).GetType().Name, "DataSetRW`1");
            AreEqual(RWHelper.CreateRW(new DataTable()).GetType().Name, "DataTableRW`1");
            AreEqual(RWHelper.CreateRW(new DataTable().NewRow()).GetType().Name, "DataRowRW`1");

            AreEqual(GetCSharpName(RWHelper.CreateRW(new int[0]).GetType()), "Swifter.RW.ArrayRW<int>");
            AreEqual(GetCSharpName(RWHelper.CreateRW(new int[0, 0]).GetType()), "Swifter.RW.MultiDimArray<int[,],int>.FirstRW");
            AreEqual(GetCSharpName(RWHelper.CreateRW(new int[0, 0, 0]).GetType()), "Swifter.RW.MultiDimArray<int[,,],int>.FirstRW");


            AreEqual(RWHelper.CreateReader(new List <object>().GetEnumerator().AsEnumerable()).GetType().Name, "EnumeratorReader`2");
            AreEqual(RWHelper.CreateReader(new List <object>().GetEnumerator()).GetType().Name, "EnumeratorReader`2");
            AreEqual(RWHelper.CreateReader(new ArrayList().GetEnumerator().AsEnumerable()).GetType().Name, "EnumeratorReader`1");
            AreEqual(RWHelper.CreateReader(new ArrayList().GetEnumerator()).GetType().Name, "EnumeratorReader`1");

            AreEqual(RWHelper.CreateReader(new DataTable().CreateDataReader()).GetType().Name, "DbDataReaderReader");

            AreEqual(
                RWHelper.CreateItemRW(RWHelper.CreateRW(new { Data = new Dictionary <string, object>() }).As <string>(), "Data").GetType().Name,
                "DictionaryRW`3");

            AreEqual(
                RWHelper.CreateItemReader(RWHelper.CreateRW(new { Data = new DataTable().CreateDataReader() }).As <string>(), "Data").GetType().Name,
                "DbDataReaderReader");

            Catch <NotSupportedException>(() => RWHelper.CreateRW("err"));

            var asTester = (IAsDataRW)RWHelper.CreateRW(new int[0]).As <string>();

            Catch <SuccessException>(() => asTester.InvokeTIn(new AsTestInvoker <int>()));
            Catch <SuccessException>(() => asTester.InvokeTOut(new AsTestInvoker <string>()));
        }
예제 #2
0
        private static IDataReader InternalGetTarget(IDataReader dataReader, TargetPathInfo target)
        {
            if (target == null || target.IsRoot)
            {
                return(dataReader);
            }

            dataReader = InternalGetTarget(dataReader, target.Parent);

            if (target.Name != null)
            {
                return(RWHelper.CreateItemReader(dataReader.As <string>(), target.Name));
            }
            else
            {
                return(RWHelper.CreateItemReader(dataReader.As <int>(), target.Index));
            }
        }