public void SelectThenExcept()
        {
            var coll1 = new ObservableCollection<SelectObservableCollectionViewModel>();
            coll1.Add(new SelectObservableCollectionViewModel("test"));
            var coll2 = new ObservableCollection<string>(new[] {"test"});
            var result1 = coll1.ToLiveLinq().Select(vm => vm.Name.AsObservable()).ToReadOnlyObservableList();
            var result2 = result1.ToLiveLinq().Except(coll2.ToLiveLinq()).ToReadOnlyObservableList();
            result1.Count.Should().Be(1);
            result1[0].Should().Be("test");
            result2.Count.Should().Be(0);

            coll1[0].Name.Value = "test2";
            result1.Count.Should().Be(1);
            result1[0].Should().Be("test2");
            result2.Count.Should().Be(1);
            result2[0].Should().Be("test2");

            coll2[0] = "test2";
            result1.Count.Should().Be(1);
            result1[0].Should().Be("test2");
            result2.Count.Should().Be(0);

            coll2[0] = "test3";
            result1.Count.Should().Be(1);
            result1[0].Should().Be("test2");
            result2.Count.Should().Be(1);
            result2[0].Should().Be("test2");
        }
 public void ObservableCollection_Clear()
 {
     var source = new ObservableCollection<string>() { "A", "B", "C" };
     var snapshot = source.ToLiveLinq().ToObservableEnumerable().Snapshot();
     source.Clear();
     snapshot.Value.Should().BeEmpty();
 }
 public void ObservableCollection_Add()
 {
     var source = new ObservableCollection<string>();
     var snapshot = source.ToLiveLinq().ToObservableEnumerable().Snapshot();
     source.Add("A");
     snapshot.Value.Should().ContainSingle("A");
 }
 public void ObservableCollection_AddRemove()
 {
     var source = new ObservableCollection<string>();
     var snapshot = source.ToLiveLinq().ToObservableEnumerable().Snapshot();
     source.Add("A");
     source.RemoveAt(0);
     snapshot.Value.Should().BeEmpty();
 }
 public void InitialThenChange()
 {
     var vm = new SelectObservableCollectionViewModel("test1");
     var vms = new ObservableCollection<SelectObservableCollectionViewModel>(new[] { vm });
     var result = vms.ToLiveLinq().Select(avm => avm.Name.AsObservable()).ToReadOnlyObservableList();
     result[0].Should().Be("test1");
     vm.Name.Value = "test2";
     result[0].Should().Be("test2");
 }
 public void AddThenChangeIncludeToFalse()
 {
     var vms = new ObservableCollection<WhereObservableCollectionViewModel>();
     var result = vms.ToLiveLinq().Where(vm => vm.Predicate).ToReadOnlyObservableList();
     result.Count.Should().Be(0);
     vms.Add(new WhereObservableCollectionViewModel(true));
     result.Count.Should().Be(1);
     vms[0].Predicate.Value = false;
     result.Count.Should().Be(0);
 }
 public void ChangeIncludeToTrue()
 {
     var vms =
         new ObservableCollection<WhereObservableCollectionViewModel>(new[]
         {new WhereObservableCollectionViewModel(false)});
     var result = vms.ToLiveLinq().Where(vm => vm.Predicate).ToReadOnlyObservableList();
     result.Count.Should().Be(0);
     vms[0].Predicate.Value = true;
     result.Count.Should().Be(1);
 }
 public void Remove()
 {
     var vms = new ObservableCollection<SelectObservableCollectionViewModel>();
     var result = vms.ToLiveLinq().Select(vm => vm.Name.AsObservable()).ToReadOnlyObservableList();
     result.Count.Should().Be(0);
     vms.Add(new SelectObservableCollectionViewModel("test1"));
     result.Count.Should().Be(1);
     vms.RemoveAt(0);
     result.Count.Should().Be(0);
 }
 public void AddThenChange()
 {
     var vm = new SelectObservableCollectionViewModel("test1");
     var vms = new ObservableCollection<SelectObservableCollectionViewModel>();
     var result = vms.ToLiveLinq().Select(avm => avm.Name.AsObservable()).ToReadOnlyObservableList();
     result.Should().BeEmpty();
     vms.Add(vm);
     result.Should().BeEquivalentTo("test1");
     vm.Name.Value = "test2";
     result.Should().BeEquivalentTo("test2");
 }
 public void ToDictionary_Reset()
 {
     var source = new ObservableCollection<IKeyValuePair<int, string>>();
     var get2 = Nothing<string>();
     source.ToLiveLinq().ToLiveLinq()[2].Subscribe(val => get2 = val);
     get2.Should().Be(Nothing<string>());
     source.Add(KeyValuePair(2, "Hi there"));
     get2.Should().Be(Something("Hi there"));
     source.RemoveAt(0);
     source.Add(KeyValuePair(2, "Hello"));
     get2.Should().Be(Something("Hello"));
 }
 public void RemoveThenChangeIncludeToTrue()
 {
     var vms = new ObservableCollection<WhereObservableCollectionViewModel>();
     var result = vms.ToLiveLinq().Where(vm2 => vm2.Predicate).ToReadOnlyObservableList();
     result.Count.Should().Be(0);
     var vm = new WhereObservableCollectionViewModel(false);
     vms.Add(vm);
     result.Count.Should().Be(0);
     vms.RemoveAt(0);
     vm.Predicate.Value = true;
     result.Count.Should().Be(0);
 }
        public void SelectTwice()
        {
            var coll1 = new ObservableCollection<NestedViewModel>();
            var result = coll1.ToLiveLinq()
                .Select(nested => nested.Property.AsObservable())
                .Select(kvp => kvp.Name.AsObservable()).ToReadOnlyObservableList();
            result.Count.Should().Be(0);

            coll1.Add(new NestedViewModel(new SelectObservableCollectionViewModel("test")));
            result.Count.Should().Be(1);
            result[0].Should().Be("test");

            coll1[0].Property.Value.Name.Value = "test2";
            result[0].Should().Be("test2");
        }
 public void SyncTo_RemoveThenChange()
 {
     var vms = new ObservableCollection<SelectObservableCollectionViewModel>();
     var result = new List<string>();
     vms.ToLiveLinq().Select(vm => vm.Name.AsObservable()).SyncTo(result, false);
     result.Count.Should().Be(0);
     var tmp = new SelectObservableCollectionViewModel("test1");
     vms.Add(tmp);
     result.Count.Should().Be(1);
     vms.RemoveAt(0);
     result.Count.Should().Be(0);
     tmp.Name.Value = "test2";
     result.Count.Should().Be(0);
 }
 public void SyncTo_AddThenChange()
 {
     var vm = new SelectObservableCollectionViewModel("test1");
     var vms = new ObservableCollection<SelectObservableCollectionViewModel>();
     var result = new List<string>();
     vms.ToLiveLinq().Select(avm => avm.Name.AsObservable()).SyncTo(result, false);
     result.Should().BeEmpty();
     vms.Add(vm);
     result.Should().BeEquivalentTo("test1");
     vm.Name.Value = "test2";
     result.Should().BeEquivalentTo("test2");
 }
 public void SyncTo_InitialThenChange()
 {
     var vm = new SelectObservableCollectionViewModel("test1");
     var vms = new ObservableCollection<SelectObservableCollectionViewModel>(new[] { vm });
     var result = new List<string>();
     vms.ToLiveLinq().Select(avm => avm.Name.AsObservable()).SyncTo(result, false);
     result[0].Should().Be("test1");
     vm.Name.Value = "test2";
     result[0].Should().Be("test2");
 }