Skip to content

Commit 7d09b92

Browse files
committed
tests and refactor
1 parent 2a6f5e6 commit 7d09b92

File tree

2 files changed

+80
-8
lines changed

2 files changed

+80
-8
lines changed

src/main/java/com/crowdin/cli/utils/PlaceholderUtil.java

+14-8
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,16 @@ public class PlaceholderUtil {
5353
private static final String SET_CLOSE_BRACKET = "]";
5454
public static final String ROUND_BRACKET_OPEN = "(";
5555
public static final String ROUND_BRACKET_CLOSE = ")";
56-
public static final String ESCAPE_ROUND_BRACKET_OPEN = isWindows() ? "^(" : "\\(";
57-
public static final String ESCAPE_ROUND_BRACKET_CLOSE = isWindows() ? "^)" : "\\)";
58-
private static final String ESCAPE_DOT = isWindows() ? "^." : "\\.";
56+
public static final String ESCAPE_ROUND_BRACKET_OPEN = "\\(";
57+
public static final String ESCAPE_ROUND_BRACKET_CLOSE = "\\)";
58+
private static final String ESCAPE_DOT = "\\.";
59+
private static final String ESCAPE_DOT_WIN = "^.";
5960
private static final String ESCAPE_DOT_PLACEHOLDER = "{ESCAPE_DOT}";
60-
private static final String ESCAPE_QUESTION = isWindows() ? "^?" : "\\?";
61+
private static final String ESCAPE_QUESTION = "\\?";
62+
private static final String ESCAPE_QUESTION_WIN = "^?";
6163
private static final String ESCAPE_QUESTION_PLACEHOLDER = "{ESCAPE_QUESTION_MARK}";
62-
private static final String ESCAPE_ASTERISK = isWindows() ? "^*" : "\\*";
64+
private static final String ESCAPE_ASTERISK = "\\*";
65+
private static final String ESCAPE_ASTERISK_WIN = "^*";
6366
private static final String ESCAPE_ASTERISK_PLACEHOLDER = "{ESCAPE_ASTERISK}";
6467
private static final String ESCAPE_ASTERISK_REPLACEMENT_FROM = ".+" + Utils.PATH_SEPARATOR;
6568
private static final String ESCAPE_ASTERISK_REPLACEMENT_TO = "(.+" + Utils.PATH_SEPARATOR_REGEX + ")?";
@@ -230,13 +233,16 @@ public List<String> formatForRegex(List<String> toFormat, boolean onProjectLangs
230233
}
231234

232235
public static String formatSourcePatternForRegex(String toFormat) {
233-
if(isWindows()){
236+
if(isWindows()) {
234237
toFormat = toFormat
235-
.replace("\\", "\\\\");
238+
.replace("\\", "\\\\")
239+
.replace(ESCAPE_DOT_WIN, ESCAPE_DOT)
240+
.replace(ESCAPE_ASTERISK_WIN, ESCAPE_ASTERISK)
241+
.replace(ESCAPE_QUESTION_WIN, ESCAPE_QUESTION);
236242
}
237243
toFormat = toFormat
238244
.replace(ESCAPE_DOT, ESCAPE_DOT_PLACEHOLDER)
239-
.replace(DOT, "\\.")
245+
.replace(DOT, ESCAPE_DOT)
240246
.replace(ESCAPE_DOT_PLACEHOLDER, ESCAPE_DOT)
241247

242248
.replace(ESCAPE_QUESTION, ESCAPE_QUESTION_PLACEHOLDER)

src/test/java/com/crowdin/cli/commands/functionality/SourcesUtilsTest.java

+66
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,72 @@ public void testFilterProjectFiles_dest() {
361361
assertThat(actual, containsInAnyOrder(expected));
362362
}
363363

364+
@ParameterizedTest
365+
@MethodSource
366+
@DisabledOnOs({OS.LINUX, OS.MAC})
367+
public void testFilterProjectFiles_escapeSymbols_windows(List<String> filePaths, String sourcePattern, List<String> expected) {
368+
List<String> actual = SourcesUtils.filterProjectFiles(
369+
filePaths, sourcePattern, Collections.emptyList(), true, PlaceholderUtilBuilder.STANDART.build(""));
370+
assertEquals(expected.size(), actual.size());
371+
assertThat(actual, containsInAnyOrder(expected.toArray()));
372+
}
373+
374+
static Stream<Arguments> testFilterProjectFiles_escapeSymbols_windows() {
375+
String file1 = "file?1.po";
376+
String file2Here = "here\\file*2.po";
377+
String file3There = "here\\there\\file.3.po";
378+
return Stream.of(
379+
arguments(
380+
Arrays.asList(file1, file2Here, file3There),
381+
"file^?1.po",
382+
Arrays.asList(file1)
383+
),
384+
arguments(
385+
Arrays.asList(file1, file2Here, file3There),
386+
"here\\file^*2.po",
387+
Arrays.asList(file2Here)
388+
),
389+
arguments(
390+
Arrays.asList(file1, file2Here, file3There),
391+
"here\\there\\file^.3.po",
392+
Arrays.asList(file3There)
393+
)
394+
);
395+
}
396+
397+
@ParameterizedTest
398+
@MethodSource
399+
@DisabledOnOs({OS.WINDOWS})
400+
public void testFilterProjectFiles_escapeSymbols_unix(List<String> filePaths, String sourcePattern, List<String> expected) {
401+
List<String> actual = SourcesUtils.filterProjectFiles(
402+
filePaths, sourcePattern, Collections.emptyList(), true, PlaceholderUtilBuilder.STANDART.build(""));
403+
assertEquals(expected.size(), actual.size());
404+
assertThat(actual, containsInAnyOrder(expected.toArray()));
405+
}
406+
407+
static Stream<Arguments> testFilterProjectFiles_escapeSymbols_unix() {
408+
String file1 = "file?1.po";
409+
String file2Here = "here/file*2.po";
410+
String file3There = "here/there/file.3.po";
411+
return Stream.of(
412+
arguments(
413+
Arrays.asList(file1, file2Here, file3There),
414+
"file\\?1.po",
415+
Arrays.asList(file1)
416+
),
417+
arguments(
418+
Arrays.asList(file1, file2Here, file3There),
419+
"here/file\\*2.po",
420+
Arrays.asList(file2Here)
421+
),
422+
arguments(
423+
Arrays.asList(file1, file2Here, file3There),
424+
"here/there/file\\.3.po",
425+
Arrays.asList(file3There)
426+
)
427+
);
428+
}
429+
364430
@ParameterizedTest
365431
@MethodSource
366432
public void testContainsParameter(String sourcePattern, boolean expected) {

0 commit comments

Comments
 (0)