From 65de5f117a899c8b358f6d9b57e8c71d103fe353 Mon Sep 17 00:00:00 2001 From: Florian Greinacher Date: Thu, 26 Nov 2020 01:43:20 +0100 Subject: [PATCH] feat: add IFileSystemWatcher.Filters (#680) --- Directory.Build.props | 1 + .../FileSystemWatcherBase.cs | 5 +++++ .../FileSystemWatcherWrapper.cs | 7 +++++++ .../IFileSystemWatcher.cs | 4 ++++ .../MockFileSystemTests.cs | 4 ++++ .../ApiParityTests.cs | 7 +++++++ ...arityTests.FileSystemWatcher_.NET 5.0.snap | 17 +++++++++++++++++ ...Tests.FileSystemWatcher_.NET Core 2.1.snap | 17 +++++++++++++++++ ...Tests.FileSystemWatcher_.NET Core 3.1.snap | 19 +++++++++++++++++++ ...ileSystemWatcher_.NET Framework 4.6.1.snap | 18 ++++++++++++++++++ version.json | 2 +- 11 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 tests/System.IO.Abstractions.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET 5.0.snap create mode 100644 tests/System.IO.Abstractions.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET Core 2.1.snap create mode 100644 tests/System.IO.Abstractions.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET Core 3.1.snap create mode 100644 tests/System.IO.Abstractions.Tests/__snapshots__/ApiParityTests.FileSystemWatcher_.NET Framework 4.6.1.snap 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" },