コード例 #1
0
        public void SavesUnsupportedTypes()
        {
            UnsupportedTypes item = null;

            var serializer = new BlobSerializerDelegate(
                obj =>
            {
                if (obj is DateTimeOffset)
                {
                    Assert.AreEqual(item.DateTimeOffset, obj);
                    var offset = (DateTimeOffset)obj;
                    var bytes  = new byte[16];
                    Buffer.BlockCopy(BitConverter.GetBytes(offset.Ticks), 0, bytes, 0, 8);
                    Buffer.BlockCopy(BitConverter.GetBytes(offset.Offset.Ticks), 0, bytes, 8, 8);
                    return(bytes);
                }

                throw new InvalidOperationException(string.Format("Type {0} should not be requested.", obj.GetType()));
            },
                (d, t) =>
            {
                if (t == typeof(DateTimeOffset))
                {
                    var ticks  = BitConverter.ToInt64(d, 0);
                    var offset = BitConverter.ToInt64(d, 8);
                    return(new DateTimeOffset(ticks, TimeSpan.FromTicks(offset)));
                }

                if (t == typeof(TimeSpan))
                {
                    return(TimeSpan.FromTicks(BitConverter.ToInt64(d, 0)));
                }

                throw new InvalidOperationException(string.Format("Type {0} should not be requested.", t));
            },
                t => true);

            using (var db = new BlobDatabase(serializer))
            {
                db.CreateTable <UnsupportedTypes>();
                item = new UnsupportedTypes()
                {
                    Id             = Guid.NewGuid(),
                    DateTimeOffset = DateTime.Now
                };

                db.Insert(item);
                var dbItem = db.Find <UnsupportedTypes>(item.Id);

                Assert.AreEqual(item.Id, dbItem.Id);
                Assert.AreEqual(item.DateTimeOffset, dbItem.DateTimeOffset);
            }
        }
コード例 #2
0
        public void SavesUnsupportedTypes()
        {
            UnsupportedTypes item = null;

            var serializer = new BlobSerializerDelegate(
                obj =>
            {
                if (obj is DivideByZeroException)
                {
                    var e    = (DivideByZeroException)obj;
                    var json = JsonConvert.SerializeObject(e);            // subst your own serializer
                    return(Encoding.UTF8.GetBytes(json));
                }

                throw new InvalidOperationException(string.Format("Type {0} should not be requested.", obj.GetType()));
            },
                (d, t) =>
            {
                if (t == typeof(DivideByZeroException))
                {
                    var json   = Encoding.UTF8.GetString(d);
                    var result = JsonConvert.DeserializeObject <DivideByZeroException>(json);
                    return(result);
                }

                throw new InvalidOperationException(string.Format("Type {0} should not be requested.", t));
            },
                t => true);

            using (var db = new BlobDatabase(serializer))
            {
                db.CreateTable <UnsupportedTypes>();
                item = new UnsupportedTypes()
                {
                    Id                    = Guid.NewGuid(),
                    DateTimeOffset        = DateTime.Now,
                    DivideByZeroException = new DivideByZeroException("a message")
                };

                db.Insert(item);
                var dbItem = db.Find <UnsupportedTypes>(item.Id);

                Assert.AreEqual(item.Id, dbItem.Id);
                Assert.AreEqual(item.DateTimeOffset, dbItem.DateTimeOffset);
                //most db stores datetimeoffset as utc, forgetting the offset part. This one is not an exception.
                //TODO: test fails
                Assert.AreEqual(item.DateTimeOffset.Offset, dbItem.DateTimeOffset.Offset);
                //TODO: test fails
                Assert.AreEqual(item.DivideByZeroException.Message, dbItem.DivideByZeroException.Message);
            }
        }
コード例 #3
0
        public void SavesUnsupportedTypes()
        {
            UnsupportedTypes item = null;

            var serializer = new BlobSerializerDelegate(
                obj =>
            {
                if (obj is DivideByZeroException)
                {
                    var e    = (DivideByZeroException)obj;
                    var json = JsonConvert.SerializeObject(e);            // subst your own serializer
                    return(Encoding.UTF8.GetBytes(json));
                }

                throw new InvalidOperationException(string.Format("Type {0} should not be requested.", obj.GetType()));
            },
                (d, t) =>
            {
                if (t == typeof(DivideByZeroException))
                {
#if __WINRT__ || WINDOWS_PHONE
                    var json = Encoding.UTF8.GetString(d, 0, d.Length);
#else
                    var json = Encoding.UTF8.GetString(d);
#endif
                    var result = JsonConvert.DeserializeObject <DivideByZeroException>(json);
                    return(result);
                }

                throw new InvalidOperationException(string.Format("Type {0} should not be requested.", t));
            },
                t => true);

            using (var db = new BlobDatabase(serializer))
            {
                db.CreateTable <UnsupportedTypes>();
                item = new UnsupportedTypes()
                {
                    Id                    = Guid.NewGuid(),
                    DateTimeOffset        = DateTime.Now,
                    DivideByZeroException = new DivideByZeroException("a message")
                };

                db.Insert(item);
                var dbItem = db.Find <UnsupportedTypes>(item.Id);

                Assert.AreEqual(item.Id, dbItem.Id);
                Assert.AreEqual(item.DateTimeOffset, dbItem.DateTimeOffset);
                Assert.AreEqual(item.DivideByZeroException.Message, dbItem.DivideByZeroException.Message);
            }
        }
コード例 #4
0
        public void DoesNotCallOnSupportedTypes()
        {
            var types = new List <Type>();

            var serializer = new BlobSerializerDelegate(obj => null, (d, t) => null, t =>
            {
                throw new InvalidOperationException(string.Format("Type {0} should not be requested.", t));
            });

            using (var db = new BlobDatabase(serializer))
            {
                db.CreateTable <SupportedTypes>();
            }

            Assert.AreEqual(0, types.Count, "Types requested from serializer");
        }
コード例 #5
0
        public void CallsOnUnsupportedTypes()
        {
            var types = new List <Type>();

            var serializer = new BlobSerializerDelegate(obj => null, (d, t) => null, t =>
            {
                types.Add(t);
                return(true);
            });

            using (var db = new BlobDatabase(serializer))
            {
                db.CreateTable <UnsupportedTypes>();
            }

            Assert.That(types, Has.Member(typeof(DivideByZeroException)));

            Assert.AreEqual(1, types.Count, "Too many types requested by serializer");
        }
コード例 #6
0
        public void CallsOnUnsupportedTypes()
        {
            var types = new List <Type>();

            var serializer = new BlobSerializerDelegate(obj => null, (d, t) => null, t =>
            {
                types.Add(t);
                return(true);
            });

            using (var db = new BlobDatabase(serializer))
            {
                db.CreateTable <UnsupportedTypes>();
            }

            Assert.Contains(typeof(DateTimeOffset), types);

            Assert.AreEqual(1, types.Count, "Too many types requested by serializer");
        }
コード例 #7
0
        public void CanDeserializeIsRequested()
        {
            var types = new List <Type>();

            var serializer = new BlobSerializerDelegate(obj => null, (d, t) => null, t =>
            {
                types.Add(t);
                return(true);
            });

            using (var db = new BlobDatabase(serializer))
            {
                db.CreateTable <ComplexOrder>();
            }

            Assert.That(types, Has.Member(typeof(List <ComplexHistory>)));
            Assert.That(types, Has.Member(typeof(List <ComplexLine>)));

            Assert.AreEqual(2, types.Count, "Too many types requested by serializer");
        }