Skip to content

Commit

Permalink
See #26
Browse files Browse the repository at this point in the history
  • Loading branch information
mfidemraizer committed Dec 29, 2016
1 parent 9369f53 commit 886a00e
Show file tree
Hide file tree
Showing 9 changed files with 60 additions and 7 deletions.
4 changes: 2 additions & 2 deletions TrackerDog.Signed/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.1.4.0")]
[assembly: AssemblyFileVersion("2.1.4.0")]
[assembly: AssemblyVersion("2.1.5.0")]
[assembly: AssemblyFileVersion("2.1.5.0")]

[assembly: InternalsVisibleTo(InternalsVisible.ToDynamicProxyGenAssembly2)]
[assembly: InternalsVisibleTo("TrackerDog.Test.Signed, PublicKey=00240000048000009400000006020000002400005253413100040000010001001ffcf2febdbe56c43afff66e091d7220aa0e53b1638c84e8ae732b444410137f0cc754459f5691f74313921820a490e8761982edac1f051ba141be96bb9f82b4ea4a80b6b87e8c99831fdb69473821dbda3622a8cd3c439ddf3b76cba5ff89809423b7e02ea2b55a12f2b2f5ce0ce377bb2bb4831ce02f7a71cce368e346ecba")]
6 changes: 6 additions & 0 deletions TrackerDog.Signed/TrackerDog.Signed.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@
<Compile Include="..\TrackerDog\CollectionChangeTrackingContext.cs">
<Link>CollectionChangeTrackingContext.cs</Link>
</Compile>
<Compile Include="..\TrackerDog\CollectionExtensions.cs">
<Link>CollectionExtensions.cs</Link>
</Compile>
<Compile Include="..\TrackerDog\CollectionHandling\CollectionChange.cs">
<Link>CollectionHandling\CollectionChange.cs</Link>
</Compile>
Expand Down Expand Up @@ -161,6 +164,9 @@
<Compile Include="..\TrackerDog\Hooks\SimplePropertyInterceptionHook.cs">
<Link>Hooks\SimplePropertyInterceptionHook.cs</Link>
</Compile>
<Compile Include="..\TrackerDog\ICanClearChanges.cs">
<Link>ICanClearChanges.cs</Link>
</Compile>
<Compile Include="..\TrackerDog\IChangeTrackableCollection.cs">
<Link>IChangeTrackableCollection.cs</Link>
</Compile>
Expand Down
16 changes: 16 additions & 0 deletions TrackerDog.Test/CollectionTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -264,5 +264,21 @@ public void ArrayMustNotBeTrackedAsCollections()
Assert.IsTrue(g.PropertyHasChanged(o => o.Buffer));
Assert.IsNotInstanceOfType(g.Buffer, typeof(IReadOnlyChangeTrackableCollection));
}

[TestMethod]
public void CanClearCollectionChanges()
{
A a = TrackableObjectFactory.CreateOf<A>();
a.Items.Add("a");
a.Items.Add("b");

a.Items.ClearChanges();

IReadOnlyChangeTrackableCollection trackableCollection
= (IReadOnlyChangeTrackableCollection)a.Items;

Assert.AreEqual(0, trackableCollection.AddedItems.Count);
Assert.AreEqual(0, trackableCollection.RemovedItems.Count);
}
}
}
17 changes: 17 additions & 0 deletions TrackerDog/CollectionExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System.Collections.Generic;
using System.Diagnostics.Contracts;

namespace TrackerDog
{
public static class CollectionExtensions
{
public static void ClearChanges<TItem>(this ICollection<TItem> source)
{
Contract.Requires(source is ICanClearChanges, $"Given collection must implement 'TrackerDog.ICanClearChanges'");

ICanClearChanges canClearChanges = (ICanClearChanges)source;

canClearChanges.ClearChanges();
}
}
}
7 changes: 7 additions & 0 deletions TrackerDog/ICanClearChanges.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace TrackerDog
{
public interface ICanClearChanges
{
void ClearChanges();
}
}
2 changes: 1 addition & 1 deletion TrackerDog/IChangeTrackableCollectionContract.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ internal abstract class IChangeTrackableCollectionContract : IChangeTrackableCol
public HashSet<object> RemovedItems { get; set; }

public event NotifyCollectionChangedEventHandler CollectionChanged;

public CollectionChangeTrackingContext GetChangeTrackingContext()
{
Contract.Ensures(Contract.Result<CollectionChangeTrackingContext>() != null);
Expand Down
9 changes: 7 additions & 2 deletions TrackerDog/Mixins/ChangeTrackableCollectionMixin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@

namespace TrackerDog.Mixins
{
internal class ChangeTrackableCollectionMixin : IChangeTrackableCollection, IReadOnlyChangeTrackableCollection
internal class ChangeTrackableCollectionMixin : IChangeTrackableCollection, ICanClearChanges, IReadOnlyChangeTrackableCollection
{

private readonly static Guid _id = Guid.NewGuid();
private readonly HashSet<object> _addedItems = new HashSet<object>();
private readonly HashSet<object> _removedItems = new HashSet<object>();
Expand Down Expand Up @@ -47,5 +46,11 @@ public override bool Equals(object obj)
}

public override int GetHashCode() => Id.GetHashCode();

void ICanClearChanges.ClearChanges()
{
_addedItems.Clear();
_removedItems.Clear();
}
}
}
4 changes: 2 additions & 2 deletions TrackerDog/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.1.4.0")]
[assembly: AssemblyFileVersion("2.1.4.0")]
[assembly: AssemblyVersion("2.1.5.0")]
[assembly: AssemblyFileVersion("2.1.5.0")]
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
[assembly: InternalsVisibleTo("TrackerDog.Test")]
2 changes: 2 additions & 0 deletions TrackerDog/TrackerDog.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@
<ItemGroup>
<Compile Include="ChangeTrackableObjectState.cs" />
<Compile Include="CollectionChangeTrackingContext.cs" />
<Compile Include="CollectionExtensions.cs" />
<Compile Include="CollectionHandling\CollectionChange.cs" />
<Compile Include="CollectionHandling\CollectionChangeContext.cs" />
<Compile Include="Configuration\AttributeConfigurationBuilder.cs" />
Expand Down Expand Up @@ -141,6 +142,7 @@
<Compile Include="ExpressionExtensions.cs" />
<Compile Include="Hooks\SimplePropertyInterceptionHook.cs" />
<Compile Include="Hooks\CollectionterceptionHook.cs" />
<Compile Include="ICanClearChanges.cs" />
<Compile Include="IChangeTrackableCollection.cs" />
<Compile Include="IChangeTrackableCollectionContract.cs" />
<Compile Include="IChangeTrackableObjectContract.cs" />
Expand Down

0 comments on commit 886a00e

Please sign in to comment.