@@ -83,7 +83,7 @@ private void verifyTypeCorrectRenaming(loc root, list[DocumentEdit] edits, PathC
83
83
list [ModuleMessages ] checkBefore = checkAll (root , ccfg );
84
84
85
85
// Back-up sources
86
- loc backupLoc = |memory://tests/backup| ;
86
+ loc backupLoc = |memory:/// tests/backup| ;
87
87
remove (backupLoc , recursive = true );
88
88
copy (root , backupLoc , recursive = true );
89
89
@@ -118,76 +118,82 @@ bool expectEq(&T expected, &T actual, str epilogue = "") {
118
118
return true ;
119
119
}
120
120
121
- bool testRenameOccurrences (set [TestModule ] modules , str oldName = "foo" , str newName = "bar" ) {
122
- bool success = true ;
123
-
121
+ bool testProject (set [TestModule ] modules , str testName , bool (set [TestModule ] mods , loc testDir , PathConfig pcfg ) doCheck ) {
122
+ loc testDir = |unknown:///| ;
124
123
bool moduleExistsOnDisk = any (mmm <- modules , mmm is byLoc );
125
- for (mm <- modules , cursorOcc <- (mm .nameOccs - mm .skipCursors )) {
126
- loc testDir = |unknown:///| ;
127
- if (moduleExistsOnDisk ){
128
- testDir = cover ([m .file .parent | m <- modules , m is byLoc ]).parent ;
129
- } else {
130
- // If none of the modules refers to an existing file, clear the test directory before writing files.
131
- str testName = "Test_<mm .name > _<cursorOcc > " ;
132
- testDir = |memory ://tests/rename/<testName>|;
133
- remove (testDir );
134
- }
124
+ if (moduleExistsOnDisk ){
125
+ testDir = cover ([m .file .parent | m <- modules , m is byLoc ]).parent ;
126
+ } else {
127
+ // If none of the modules refers to an existing file, clear the test directory before writing files.
128
+ testDir = |memory :///tests/rename/<testName>|;
129
+ remove (testDir );
130
+ }
135
131
136
- pcfg = getTestPathConfig (testDir );
137
- modulesByLocation = {mByLoc | m <- modules , mByLoc := (m is byLoc ? m : byLoc (m .name , storeTestModule (testDir , m .name , m .body ), m .nameOccs , newName = m .newName , skipCursors = m .skipCursors ))};
132
+ pcfg = getTestPathConfig (testDir );
133
+ modulesByLocation = {mByLoc | m <- modules , mByLoc := (m is byLoc ? m : byLoc (m .name , storeTestModule (testDir , m .name , m .body ), m .nameOccs , newName = m .newName , skipCursors = m .skipCursors ))};
138
134
139
- for (m <- modulesByLocation ) {
140
- try {
141
- parse (#start [Module ], m .file );
142
- } catch ParseError (l ): {
143
- throw "Parse error in test module <m .file > : <l > " ;
144
- }
135
+ for (m <- modulesByLocation ) {
136
+ try {
137
+ parse (#start [Module ], m .file );
138
+ } catch ParseError (l ): {
139
+ throw "Parse error in test module <m .file > : <l > " ;
145
140
}
141
+ }
146
142
147
- <cursor , focus > = findCursor ([m .file | m <- modulesByLocation , m .name == mm .name ][0 ], oldName , cursorOcc );
143
+ // Do the actual work here
144
+ bool result = doCheck (modulesByLocation , testDir , pcfg );
148
145
149
- println ("Renaming \' <oldName > \' from <focus [0 ].src > " );
150
- <edits , msgs > = rascalRenameSymbol (cursor , focus , newName , toSet (pcfg .srcs ), PathConfig (loc _) { return pcfg ; });
146
+ if (!moduleExistsOnDisk ) {
147
+ remove (testDir );
148
+ }
151
149
152
- throwMessagesIfError (msgs );
150
+ return result ;
151
+ }
153
152
154
- renamesPerModule = (
155
- beforeRename : afterRename
156
- | renamed (oldLoc , newLoc ) <- edits
157
- , beforeRename := safeRelativeModuleName (oldLoc , pcfg )
158
- , afterRename := safeRelativeModuleName (newLoc , pcfg )
159
- );
153
+ bool testRenameOccurrences (set [TestModule ] modules , str oldName = "foo" , str newName = "bar" ) {
154
+ bool success = true ;
155
+ for (mm <- modules , cursorOcc <- (mm .nameOccs - mm .skipCursors )) {
156
+ success = success && testProject (modules , "Test_<mm .name > _<cursorOcc > " , bool (set [TestModule ] modulesByLocation , loc testDir , PathConfig pcfg ) {
157
+ <cursor , focus > = findCursor ([m .file | m <- modulesByLocation , m .name == mm .name ][0 ], oldName , cursorOcc );
158
+
159
+ println ("Renaming \' <oldName > \' from <focus [0 ].src > " );
160
+ <edits , msgs > = rascalRenameSymbol (cursor , focus , newName , toSet (pcfg .srcs ), PathConfig (loc _) { return pcfg ; });
161
+
162
+ throwMessagesIfError (msgs );
163
+
164
+ renamesPerModule = (
165
+ beforeRename : afterRename
166
+ | renamed (oldLoc , newLoc ) <- edits
167
+ , beforeRename := safeRelativeModuleName (oldLoc , pcfg )
168
+ , afterRename := safeRelativeModuleName (newLoc , pcfg )
169
+ );
170
+
171
+ replacesPerModule = toMap ({
172
+ <name , occ >
173
+ | changed (file , changes ) <- edits
174
+ , name := safeRelativeModuleName (file , pcfg )
175
+ , locs := {c .range | c <- changes }
176
+ , occ <- locsToOccs (parseModuleWithSpaces (file ), oldName , locs )
177
+ });
178
+
179
+ editsPerModule = (
180
+ name : <occs , nameAfterRename >
181
+ | srcDir <- pcfg .srcs
182
+ , file <- find (srcDir , "rsc" )
183
+ , name := safeRelativeModuleName (file , pcfg )
184
+ , occs := replacesPerModule [name ] ? {}
185
+ , nameAfterRename := renamesPerModule [name ] ? name
186
+ );
187
+
188
+ expectedEditsPerModule = (name : <m .nameOccs , m .newName > | m <- modulesByLocation , name := safeRelativeModuleName (m .file , pcfg ));
189
+
190
+ if (expectEq (expectedEditsPerModule , editsPerModule , epilogue = "Rename from cursor <focus [0 ].src > failed:" )) {
191
+ verifyTypeCorrectRenaming (testDir , edits , pcfg );
192
+ return true ;
193
+ }
160
194
161
- replacesPerModule = toMap ({
162
- <name , occ >
163
- | changed (file , changes ) <- edits
164
- , name := safeRelativeModuleName (file , pcfg )
165
- , locs := {c .range | c <- changes }
166
- , occ <- locsToOccs (parseModuleWithSpaces (file ), oldName , locs )
195
+ return false ;
167
196
});
168
-
169
- editsPerModule = (
170
- name : <occs , nameAfterRename >
171
- | srcDir <- pcfg .srcs
172
- , file <- find (srcDir , "rsc" )
173
- , name := safeRelativeModuleName (file , pcfg )
174
- , occs := replacesPerModule [name ] ? {}
175
- , nameAfterRename := renamesPerModule [name ] ? name
176
- );
177
-
178
- expectedEditsPerModule = (name : <m .nameOccs , m .newName > | m <- modulesByLocation , name := safeRelativeModuleName (m .file , pcfg ));
179
-
180
- if (!expectEq (expectedEditsPerModule , editsPerModule , epilogue = "Rename from cursor <focus [0 ].src > failed:" )) {
181
- success = false ;
182
- }
183
-
184
- if (success ) {
185
- verifyTypeCorrectRenaming (testDir , edits , pcfg );
186
- }
187
-
188
- if (!moduleExistsOnDisk ) {
189
- remove (testDir );
190
- }
191
197
}
192
198
193
199
return success ;
@@ -308,7 +314,7 @@ private tuple[Edits, set[int]] getEditsAndModule(str stmtsStr, int cursorAtOldNa
308
314
'}" ;
309
315
310
316
// Write the file to disk (and clean up later) to easily emulate typical editor behaviour
311
- loc testDir = |memory ://tests/rename/<moduleName>|;
317
+ loc testDir = |memory :/// tests/rename/<moduleName>|;
312
318
remove (testDir );
313
319
loc moduleFileName = testDir + "rascal" + "<moduleName > .rsc" ;
314
320
writeFile (moduleFileName , moduleStr );
0 commit comments