Mercurial > pub > bltoolkit
diff UnitTests/CS/DataAccess/DataAccessorBuilderTest.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/DataAccess/DataAccessorBuilderTest.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,172 @@ +using System; +using System.Collections; +using System.Data; +using System.Reflection; +using NUnit.Framework; + +using BLToolkit.DataAccess; +using BLToolkit.TypeBuilder; + +namespace DataAccess +{ + [TestFixture] + public class DataAccessorBuilderTest : MarshalByRefObject + { + DataAccessorBuilderTest _localTest; + AppDomain _localDomain; + + public struct Person + { + } + + [TestFixtureSetUp] + public void SetUp() + { + string path = new Uri(Assembly.GetExecutingAssembly().EscapedCodeBase).LocalPath; + + _localDomain = AppDomain.CreateDomain("NewDomain"); + _localDomain.Load(typeof(DataAccessor).Assembly.GetName()); + _localTest = (DataAccessorBuilderTest)_localDomain.CreateInstanceFromAndUnwrap(path, GetType().FullName); + } + + [TestFixtureTearDown] + public void TearDown() + { + AppDomain.Unload(_localDomain); + } + + public abstract class TypelessAccessor : DataAccessor + { + [SqlQuery("SELECT * FROM Person WHERE PersonID < 3")] + public abstract Hashtable Typeless(); + } + + private void Typeless() + { + // Can not determine object type for the method 'TypelessAccessor.Typeless' + // + DataAccessor.CreateInstance(typeof(TypelessAccessor)); + } + + [Test, ExpectedException(typeof(TypeBuilderException))] + public void TypelessTest() + { + AppDomain.CurrentDomain.DoCallBack(_localTest.Typeless); + } + + public abstract class TypelessAccessor2 : DataAccessor + { + [SprocName("Person_SelectAll")] + public abstract ArrayList Typeless(); + } + + private void Typeless2() + { + // Can not determine object type for the method 'TypelessAccessor2.Typeless' + // + DataAccessor.CreateInstance(typeof(TypelessAccessor2)); + } + + [Test, ExpectedException(typeof(TypeBuilderException))] + public void Gen_SelectAllListException() + { + AppDomain.CurrentDomain.DoCallBack(_localTest.Typeless2); + } + + public abstract class MultiDestinationAccessor : DataAccessor + { + [ObjectType(typeof(Person))] + public abstract IList SelectAll([Destination] IList list1, [Destination] IList list2); + } + + private void MultiDestinationException() + { + // More then one parameter is marked as destination. + // + DataAccessor.CreateInstance(typeof(MultiDestinationAccessor)); + } + + [Test, ExpectedException(typeof(TypeBuilderException))] + public void MultiDestinationExceptionTest() + { + AppDomain.CurrentDomain.DoCallBack(_localTest.MultiDestinationException); + } + + public abstract class ScalarDestinationAccessor : DataAccessor + { + [ObjectType(typeof(Person))] + public abstract int SelectAll([Destination] int p); + } + + private void ScalarDestinationException() + { + // ExecuteScalar destination must be an out or a ref parameter + // + DataAccessor.CreateInstance(typeof(ScalarDestinationAccessor)); + } + + [Test, ExpectedException(typeof(TypeBuilderException))] + public void ScalarDestinationExceptionTest() + { + AppDomain.CurrentDomain.DoCallBack(_localTest.ScalarDestinationException); + } + + public abstract class IncompatibleScalarDestinationAccessor : DataAccessor + { + [ObjectType(typeof(Person))] + public abstract int SelectAll([Destination] out string p); + } + + private void IncompatibleScalarDestinationException() + { + // The return type 'System.Int32' of the method 'SelectAll' + // is incompatible with the destination parameter type 'System.String' + // + DataAccessor.CreateInstance(typeof(IncompatibleScalarDestinationAccessor)); + } + + [Test, ExpectedException(typeof(TypeBuilderException))] + public void IncompatibleScalarDestinationExceptionTest() + { + AppDomain.CurrentDomain.DoCallBack(_localTest.IncompatibleScalarDestinationException); + } + + public abstract class VoidDestinationAccessor : DataAccessor + { + [ObjectType(typeof(Person))] + public abstract void SelectAll([Destination] int p); + } + + private void VoidDestinationException() + { + // ExecuteNonQuery does not support the Destination attribute + // + DataAccessor.CreateInstance(typeof(VoidDestinationAccessor)); + } + + [Test, ExpectedException(typeof(TypeBuilderException))] + public void VoidDestinationExceptionTest() + { + AppDomain.CurrentDomain.DoCallBack(_localTest.VoidDestinationException); + } + + public abstract class IllegalDataSetTableAccessor : DataAccessor + { + [DataSetTable(12345)] + public abstract DataTable SelectAll(); + } + + private void IllegalDataSetTable() + { + // DataSetTable attribute may not be an index + // + DataAccessor.CreateInstance(typeof(IllegalDataSetTableAccessor)); + } + + [Test, ExpectedException(typeof(TypeBuilderException))] + public void IllegalDataSetTableTest() + { + AppDomain.CurrentDomain.DoCallBack(_localTest.IllegalDataSetTable); + } + } +} \ No newline at end of file