public void Clear_ClearsCollection()
      {
         FilterCollection<int> filters = new FilterCollection<int>();
         Filter<int> filter = new Mock<Filter<int>>().Object;

         filters.Clear();

         Assert.IsTrue(filters.IsEmpty());
         Assert.IsFalse(filters.Contains(filter));
      }
      public void Constructor_Collection_AddsFilters()
      {
         FilterCollection<int> filters = new FilterCollection<int>();
         Filter<int> filter = new Mock<Filter<int>>().Object;
         filters.Add(filter);

         FilterCollection<int> filtersCopy = new FilterCollection<int>(filters);
         Assert.AreEqual(1, filtersCopy.Count);
         Assert.IsTrue(filtersCopy.Contains(filter));
      }
      public void Add_FilterTwice_OnlyAddsOnce()
      {
         int filterAddedEventRaised = 0;
         FilterCollection<int> filters = new FilterCollection<int>();
         filters.FilterAdded += (sender, args) => filterAddedEventRaised++;
         Filter<int> filter = new Mock<Filter<int>>().Object;

         filters.Add(filter);
         filters.Add(filter);

         Assert.AreEqual(1, filters.Count);
         Assert.IsTrue(filters.Contains(filter));
         Assert.AreEqual(1, filterAddedEventRaised);
      }
      public void Contains_Type_ReturnsFiltersOfType()
      {
         FilterCollection<int> filters = new FilterCollection<int>();
         Filter<int> filterInt = new Mock<Filter<int>>().Object;
         Filter<double> filterDouble = new Mock<Filter<double>>().Object;
         filters.Add(filterInt);

         Assert.IsTrue(filters.Contains(filterInt.GetType()));
         Assert.IsFalse(filters.Contains(filterDouble.GetType()));
      }
      public void IndexOperator_Set_ReplacesFilter()
      {
         FilterCollection<int> filters = new FilterCollection<int>();
         Filter<int> filterA = new Mock<Filter<int>>().Object;
         Filter<int> filterB = new Mock<Filter<int>>().Object;
         filters.Add(filterA);

         filters[0] = filterB;

         Assert.IsFalse(filters.Contains(filterA));
         Assert.IsTrue(filters.Contains(filterB));
         Assert.AreEqual(filterB, filters[0]);
      }
      public void Remove_ByType()
      {
         FilterCollection<int> filters = new FilterCollection<int>();
         Filter<int> filter = new Mock<Filter<int>>().Object;
         filters.Add(filter);

         filters.Remove(filter.GetType());

         Assert.IsFalse(filters.Contains(filter));
      }