11using System ;
2- using System . Collections . Generic ;
32using LibGit2Sharp . Tests . TestHelpers ;
43using Xunit ;
54
@@ -9,17 +8,15 @@ public class FilterFixture : BaseFixture
98 {
109 private const int GitPassThrough = - 30 ;
1110 private readonly FilterCallbacks emptyCallbacks = new FilterCallbacks ( null , null ) ;
12- private readonly List < Filter > filtersForCleanUp ;
1311
14- public FilterFixture ( )
15- {
16- filtersForCleanUp = new List < Filter > ( ) ;
17- }
12+ private const string FilterName = "the-filter" ;
13+ const string Attributes = "test" ;
14+ const int Version = 1 ;
1815
1916 [ Fact ]
20- public void CanRegisterAndUnregisterFilter ( )
17+ public void CanRegisterAndUnregisterTheSameFilter ( )
2118 {
22- var filter = new Filter ( "radness-filter" , "test" , 1 , emptyCallbacks ) ;
19+ var filter = new Filter ( FilterName + 1 , Attributes , Version , emptyCallbacks ) ;
2320
2421 filter . Register ( ) ;
2522 filter . Deregister ( ) ;
@@ -29,36 +26,73 @@ public void CanRegisterAndUnregisterFilter()
2926 }
3027
3128 [ Fact ]
32- public void CanNotRegisterFilterWithTheSameNameMoreThanOnce ( )
29+ public void CanRegisterAndDeregisterAfterGarbageCollection ( )
3330 {
34- var filterOne = CreateFilterForAutomaticCleanUp ( "filter-one" , "test" , 1 ) ;
35- var filterTwo = CreateFilterForAutomaticCleanUp ( "filter-one" , "test" , 1 ) ;
31+ var filter = new Filter ( FilterName + 2 , Attributes , Version , emptyCallbacks ) ;
32+ filter . Register ( ) ;
33+
34+ GC . Collect ( ) ;
3635
37- filterOne . Register ( ) ;
38- Assert . Throws < InvalidOperationException > ( ( ) => filterTwo . Register ( ) ) ;
36+ filter . Deregister ( ) ;
3937 }
4038
4139 [ Fact ]
42- public void CanRegisterAndUnregisterTheSameFilter ( )
40+ public void SameFilterIsEqual ( )
41+ {
42+ var filter = new Filter ( FilterName + 3 , Attributes , Version , emptyCallbacks ) ;
43+ Assert . Equal ( filter , filter ) ;
44+ }
45+
46+ [ Fact ]
47+ public void WhenLookingUpFilterResultIsEqual ( )
48+ {
49+ var filter = new Filter ( FilterName + 4 , Attributes , Version , emptyCallbacks ) ;
50+ filter . Register ( ) ;
51+
52+ var registry = new FilterRegistry ( ) ;
53+ Filter lookupByName = registry . LookupByName ( FilterName + 4 ) ;
54+
55+ filter . Deregister ( ) ;
56+ Assert . Equal ( filter , lookupByName ) ;
57+ }
58+
59+ [ Fact ]
60+ public void LookingUpFilterResultSurvivesGarbageCollection ( )
4361 {
44- var filterOne = new Filter ( "filter-two" , "test" , 1 , emptyCallbacks ) ;
45- filterOne . Register ( ) ;
46- filterOne . Deregister ( ) ;
62+ var filter = new Filter ( FilterName + 5 , Attributes , Version , emptyCallbacks ) ;
63+ filter . Register ( ) ;
64+
65+ GC . Collect ( ) ;
4766
48- var filterTwo = new Filter ( "filter-two" , "test" , 1 , emptyCallbacks ) ;
49- filterTwo . Register ( ) ;
50- filterTwo . Deregister ( ) ;
67+ var registry = new FilterRegistry ( ) ;
68+ Filter lookupByName = registry . LookupByName ( FilterName + 5 ) ;
69+
70+ filter . Deregister ( ) ;
71+ Assert . Equal ( filter , lookupByName ) ;
5172 }
5273
5374 [ Fact ]
5475 public void CanLookupRegisteredFilterByNameAndValuesAreMarshalCorrectly ( )
5576 {
56- const string filterName = "filter-three" ;
57- const string attributes = "test" ;
58- const int version = 1 ;
77+ var filter = new Filter ( FilterName + 6 , Attributes , Version , emptyCallbacks ) ;
78+ filter . Register ( ) ;
79+
80+ var registry = new FilterRegistry ( ) ;
81+ var lookedUpFilter = registry . LookupByName ( FilterName + 6 ) ;
82+
83+ filter . Deregister ( ) ;
5984
85+ Assert . Equal ( FilterName + 6 , lookedUpFilter . Name ) ;
86+ Assert . Equal ( Version , lookedUpFilter . Version ) ;
87+ Assert . Equal ( Attributes , lookedUpFilter . Attributes ) ;
88+ }
89+
90+ [ Fact ]
91+ public void TestingCallbacks ( )
92+ {
6093 string repoPathOne = InitNewRepository ( ) ;
6194 string repoPathTwo = InitNewRepository ( ) ;
95+ var filter = new Filter ( FilterName + 7 , Attributes , Version , emptyCallbacks ) ;
6296
6397 using ( var repoOne = new Repository ( repoPathOne ) )
6498 {
@@ -68,16 +102,30 @@ public void CanLookupRegisteredFilterByNameAndValuesAreMarshalCorrectly()
68102 Console . WriteLine ( "Second" ) ;
69103 StageNewFile ( repoOne , 2 ) ;
70104 }
71- var filter = CreateFilterForAutomaticCleanUp ( filterName , attributes , version ) ;
105+
72106 filter . Register ( ) ;
73107
108+ var lookup = new FilterRegistry ( ) ;
109+ Filter lookupByName = lookup . LookupByName ( FilterName + 7 ) ;
74110
75- var registry = new FilterRegistry ( ) ;
76- var lookedUpFilter = registry . LookupByName ( filterName ) ;
111+ Assert . Equal ( Attributes , lookupByName . Attributes ) ;
112+
113+
114+ Filter lookupByName1 = lookup . LookupByName ( FilterName + 7 ) ;
115+
116+ Assert . Equal ( Attributes , lookupByName1 . Attributes ) ;
117+
118+ GC . Collect ( ) ;
77119
78- Assert . Equal ( filterName , lookedUpFilter . Name ) ;
79- Assert . Equal ( version , lookedUpFilter . Version ) ;
80- Assert . Equal ( attributes , lookedUpFilter . Attributes ) ;
120+ using ( var repoTwo = new Repository ( repoPathTwo ) )
121+ {
122+ Console . WriteLine ( "Third" ) ;
123+ StageNewFile ( repoTwo , 3 ) ;
124+
125+ GC . Collect ( ) ;
126+ }
127+
128+ lookupByName . Deregister ( ) ;
81129 }
82130
83131 [ Fact ]
@@ -87,14 +135,14 @@ public void CheckCallbackNotMadeWhenFileStagedAndFilterNotRegistered()
87135 Func < int > callback = ( ) =>
88136 {
89137 called = true ;
90- return GitPassThrough ;
138+ return GitPassThrough ;
91139 } ;
92140 string repoPath = InitNewRepository ( ) ;
93141 var callbacks = new FilterCallbacks ( callback ) ;
94142 new Filter ( "test-filter" , "filter" , 1 , callbacks ) ;
95143 using ( var repo = new Repository ( repoPath ) )
96144 {
97- StageNewFile ( repo ) ;
145+ StageNewFile ( repo , 55 ) ;
98146 }
99147
100148 Assert . False ( called ) ;
@@ -111,15 +159,15 @@ public void CheckCallbackMadeWhenFileStaged()
111159 } ;
112160 string repoPath = InitNewRepository ( ) ;
113161 var callbacks = new FilterCallbacks ( callback ) ;
114- var filter = new Filter ( "test-filter " , "filter" , 1 , callbacks ) ;
162+ var test = new Filter ( "test-filter33 " , "filter" , 1 , callbacks ) ;
115163 using ( var repo = new Repository ( repoPath ) )
116164 {
117- filter . Register ( ) ;
165+ test . Register ( ) ;
118166
119- StageNewFile ( repo ) ;
167+ StageNewFile ( repo , 22 ) ;
120168 }
121169
122- filter . Deregister ( ) ;
170+ test . Deregister ( ) ;
123171
124172 Assert . True ( called ) ;
125173 }
@@ -137,24 +185,22 @@ public void ApplyCallbackMadeWhenCheckCallbackReturnsZero()
137185
138186 string repoPath = InitNewRepository ( ) ;
139187 var callbacks = new FilterCallbacks ( ( ) => 0 , applyCallback ) ;
140- var filter = new Filter ( "test-filter " , "filter" , 1 , callbacks ) ;
188+ var test = new Filter ( "test-filter55 " , "filter" , 1 , callbacks ) ;
141189 using ( var repo = new Repository ( repoPath ) )
142190 {
143- filter . Register ( ) ;
191+ test . Register ( ) ;
144192
145- StageNewFile ( repo ) ;
193+ StageNewFile ( repo , 44 ) ;
146194 }
147195
148- filter . Deregister ( ) ;
149-
196+ test . Deregister ( ) ;
150197 Assert . True ( called ) ;
151198 }
152199
153200 [ Fact ]
154201 public void ApplyCallbackNotMadeWhenCheckCallbackReturnsPassThrough ( )
155202 {
156203 bool called = false ;
157-
158204 Func < int > applyCallback = ( ) =>
159205 {
160206 called = true ;
@@ -163,44 +209,16 @@ public void ApplyCallbackNotMadeWhenCheckCallbackReturnsPassThrough()
163209
164210 string repoPath = InitNewRepository ( ) ;
165211 var callbacks = new FilterCallbacks ( ( ) => GitPassThrough , applyCallback ) ;
166- var filter = new Filter ( "test-filter" , "filter" , 1 , callbacks ) ;
212+ var test = new Filter ( "test-filter" , "filter" , 1 , callbacks ) ;
167213 using ( var repo = new Repository ( repoPath ) )
168214 {
169- filter . Register ( ) ;
215+ test . Register ( ) ;
170216
171- StageNewFile ( repo ) ;
217+ StageNewFile ( repo , 77 ) ;
172218 }
173- Assert . False ( called ) ;
174-
175- }
176-
177- private static void StageNewFile ( Repository repo )
178- {
179- const string path = "new.txt" ;
180- Touch ( repo . Info . WorkingDirectory , path , "null" ) ;
181- repo . Index . Stage ( path ) ;
182- }
183219
184- private Filter CreateFilterForAutomaticCleanUp ( string name , string attributes , int version )
185- {
186-
187- var filter = new Filter ( name , attributes , version , emptyCallbacks ) ;
188- filtersForCleanUp . Add ( filter ) ;
189- return filter ;
190- }
191-
192- public override void Dispose ( )
193- {
194- foreach ( var filter in filtersForCleanUp )
195- {
196- try
197- {
198- filter . Deregister ( ) ;
199- }
200- catch ( LibGit2SharpException )
201- { }
202- }
203- base . Dispose ( ) ;
220+ test . Deregister ( ) ;
221+ Assert . False ( called ) ;
204222 }
205223
206224 [ Fact ]
@@ -214,7 +232,7 @@ public void CleanUpIsCalledAfterStage()
214232 } ;
215233
216234 string repoPath = InitNewRepository ( ) ;
217- var callbacks = new FilterCallbacks ( ( ) => 0 , ( ) => 0 , ( ) => { } , ( ) => 0 , cleanUpCallback ) ;
235+ var callbacks = new FilterCallbacks ( ( ) => 0 , ( ) => 0 , ( ) => { } , ( ) => 0 , cleanUpCallback ) ;
218236 var test = new Filter ( "test-filter55" , "filter" , 1 , callbacks ) ;
219237 using ( var repo = new Repository ( repoPath ) )
220238 {
@@ -257,7 +275,7 @@ public void ShutdownCallbackMadeWhenDeregisteringFilter()
257275 called = true ;
258276 } ;
259277
260- var callbacks = new FilterCallbacks ( ( ) => 0 , ( ) => 0 , shutdownCallback ) ;
278+ var callbacks = new FilterCallbacks ( ( ) => 0 , ( ) => 0 , shutdownCallback ) ;
261279 var filter = new Filter ( "test-filter" , "filter" , 1 , callbacks ) ;
262280
263281 filter . Register ( ) ;
0 commit comments