77
88import pygit2
99from pygit2 import Blob , Filter , FilterSource , Repository
10- from pygit2 .enums import BlobFilter
10+ from pygit2 .enums import BlobFilter , FilterMode
1111from pygit2 .errors import Passthrough
1212
1313
@@ -146,22 +146,31 @@ def test_filterlist_none(testrepo: Repository) -> None:
146146 assert fl is None
147147
148148
149- def test_filterlist_crlf (testrepo : Repository ) -> None :
149+ def test_filterlist_apply_to_buffer_crlf_clean (testrepo : Repository ) -> None :
150150 testrepo .config ['core.autocrlf' ] = True
151151
152- fl = testrepo .load_filter_list ('hello .txt' )
152+ fl = testrepo .load_filter_list ('whatever .txt' , mode = FilterMode . CLEAN )
153153 assert fl is not None
154154 assert len (fl ) == 1
155155 assert 'crlf' in fl
156-
156+ assert 'bogus_filter_name' not in fl
157157 with pytest .raises (TypeError ):
158158 1234 in fl # type: ignore
159159
160+ filtered = fl .apply_to_buffer (b'hello\r \n world\r \n ' )
161+ assert filtered == b'hello\n world\n '
160162
161- def test_filterlist_rot13 (testrepo : Repository , rot13_filter : Filter ) -> None :
162- fl = testrepo .load_filter_list ('hello.txt' )
163+
164+ def test_filterlist_apply_to_buffer_crlf_smudge (testrepo : Repository ) -> None :
165+ testrepo .config ['core.autocrlf' ] = True
166+
167+ fl = testrepo .load_filter_list ('whatever.txt' , mode = FilterMode .SMUDGE )
163168 assert fl is not None
164- assert 'rot13' in fl
169+ assert len (fl ) == 1
170+ assert 'crlf' in fl
171+
172+ filtered = fl .apply_to_buffer (b'hello\n world\n ' )
173+ assert filtered == b'hello\r \n world\r \n '
165174
166175
167176def test_filterlist_dangerous_unregister (testrepo : Repository ) -> None :
@@ -182,3 +191,46 @@ def test_filterlist_dangerous_unregister(testrepo: Repository) -> None:
182191 del fl
183192 gc .collect ()
184193 pygit2 .filter_unregister ('rot13' )
194+
195+
196+ def test_filterlist_apply_to_file (
197+ testrepo : Repository , rot13_filter : Filter
198+ ) -> None :
199+ fl = testrepo .load_filter_list ('bye.txt' )
200+ assert fl is not None
201+ assert len (fl ) == 1
202+ assert 'rot13' in fl
203+
204+ filtered = fl .apply_to_file (testrepo , 'bye.txt' )
205+ assert filtered == b'olr jbeyq\n '
206+
207+
208+ def test_filterlist_apply_to_blob (
209+ testrepo : Repository , rot13_filter : Filter
210+ ) -> None :
211+ fl = testrepo .load_filter_list ('whatever.txt' )
212+ assert fl is not None
213+ assert len (fl ) == 1
214+ assert 'rot13' in fl
215+
216+ blob_oid = testrepo .create_blob (b'bye world\n ' )
217+ blob = testrepo [blob_oid ]
218+ assert isinstance (blob , Blob )
219+
220+ filtered = fl .apply_to_blob (blob )
221+ assert filtered == b'olr jbeyq\n '
222+
223+
224+ def test_filterlist_apply_to_buffer_multiple (
225+ testrepo : Repository , rot13_filter : Filter
226+ ) -> None :
227+ testrepo .config ['core.autocrlf' ] = True
228+
229+ fl = testrepo .load_filter_list ('whatever.txt' )
230+ assert fl is not None
231+ assert len (fl ) == 2
232+ assert 'crlf' in fl
233+ assert 'rot13' in fl
234+
235+ filtered = fl .apply_to_buffer (b'bye\r \n world\r \n ' )
236+ assert filtered == b'olr\n jbeyq\n '
0 commit comments