public static void TestMultipleListeners() { AssetChangeTracker tracker = new AssetChangeTracker(new MockAssetDatabaseAccess()); TestListener listener1 = new TestListener(); TestListener listener2 = new TestListener(); TestListener listener3 = new TestListener(); // Registration triggers OnExists(), with assets for the corresponding type tracker.AddListener(typeof(TestAssetType), listener1); Assert.AreEqual(2, listener1.AssetPaths.Count); Assert.AreEqual(1, listener1.OnExistsCallCount); tracker.AddListener(typeof(TestAssetType), listener2); Assert.AreEqual(2, listener2.AssetPaths.Count); Assert.AreEqual(1, listener2.OnExistsCallCount); tracker.AddListener(typeof(TestAssetType2), listener3); Assert.AreEqual(1, listener3.AssetPaths.Count); Assert.AreEqual(1, listener3.OnExistsCallCount); // Adding an asset of type TestAssetType notifies the first two listeners only tracker.OnReimported(new string[] { file3 }); Assert.AreEqual(1, listener1.OnAddedCallCount); Assert.AreEqual(1, listener2.OnAddedCallCount); Assert.AreEqual(0, listener3.OnAddedCallCount); // Deleting an asset of type TestAssetType2 notifies the last listener only tracker.OnDeleted(new string[] { file5 }); Assert.AreEqual(0, listener1.OnDeletedCallCount); Assert.AreEqual(0, listener2.OnDeletedCallCount); Assert.AreEqual(1, listener3.OnDeletedCallCount); }
public static void TestNotifications() { AssetChangeTracker tracker = new AssetChangeTracker(new MockAssetDatabaseAccess()); TestListener listener = new TestListener(); // Registration triggers OnExists() tracker.AddListener(typeof(TestAssetType), listener); Assert.AreEqual(1, listener.OnExistsCallCount); Assert.AreEqual(1, listener.CallbackCount); Assert.IsTrue(listener.AssetPaths.Contains(file1)); Assert.IsTrue(listener.AssetPaths.Contains(file2)); Assert.IsFalse(listener.AssetPaths.Contains(file3)); Assert.IsFalse(listener.AssetPaths.Contains(file4)); // Reimporting an already-existing file triggers OnChanged() tracker.OnReimported(new string[] { file2 }); Assert.AreEqual(1, listener.OnChangedCallCount); Assert.AreEqual(2, listener.CallbackCount); Assert.IsTrue(listener.AssetPaths.Contains(file1)); Assert.IsTrue(listener.AssetPaths.Contains(file2)); Assert.IsFalse(listener.AssetPaths.Contains(file3)); Assert.IsFalse(listener.AssetPaths.Contains(file4)); // Reimporting a new file triggers OnAdded() tracker.OnReimported(new string[] { file3 }); Assert.AreEqual(1, listener.OnAddedCallCount); Assert.AreEqual(3, listener.CallbackCount); Assert.IsTrue(listener.AssetPaths.Contains(file1)); Assert.IsTrue(listener.AssetPaths.Contains(file2)); Assert.IsTrue(listener.AssetPaths.Contains(file3)); Assert.IsFalse(listener.AssetPaths.Contains(file4)); // Deleting a file triggers OnDeleted() tracker.OnDeleted(new string[] { file2 }); Assert.AreEqual(1, listener.OnDeletedCallCount); Assert.AreEqual(4, listener.CallbackCount); Assert.IsTrue(listener.AssetPaths.Contains(file1)); Assert.IsFalse(listener.AssetPaths.Contains(file2)); Assert.IsTrue(listener.AssetPaths.Contains(file3)); Assert.IsFalse(listener.AssetPaths.Contains(file4)); // Moving a file triggers OnMoved() tracker.OnMoved(new string[] { file1 }, new string[] { file4 }); Assert.AreEqual(1, listener.OnMovedCallCount); Assert.AreEqual(5, listener.CallbackCount); Assert.IsFalse(listener.AssetPaths.Contains(file1)); Assert.IsFalse(listener.AssetPaths.Contains(file2)); Assert.IsTrue(listener.AssetPaths.Contains(file3)); Assert.IsTrue(listener.AssetPaths.Contains(file4)); }
public static void TestRegistrationAndUnRegistration() { AssetChangeTracker tracker = new AssetChangeTracker(new MockAssetDatabaseAccess()); TestListener listener = new TestListener(); // Subscribe listener tracker.AddListener(typeof(TestAssetType), listener); Assert.AreEqual(1, listener.OnExistsCallCount); Assert.AreEqual(1, listener.CallbackCount); // Reimport notifies the listener tracker.OnReimported(new string[] { file2 }); Assert.AreEqual(2, listener.CallbackCount); // Unsubscribe listener tracker.RemoveListener(typeof(TestAssetType), listener); Assert.AreEqual(2, listener.CallbackCount); // Reimport notifies the listener tracker.OnReimported(new string[] { file2 }); Assert.AreEqual(2, listener.CallbackCount); }