예제 #1
0
        public void CreateInstance()
        {
            //不会重复创建打上并发访问安全类型特性的对象
            AssertPro.NotThrowsException <TypeUnsafeAccessException>(() =>
            {
                var obj0 = SafeAccessAttribute.CreateSingleton <SafeInternalClass>();
                var obj1 = SafeAccessAttribute.CreateSingleton <SafeInternalClass>();
                Assert.AreEqual(obj0.Id, obj1.Id);
            });

            //不能以单例形式创建没有打上并发访问安全类型特性的对象
            Assert.ThrowsException <TypeUnsafeAccessException>(() =>
            {
                SafeAccessAttribute.CreateSingleton <UnsafeInternalClass>();
            });

            //自动创建实例,也不会重复创建打上并发访问安全类型特性的对象
            {
                var obj0 = SafeAccessAttribute.CreateInstance <SafeInternalClass>();
                var obj1 = SafeAccessAttribute.CreateInstance <SafeInternalClass>();
                Assert.AreEqual(obj0.Id, obj1.Id);
            }

            //自动创建实例,会重复创建没有打上并发访问安全类型的对象
            {
                var obj0 = SafeAccessAttribute.CreateInstance <UnsafeInternalClass>();
                var obj1 = SafeAccessAttribute.CreateInstance <UnsafeInternalClass>();
                Assert.AreNotEqual(obj0.Id, obj1.Id);
            }
        }
예제 #2
0
        public void CheckUp()
        {
            //检查InternalSafeClass,不会引起非并发访问安全的异常
            AssertPro.NotThrowsException <TypeUnsafeAccessException>(() =>
            {
                SafeAccessAttribute.CheckUp(typeof(SafeInternalClass));
            });

            //检查InternalUnsafeClass,会引起非并发访问安全的异常
            Assert.ThrowsException <TypeUnsafeAccessException>(() =>
            {
                SafeAccessAttribute.CheckUp(typeof(UnsafeInternalClass));
            });
        }
예제 #3
0
        public static void AssertBook(Book book)
        {
            //验证book表的数据
            DataPortal.Direct <Book>((conn) =>
            {
                var data = conn.QuerySingle("select * from book where id=@id", new { Id = book.Id });
                Assert.AreEqual(data.Name, book.Name);
                Assert.AreEqual(data.CoverId, book.Cover.Id);
                Assert.AreEqual(data.CategoryId, book.Category.Id);
                Assert.AreEqual(data.MainBookmarkId, book.MainBookmark.Id);
                Assert.AreEqual(data.FirstBookmarkId, book.FirstBookmark.Id);
                Assert.AreEqual(data.LastBookmarkId, book.LastBookmark.Id);
                Assert.AreEqual(data.Signature, book.GetSignature());
                Assert.AreEqual(data.Signature2, book.GetSignature2());

                AssertAuthor(book, book.GetCreator(), conn);

                string dataEPIs = data.ErrorPageIndexs;
                var epis        = dataEPIs.Split(',').Select((t) => int.Parse(t.FromBase64()));
                AssertPro.AreEqual(epis, book.ErrorPageIndexs);

                Assert.AreEqual(data.SourceAddressId, book.SourceAddress.Id);

                Assert.IsNull(data.Publication);
                Assert.IsTrue(book.Publication.IsEmpty());
                AssertPro.AreEqualSecond(data.SaleTime, (DateTime)book.SaleTime);
            });

            //验证book的属性Cover对应的数据信息
            DataPortal.Direct <Book>((conn) =>
            {
                var cover = book.Cover;
                AssertBookCover(book, cover, conn);
            });

            DataPortal.Direct <Book>((conn) =>
            {
                AssertBookmark(book, book.MainBookmark, conn);

                var bookmarksData = conn.Query("select * from Book_Bookmarks where RootId=@RootId", new { RootId = book.Id });
                AssertBookmarks(book, bookmarksData, book.Bookmarks, conn);

                AssertBookmark(book, book.FirstBookmark, conn);
                AssertBookmark(book, book.LastBookmark, conn);
            });

            DataPortal.Direct <Book>((conn) =>
            {
                var datas = conn.Query("select * from Book_Posters where RootId=@RootId", new { RootId = book.Id });
                AssertBookPosters(book, datas, book.Posters, conn);
            });

            DataPortal.Direct <Book>((conn) =>
            {
                var datas = conn.Query("select * from Book_RelatedCategories where RootId=@RootId", new { RootId = book.Id });
                AssertBookCategories(datas, book.RelatedCategories, conn);
            });

            DataPortal.Direct <Book>((conn) =>
            {
                AssertBookAddress(book, book.SourceAddress, conn);
                var datas = conn.Query("select * from Book_SaleAddresses where RootId=@RootId", new { RootId = book.Id });
                AssertBookAddresses(book, datas, book.SaleAddresses, conn);
            });
        }