예제 #1
0
        public void Set_WhenObjectIsManaged_ShouldWork()
        {
            var container   = new ContainerObject();
            var objectToSet = new IntPropertyObject
            {
                Int = 42
            };

            _realm.Write(() =>
            {
                _realm.Add(container);
                container.Items.Add(new IntPropertyObject
                {
                    Int = -1
                });

                _realm.Add(objectToSet);
            });

            _realm.Write(() => container.Items[0] = objectToSet);

            Assert.That(container.Items.Count, Is.EqualTo(1));
            Assert.That(container.Items[0], Is.EqualTo(objectToSet));
            Assert.That(container.Items[0].Int, Is.EqualTo(42));
        }
예제 #2
0
        private ThreadSafeReference.Object<IntPropertyObject> SetupObjectReference()
        {
            var obj = new IntPropertyObject { Int = 12 };

            _realm.Write(() => _realm.Add(obj));

            return ThreadSafeReference.Create(obj);
        }
예제 #3
0
        public void ThreadSafeReference_WhenObjectIsDeleted_ShouldFail()
        {
            var obj = new IntPropertyObject();
            _realm.Write(() => _realm.Add(obj));
            _realm.Write(() => _realm.Remove(obj));

            Assert.That(() => ThreadSafeReference.Create(obj), Throws.InstanceOf<RealmException>().And.Message.Contains("invalidated object"));
        }
예제 #4
0
        public void Insert_WhenIndexIsEqualToCount_ShouldWork()
        {
            var container = new ContainerObject();

            _realm.Write(() => _realm.Add(container));

            var toInsert1 = new IntPropertyObject();

            _realm.Write(() => container.Items.Insert(0, toInsert1));
            Assert.That(container.Items.Count, Is.EqualTo(1));
            Assert.That(container.Items[0], Is.EqualTo(toInsert1));

            var toInsert2 = new IntPropertyObject();

            _realm.Write(() => container.Items.Insert(1, toInsert2));
            Assert.That(container.Items.Count, Is.EqualTo(2));
            Assert.That(container.Items[1], Is.EqualTo(toInsert2));
        }
예제 #5
0
        public void ObjectReference_ResolveDeletedObject_ShouldReturnNull()
        {
            AsyncContext.Run(async () =>
            {
                var obj = new IntPropertyObject { Int = 12 };
                _realm.Write(() => _realm.Add(obj));

                var objReference = ThreadSafeReference.Create(obj);

                _realm.Write(() => _realm.Remove(obj));

                await Task.Run(() =>
                {
                    using (var otherRealm = Realm.GetInstance(_realm.Config))
                    {
                        var otherObj = otherRealm.ResolveReference(objReference);
                        Assert.That(otherObj, Is.Null);
                    }
                });
            });
        }
예제 #6
0
        public void ThreadSafeReference_WhenAnObjectIsUnmanaged_ShouldFail()
        {
            var obj = new IntPropertyObject();

            Assert.That(() => ThreadSafeReference.Create(obj), Throws.InstanceOf<RealmException>().And.Message.Contains("unmanaged object"));
        }
예제 #7
0
        public void SmokeTest()
        {
            SyncTestHelpers.RunRosTestAsync(async() =>
            {
                var(realm, userId) = await CreateRandomRealmAsync("modifications");

                var changeDetails = new List <IChangeDetails>();
                var handler       = new ProxyingHandler(path => path == $"/{userId}/modifications",
                                                        details =>
                {
                    changeDetails.Add(details);
                    return(Task.CompletedTask);
                });

                var config = await GetConfiguration(handler);

                using (var notifier = await Notifier.StartAsync(config))
                    using (realm)
                    {
                        var obj = new IntPropertyObject {
                            Int = 3
                        };
                        realm.Write(() => realm.Add(obj));

                        var containsInsertion = await EnsureChangesAsync <IntPropertyObject>(changeDetails, 1, change =>
                        {
                            return(change.Insertions.Length == 1 &&
                                   change.Deletions.Length == 0 &&
                                   change.Modifications.Length == 0 &&
                                   change.Insertions[0].CurrentIndex == 0 &&
                                   change.Insertions[0].PreviousIndex == -1);
                        });

                        Assert.True(containsInsertion);

                        realm.Write(() => obj.Int = 4);

                        var containsModification = await EnsureChangesAsync <IntPropertyObject>(changeDetails, 2, change =>
                        {
                            return(change.Insertions.Length == 0 &&
                                   change.Deletions.Length == 0 &&
                                   change.Modifications.Length == 1 &&
                                   change.Modifications[0].CurrentIndex == 0 &&
                                   change.Modifications[0].PreviousIndex == 0);
                        });

                        Assert.True(containsModification);

                        realm.Write(() => realm.Remove(obj));

                        var containsDeletion = await EnsureChangesAsync <IntPropertyObject>(changeDetails, 3, change =>
                        {
                            return(change.Insertions.Length == 0 &&
                                   change.Deletions.Length == 1 &&
                                   change.Modifications.Length == 0 &&
                                   change.Deletions[0].CurrentIndex == -1 &&
                                   change.Deletions[0].PreviousIndex == 0);
                        });

                        Assert.True(containsDeletion);
                    }
            }, timeout: 1000000);
        }