11using System ;
22using System . Collections . Generic ;
3+ using System . Linq ;
34using System . IO ;
45using LibGit2Sharp . Tests . TestHelpers ;
56using Xunit ;
@@ -26,7 +27,7 @@ public void CanRegisterFilterWithSingleAttribute()
2627 [ Fact ]
2728 public void CanRegisterAndUnregisterTheSameFilter ( )
2829 {
29- var filter = new EmptyFilter ( FilterName + 1 , attributes ) ;
30+ var filter = new EmptyFilter ( FilterName , attributes ) ;
3031
3132 var registration = GlobalSettings . RegisterFilter ( filter ) ;
3233 GlobalSettings . DeregisterFilter ( registration ) ;
@@ -38,8 +39,7 @@ public void CanRegisterAndUnregisterTheSameFilter()
3839 [ Fact ]
3940 public void CanRegisterAndDeregisterAfterGarbageCollection ( )
4041 {
41- var filter = new EmptyFilter ( FilterName + 2 , attributes ) ;
42- var filterRegistration = GlobalSettings . RegisterFilter ( filter ) ;
42+ var filterRegistration = GlobalSettings . RegisterFilter ( new EmptyFilter ( FilterName , attributes ) ) ;
4343
4444 GC . Collect ( ) ;
4545
@@ -49,7 +49,7 @@ public void CanRegisterAndDeregisterAfterGarbageCollection()
4949 [ Fact ]
5050 public void SameFilterIsEqual ( )
5151 {
52- var filter = new EmptyFilter ( FilterName + 3 , attributes ) ;
52+ var filter = new EmptyFilter ( FilterName , attributes ) ;
5353 Assert . Equal ( filter , filter ) ;
5454 }
5555
@@ -62,16 +62,16 @@ public void InitCallbackNotMadeWhenFilterNeverUsed()
6262 called = true ;
6363 } ;
6464
65- var filter = new FakeFilter ( FilterName + 11 , attributes ,
66- successCallback ,
67- successCallback ,
68- initializeCallback ) ;
69-
70- var filterRegistration = GlobalSettings . RegisterFilter ( filter ) ;
65+ var filter = new FakeFilter ( FilterName ,
66+ attributes ,
67+ successCallback ,
68+ successCallback ,
69+ initializeCallback ) ;
70+ var registration = GlobalSettings . RegisterFilter ( filter ) ;
7171
7272 Assert . False ( called ) ;
7373
74- GlobalSettings . DeregisterFilter ( filterRegistration ) ;
74+ GlobalSettings . DeregisterFilter ( registration ) ;
7575 }
7676
7777 [ Fact ]
@@ -83,12 +83,12 @@ public void InitCallbackMadeWhenUsingTheFilter()
8383 called = true ;
8484 } ;
8585
86- var filter = new FakeFilter ( FilterName + 12 , attributes ,
87- successCallback ,
88- successCallback ,
89- initializeCallback ) ;
90-
91- var filterRegistration = GlobalSettings . RegisterFilter ( filter ) ;
86+ var filter = new FakeFilter ( FilterName ,
87+ attributes ,
88+ successCallback ,
89+ successCallback ,
90+ initializeCallback ) ;
91+ var registration = GlobalSettings . RegisterFilter ( filter ) ;
9292 Assert . False ( called ) ;
9393
9494 string repoPath = InitNewRepository ( ) ;
@@ -98,7 +98,7 @@ public void InitCallbackMadeWhenUsingTheFilter()
9898 Assert . True ( called ) ;
9999 }
100100
101- GlobalSettings . DeregisterFilter ( filterRegistration ) ;
101+ GlobalSettings . DeregisterFilter ( registration ) ;
102102 }
103103
104104 [ Fact ]
@@ -112,17 +112,17 @@ public void WhenStagingFileApplyIsCalledWithCleanForCorrectPath()
112112 called = true ;
113113 reader . CopyTo ( writer ) ;
114114 } ;
115- var filter = new FakeFilter ( FilterName + 15 , attributes , clean ) ;
116115
117- var filterRegistration = GlobalSettings . RegisterFilter ( filter ) ;
116+ var filter = new FakeFilter ( FilterName , attributes , clean ) ;
117+ var registration = GlobalSettings . RegisterFilter ( filter ) ;
118118
119119 using ( var repo = CreateTestRepository ( repoPath ) )
120120 {
121121 StageNewFile ( repo ) ;
122122 Assert . True ( called ) ;
123123 }
124124
125- GlobalSettings . DeregisterFilter ( filterRegistration ) ;
125+ GlobalSettings . DeregisterFilter ( registration ) ;
126126 }
127127
128128 [ Fact ]
@@ -135,22 +135,20 @@ public void CleanFilterWritesOutputToObjectTree()
135135
136136 Action < Stream , Stream > cleanCallback = SubstitutionCipherFilter . RotateByThirteenPlaces ;
137137
138- var filter = new FakeFilter ( FilterName + 16 , attributes , cleanCallback ) ;
139-
140- var filterRegistration = GlobalSettings . RegisterFilter ( filter ) ;
138+ var filter = new FakeFilter ( FilterName , attributes , cleanCallback ) ;
139+ var registration = GlobalSettings . RegisterFilter ( filter ) ;
141140
142141 using ( var repo = CreateTestRepository ( repoPath ) )
143142 {
144143 FileInfo expectedFile = StageNewFile ( repo , decodedInput ) ;
145144 var commit = repo . Commit ( "Clean that file" ) ;
146-
147145 var blob = ( Blob ) commit . Tree [ expectedFile . Name ] . Target ;
148146
149147 var textDetected = blob . GetContentText ( ) ;
150148 Assert . Equal ( encodedInput , textDetected ) ;
151149 }
152150
153- GlobalSettings . DeregisterFilter ( filterRegistration ) ;
151+ GlobalSettings . DeregisterFilter ( registration ) ;
154152 }
155153
156154 [ Fact ]
@@ -164,16 +162,16 @@ public void WhenCheckingOutAFileFileSmudgeWritesCorrectFileToWorkingDirectory()
164162
165163 Action < Stream , Stream > smudgeCallback = SubstitutionCipherFilter . RotateByThirteenPlaces ;
166164
167- var filter = new FakeFilter ( FilterName + 17 , attributes , null , smudgeCallback ) ;
168- var filterRegistration = GlobalSettings . RegisterFilter ( filter ) ;
165+ var filter = new FakeFilter ( FilterName , attributes , null , smudgeCallback ) ;
166+ var registration = GlobalSettings . RegisterFilter ( filter ) ;
169167
170168 FileInfo expectedFile = CheckoutFileForSmudge ( repoPath , branchName , encodedInput ) ;
171169
172170 string combine = Path . Combine ( repoPath , ".." , expectedFile . Name ) ;
173171 string readAllText = File . ReadAllText ( combine ) ;
174172 Assert . Equal ( decodedInput , readAllText ) ;
175173
176- GlobalSettings . DeregisterFilter ( filterRegistration ) ;
174+ GlobalSettings . DeregisterFilter ( registration ) ;
177175 }
178176
179177 [ Fact ]
@@ -186,8 +184,8 @@ public void CanFilterLargeFiles()
186184
187185 string repoPath = InitNewRepository ( ) ;
188186
189- var filter = new FileExportFilter ( "exportFilter" , attributes ) ;
190- var filterRegistration = GlobalSettings . RegisterFilter ( filter ) ;
187+ var filter = new FileExportFilter ( FilterName , attributes ) ;
188+ var registration = GlobalSettings . RegisterFilter ( filter ) ;
191189
192190 string filePath = Path . Combine ( Directory . GetParent ( repoPath ) . Parent . FullName , Guid . NewGuid ( ) . ToString ( ) + ".blob" ) ;
193191 FileInfo contentFile = new FileInfo ( filePath ) ;
@@ -233,7 +231,31 @@ public void CanFilterLargeFiles()
233231
234232 contentFile . Delete ( ) ;
235233
236- GlobalSettings . DeregisterFilter ( filterRegistration ) ;
234+ GlobalSettings . DeregisterFilter ( registration ) ;
235+ }
236+
237+ [ Fact ]
238+ public void DoubleRegistrationFailsButDoubleDeregistrationDoesNot ( )
239+ {
240+ Assert . Equal ( 0 , GlobalSettings . GetRegisteredFilters ( ) . Count ( ) ) ;
241+
242+ var filter = new EmptyFilter ( FilterName , attributes ) ;
243+ var registration = GlobalSettings . RegisterFilter ( filter ) ;
244+
245+ Assert . Throws < EntryExistsException > ( ( ) => { GlobalSettings . RegisterFilter ( filter ) ; } ) ;
246+ Assert . Equal ( 1 , GlobalSettings . GetRegisteredFilters ( ) . Count ( ) ) ;
247+
248+ Assert . True ( registration . IsValid , "FilterRegistration.IsValid should be true." ) ;
249+
250+ GlobalSettings . DeregisterFilter ( registration ) ;
251+ Assert . Equal ( 0 , GlobalSettings . GetRegisteredFilters ( ) . Count ( ) ) ;
252+
253+ Assert . False ( registration . IsValid , "FilterRegistration.IsValid should be false." ) ;
254+
255+ GlobalSettings . DeregisterFilter ( registration ) ;
256+ Assert . Equal ( 0 , GlobalSettings . GetRegisteredFilters ( ) . Count ( ) ) ;
257+
258+ Assert . False ( registration . IsValid , "FilterRegistration.IsValid should be false." ) ;
237259 }
238260
239261 private unsafe bool CharArrayAreEqual ( char [ ] array1 , char [ ] array2 , int count )
0 commit comments