@@ -96,6 +96,44 @@ defmodule Forge.DocumentTest do
9696 { :ok , doc } = run_changes ( "hello there" , [ range_change ] )
9797 assert "hello people" == text ( doc )
9898 end
99+
100+ test "applying batched incremental changes" do
101+ content = """
102+ defmodule Proxy do
103+ String.dow
104+ end
105+ """
106+
107+ expected = """
108+ defmodule Proxy do
109+ String.downcase(string)
110+ end
111+ """
112+
113+ changes = [
114+ % { text: "" , range: new_range ( 1 , 11 , 1 , 12 ) , range_length: 1 } ,
115+ % { text: "" , range: new_range ( 1 , 10 , 1 , 11 ) , range_length: 1 } ,
116+ % { text: "" , range: new_range ( 1 , 9 , 1 , 10 ) , range_length: 1 } ,
117+ % { text: "d" , range: new_range ( 1 , 9 , 1 , 9 ) , range_length: 0 } ,
118+ % { text: "o" , range: new_range ( 1 , 10 , 1 , 10 ) , range_length: 0 } ,
119+ % { text: "w" , range: new_range ( 1 , 11 , 1 , 11 ) , range_length: 0 } ,
120+ % { text: "n" , range: new_range ( 1 , 12 , 1 , 12 ) , range_length: 0 } ,
121+ % { text: "c" , range: new_range ( 1 , 13 , 1 , 13 ) , range_length: 0 } ,
122+ % { text: "a" , range: new_range ( 1 , 14 , 1 , 14 ) , range_length: 0 } ,
123+ % { text: "s" , range: new_range ( 1 , 15 , 1 , 15 ) , range_length: 0 } ,
124+ % { text: "e" , range: new_range ( 1 , 16 , 1 , 17 ) , range_length: 0 } ,
125+ % { text: "" , range: new_range ( 1 , 9 , 1 , 17 ) , range_length: 8 } ,
126+ % { text: "" , range: new_range ( 1 , 9 , 1 , 9 ) , range_length: 0 } ,
127+ % { text: "downcase(" , range: new_range ( 1 , 9 , 1 , 9 ) , range_length: 0 } ,
128+ % { text: "string" , range: new_range ( 1 , 18 , 1 , 18 ) , range_length: 0 } ,
129+ % { text: ")" , range: new_range ( 1 , 24 , 1 , 24 ) , range_length: 0 } ,
130+ % { text: "" , range: new_range ( 1 , 25 , 1 , 25 ) , range_length: 0 }
131+ ]
132+
133+ { :ok , doc } = run_changes ( content , changes )
134+
135+ assert text ( doc ) == expected
136+ end
99137 end
100138
101139 describe "apply_content_changes" do
0 commit comments