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,42 @@ 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 (testrepo : Repository , rot13_filter : Filter ) -> None :
197+ fl = testrepo .load_filter_list ('bye.txt' )
198+ assert fl is not None
199+ assert len (fl ) == 1
200+ assert 'rot13' in fl
201+
202+ filtered = fl .apply_to_file (testrepo , 'bye.txt' )
203+ assert filtered == b'olr jbeyq\n '
204+
205+
206+ def test_filterlist_apply_to_blob (testrepo : Repository , rot13_filter : Filter ) -> None :
207+ fl = testrepo .load_filter_list ('whatever.txt' )
208+ assert fl is not None
209+ assert len (fl ) == 1
210+ assert 'rot13' in fl
211+
212+ blob_oid = testrepo .create_blob (b'bye world\n ' )
213+ blob = testrepo [blob_oid ]
214+ assert isinstance (blob , Blob )
215+
216+ filtered = fl .apply_to_blob (blob )
217+ assert filtered == b'olr jbeyq\n '
218+
219+
220+ def test_filterlist_apply_to_buffer_multiple (
221+ testrepo : Repository , rot13_filter : Filter
222+ ) -> None :
223+ testrepo .config ['core.autocrlf' ] = True
224+
225+ fl = testrepo .load_filter_list ('whatever.txt' )
226+ assert fl is not None
227+ assert len (fl ) == 2
228+ assert 'crlf' in fl
229+ assert 'rot13' in fl
230+
231+ filtered = fl .apply_to_buffer (b'bye\r \n world\r \n ' )
232+ assert filtered == b'olr\n jbeyq\n '
0 commit comments