@@ -93,3 +93,150 @@ func TestRemoveFile_Error(t *testing.T) {
9393 t .Errorf ("RemoveFile() error = %v, wantErr %v" , err , syscall .ENOTEMPTY )
9494 }
9595}
96+
97+ func TestReplace (t * testing.T ) {
98+ dir := t .TempDir ()
99+ path := filepath .Join (dir , "test.txt" )
100+ content := "Hello World"
101+ original := "World"
102+ replacement := "Go"
103+ want := "Hello Go"
104+ if err := os .WriteFile (path , []byte (content ), 0644 ); err != nil {
105+ t .Fatal (err )
106+ }
107+ if err := Replace (path , original , replacement ); err != nil {
108+ t .Fatal (err )
109+ }
110+ gotBytes , err := os .ReadFile (path )
111+ if err != nil {
112+ t .Fatal (err )
113+ }
114+ got := string (gotBytes )
115+ if diff := cmp .Diff (want , got ); diff != "" {
116+ t .Errorf ("mismatch (-want +got):\n %s" , diff )
117+ }
118+ }
119+
120+ func TestReplaceRegex (t * testing.T ) {
121+ t .Parallel ()
122+ for _ , test := range []struct {
123+ name string
124+ content string
125+ pattern string
126+ replacement string
127+ want string
128+ }{
129+ {
130+ name : "simple replacement" ,
131+ content : "Hello World" ,
132+ pattern : "World" ,
133+ replacement : "Go" ,
134+ want : "Hello Go" ,
135+ },
136+ {
137+ name : "regex replacement" ,
138+ content : "Hello 123 World" ,
139+ pattern : `\d+` ,
140+ replacement : "Number" ,
141+ want : "Hello Number World" ,
142+ },
143+ } {
144+ t .Run (test .name , func (t * testing.T ) {
145+ t .Parallel ()
146+ dir := t .TempDir ()
147+ path := filepath .Join (dir , "test.txt" )
148+ if err := os .WriteFile (path , []byte (test .content ), 0644 ); err != nil {
149+ t .Fatal (err )
150+ }
151+ if err := ReplaceRegex (path , test .pattern , test .replacement ); err != nil {
152+ t .Fatal (err )
153+ }
154+ gotBytes , err := os .ReadFile (path )
155+ if err != nil {
156+ t .Fatal (err )
157+ }
158+ got := string (gotBytes )
159+ if diff := cmp .Diff (test .want , got ); diff != "" {
160+ t .Errorf ("mismatch (-want +got):\n %s" , diff )
161+ }
162+ })
163+ }
164+ }
165+
166+ func TestReplace_Error (t * testing.T ) {
167+ for _ , test := range []struct {
168+ name string
169+ content string
170+ original string
171+ replacement string
172+ wantErr error
173+ }{
174+ {
175+ name : "file does not exist" ,
176+ original : "old" ,
177+ replacement : "new" ,
178+ wantErr : fs .ErrNotExist ,
179+ },
180+ {
181+ name : "text not found" ,
182+ content : "Hello World" ,
183+ original : "Apple" ,
184+ replacement : "Go" ,
185+ wantErr : errTextNotFound ,
186+ },
187+ } {
188+ t .Run (test .name , func (t * testing.T ) {
189+ dir := t .TempDir ()
190+ path := filepath .Join (dir , "nonexistent.txt" )
191+ if test .content != "" {
192+ path = filepath .Join (dir , "test.txt" )
193+ if err := os .WriteFile (path , []byte (test .content ), 0644 ); err != nil {
194+ t .Fatal (err )
195+ }
196+ }
197+ err := Replace (path , test .original , test .replacement )
198+ if ! errors .Is (err , test .wantErr ) {
199+ t .Errorf ("Replace() returned unexpected error: got %v, want %v" , err , test .wantErr )
200+ }
201+ })
202+ }
203+ }
204+
205+ func TestReplaceRegex_Error (t * testing.T ) {
206+ for _ , test := range []struct {
207+ name string
208+ content string
209+ pattern string
210+ replacement string
211+ wantErr error
212+ }{
213+ {
214+ name : "file does not exist" ,
215+ pattern : "old" ,
216+ replacement : "new" ,
217+ wantErr : fs .ErrNotExist ,
218+ },
219+ {
220+ name : "pattern not found" ,
221+ content : "Hello World" ,
222+ pattern : `\d+` ,
223+ replacement : "Number" ,
224+ wantErr : errTextNotFound ,
225+ },
226+ } {
227+ t .Run (test .name , func (t * testing.T ) {
228+ dir := t .TempDir ()
229+ path := filepath .Join (dir , "nonexistent.txt" )
230+ if test .content != "" {
231+ path = filepath .Join (dir , "test.txt" )
232+ if err := os .WriteFile (path , []byte (test .content ), 0644 ); err != nil {
233+ t .Fatal (err )
234+ }
235+ }
236+ err := ReplaceRegex (path , test .pattern , test .replacement )
237+ if ! errors .Is (err , test .wantErr ) {
238+ t .Errorf ("ReplaceRegex() returned unexpected error: got %v, want %v" , err , test .wantErr )
239+ }
240+ })
241+ }
242+ }
0 commit comments