diff --git a/Directory.Build.props b/Directory.Build.props
index bbbd7977f..b23d9b934 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -14,6 +14,7 @@
$(DefineConstants);FEATURE_ASYNC_FILE;FEATURE_ENUMERATION_OPTIONS;FEATURE_ADVANCED_PATH_OPERATIONSFEATURE_PATH_JOIN_WITH_SPAN
$(DefineConstants);FEATURE_FILE_MOVE_WITH_OVERWRITE
$(DefineConstants);FEATURE_SUPPORTED_OS_ATTRIBUTE
+ $(DefineConstants);FEATURE_FILE_SYSTEM_WATCHER_FILTERS
diff --git a/src/System.IO.Abstractions/FileSystemWatcherBase.cs b/src/System.IO.Abstractions/FileSystemWatcherBase.cs
index e66271420..1caaa5486 100644
--- a/src/System.IO.Abstractions/FileSystemWatcherBase.cs
+++ b/src/System.IO.Abstractions/FileSystemWatcherBase.cs
@@ -15,6 +15,11 @@ public abstract class FileSystemWatcherBase : IFileSystemWatcher
///
public abstract string Filter { get; set; }
+#if FEATURE_FILE_SYSTEM_WATCHER_FILTERS
+ ///
+ public abstract System.Collections.ObjectModel.Collection Filters { get; }
+#endif
+
///
public abstract int InternalBufferSize { get; set; }
diff --git a/src/System.IO.Abstractions/FileSystemWatcherWrapper.cs b/src/System.IO.Abstractions/FileSystemWatcherWrapper.cs
index 83f78610b..4d0bac485 100644
--- a/src/System.IO.Abstractions/FileSystemWatcherWrapper.cs
+++ b/src/System.IO.Abstractions/FileSystemWatcherWrapper.cs
@@ -54,6 +54,13 @@ public override string Filter
set { watcher.Filter = value; }
}
+#if FEATURE_FILE_SYSTEM_WATCHER_FILTERS
+ public override System.Collections.ObjectModel.Collection Filters
+ {
+ get { return watcher.Filters; }
+ }
+#endif
+
public override int InternalBufferSize
{
get { return watcher.InternalBufferSize; }
diff --git a/src/System.IO.Abstractions/IFileSystemWatcher.cs b/src/System.IO.Abstractions/IFileSystemWatcher.cs
index 7b2e78099..9be4fc759 100644
--- a/src/System.IO.Abstractions/IFileSystemWatcher.cs
+++ b/src/System.IO.Abstractions/IFileSystemWatcher.cs
@@ -10,6 +10,10 @@ public interface IFileSystemWatcher : IDisposable
bool EnableRaisingEvents { get; set; }
///
string Filter { get; set; }
+#if FEATURE_FILE_SYSTEM_WATCHER_FILTERS
+ ///
+ System.Collections.ObjectModel.Collection Filters { get; }
+#endif
///
int InternalBufferSize { get; set; }
///
diff --git a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemTests.cs b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemTests.cs
index 75575da70..e3fe7809b 100644
--- a/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemTests.cs
+++ b/tests/System.IO.Abstractions.TestingHelpers.Tests/MockFileSystemTests.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
+using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
@@ -408,6 +409,9 @@ public TestFileSystemWatcher(string path, string filter)
public override NotifyFilters NotifyFilter { get; set; }
public override ISite Site { get; set; }
public override ISynchronizeInvoke SynchronizingObject { get; set; }
+#if FEATURE_FILE_SYSTEM_WATCHER_FILTERS
+ public override Collection Filters { get; }
+#endif
public override void BeginInit() { }
public override void EndInit() { }
public override WaitForChangedResult WaitForChanged(WatcherChangeTypes changeType) => default(WaitForChangedResult);
diff --git a/tests/System.IO.Abstractions.Tests/ApiParityTests.cs b/tests/System.IO.Abstractions.Tests/ApiParityTests.cs
index 644d8655a..7e9e63884 100644
--- a/tests/System.IO.Abstractions.Tests/ApiParityTests.cs
+++ b/tests/System.IO.Abstractions.Tests/ApiParityTests.cs
@@ -52,6 +52,13 @@ public class ApiParityTests
typeof(System.IO.Abstractions.PathBase)
);
+ [Test]
+ public void FileSystemWatcher() =>
+ AssertParity(
+ typeof(System.IO.FileSystemWatcher),
+ typeof(System.IO.Abstractions.FileSystemWatcherBase)
+ );
+
private void AssertParity(Type referenceType, Type abstractionType)
{
static IEnumerable GetMembers(Type type) => type
diff --git a/tests/System.IO.Abstractions.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET 5.0.snap b/tests/System.IO.Abstractions.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET 5.0.snap
new file mode 100644
index 000000000..88e8f40d4
--- /dev/null
+++ b/tests/System.IO.Abstractions.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET 5.0.snap
@@ -0,0 +1,17 @@
+{
+ "ExtraMembers": [
+ "Void Dispose(Boolean)"
+ ],
+ "MissingMembers": [
+ "System.ComponentModel.IContainer Container",
+ "System.ComponentModel.IContainer get_Container()",
+ "System.EventHandler Disposed",
+ "System.Object GetLifetimeService()",
+ "System.Object InitializeLifetimeService()",
+ "Void .ctor()",
+ "Void .ctor(System.String)",
+ "Void .ctor(System.String, System.String)",
+ "Void add_Disposed(System.EventHandler)",
+ "Void remove_Disposed(System.EventHandler)"
+ ]
+}
diff --git a/tests/System.IO.Abstractions.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET Core 2.1.snap b/tests/System.IO.Abstractions.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET Core 2.1.snap
new file mode 100644
index 000000000..88e8f40d4
--- /dev/null
+++ b/tests/System.IO.Abstractions.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET Core 2.1.snap
@@ -0,0 +1,17 @@
+{
+ "ExtraMembers": [
+ "Void Dispose(Boolean)"
+ ],
+ "MissingMembers": [
+ "System.ComponentModel.IContainer Container",
+ "System.ComponentModel.IContainer get_Container()",
+ "System.EventHandler Disposed",
+ "System.Object GetLifetimeService()",
+ "System.Object InitializeLifetimeService()",
+ "Void .ctor()",
+ "Void .ctor(System.String)",
+ "Void .ctor(System.String, System.String)",
+ "Void add_Disposed(System.EventHandler)",
+ "Void remove_Disposed(System.EventHandler)"
+ ]
+}
diff --git a/tests/System.IO.Abstractions.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET Core 3.1.snap b/tests/System.IO.Abstractions.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET Core 3.1.snap
new file mode 100644
index 000000000..4253f0334
--- /dev/null
+++ b/tests/System.IO.Abstractions.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET Core 3.1.snap
@@ -0,0 +1,19 @@
+{
+ "ExtraMembers": [
+ "Void Dispose(Boolean)"
+ ],
+ "MissingMembers": [
+ "System.Collections.ObjectModel.Collection`1[System.String] Filters",
+ "System.Collections.ObjectModel.Collection`1[System.String] get_Filters()",
+ "System.ComponentModel.IContainer Container",
+ "System.ComponentModel.IContainer get_Container()",
+ "System.EventHandler Disposed",
+ "System.Object GetLifetimeService()",
+ "System.Object InitializeLifetimeService()",
+ "Void .ctor()",
+ "Void .ctor(System.String)",
+ "Void .ctor(System.String, System.String)",
+ "Void add_Disposed(System.EventHandler)",
+ "Void remove_Disposed(System.EventHandler)"
+ ]
+}
diff --git a/tests/System.IO.Abstractions.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET Framework 4.6.1.snap b/tests/System.IO.Abstractions.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET Framework 4.6.1.snap
new file mode 100644
index 000000000..8032cae42
--- /dev/null
+++ b/tests/System.IO.Abstractions.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET Framework 4.6.1.snap
@@ -0,0 +1,18 @@
+{
+ "ExtraMembers": [
+ "Void Dispose(Boolean)"
+ ],
+ "MissingMembers": [
+ "System.ComponentModel.IContainer Container",
+ "System.ComponentModel.IContainer get_Container()",
+ "System.EventHandler Disposed",
+ "System.Object GetLifetimeService()",
+ "System.Object InitializeLifetimeService()",
+ "System.Runtime.Remoting.ObjRef CreateObjRef(System.Type)",
+ "Void .ctor()",
+ "Void .ctor(System.String)",
+ "Void .ctor(System.String, System.String)",
+ "Void add_Disposed(System.EventHandler)",
+ "Void remove_Disposed(System.EventHandler)"
+ ]
+}
diff --git a/version.json b/version.json
index 6da463ddb..0098726ee 100644
--- a/version.json
+++ b/version.json
@@ -1,6 +1,6 @@
{
"$schema": "https://raw.githubusercontent.com/AArnott/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json",
- "version": "13.1",
+ "version": "13.2",
"assemblyVersion": {
"precision": "major"
},