Skip to content

Commit 019a024

Browse files
committed
tests and refactor
1 parent 0a6ade8 commit 019a024

File tree

4 files changed

+110
-7
lines changed

4 files changed

+110
-7
lines changed

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

+9-4
Original file line numberDiff line numberDiff line change
@@ -230,9 +230,9 @@ public List<String> formatForRegex(List<String> toFormat, boolean onProjectLangs
230230
}
231231

232232
public static String formatSourcePatternForRegex(String toFormat) {
233-
if(isWindows()){
233+
if (isWindows()) {
234234
toFormat = toFormat
235-
.replace("\\", "\\\\");
235+
.replace("\\", "\\\\");
236236
}
237237
toFormat = toFormat
238238
.replace(ESCAPE_DOT, ESCAPE_DOT_PLACEHOLDER)
@@ -254,10 +254,15 @@ public static String formatSourcePatternForRegex(String toFormat) {
254254

255255
toFormat = toFormat
256256
.replace(ROUND_BRACKET_OPEN, ESCAPE_ROUND_BRACKET_OPEN)
257-
258257
.replace(ROUND_BRACKET_CLOSE, ESCAPE_ROUND_BRACKET_CLOSE)
259-
260258
.replace(ESCAPE_ASTERISK_REPLACEMENT_FROM, ESCAPE_ASTERISK_REPLACEMENT_TO);
259+
260+
if (isWindows()) {
261+
toFormat = toFormat
262+
.replace(ESCAPE_ASTERISK, "\\*")
263+
.replace(ESCAPE_DOT, "\\.")
264+
.replace(ESCAPE_QUESTION, "\\?");
265+
}
261266
return toFormat
262267
.replace(PLACEHOLDER_FILE_EXTENSION, "[^/]+")
263268
.replace(PLACEHOLDER_FILE_NAME, "[^/]+")

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

+6-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,12 @@ public static String buildUserAgent() {
8787
}
8888

8989
public static String unixPath(String path) {
90-
return (path != null) ? path.replaceAll("[\\\\/]+", "/") : null;
90+
if (path == null) {
91+
return null;
92+
}
93+
return isWindows()
94+
? path.replaceAll("[\\\\/]+", "/")
95+
: path.replaceAll("\\\\{2,}", "/").replaceAll("/+", "/");
9196
}
9297

9398
public static String windowsPath(String path) {

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

+84
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,90 @@ 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 = "here\\file-1.po";
376+
String file1Symbol = "here\\file?1.po";
377+
String file2 = "here\\file-2.po";
378+
String file2Symbol = "here\\file*2.po";
379+
String file3 = "here\\file-3.po";
380+
String file3Symbol = "here\\file.3.po";
381+
List<String> allFiles = Arrays.asList(file1, file1Symbol, file2, file2Symbol, file3, file3Symbol);
382+
return Stream.of(
383+
arguments(
384+
allFiles,
385+
"here\\file^?1.po",
386+
Arrays.asList(file1Symbol)
387+
),
388+
arguments(
389+
allFiles,
390+
"here\\file^*2.po",
391+
Arrays.asList(file2Symbol)
392+
),
393+
arguments(
394+
allFiles,
395+
"here\\file^.3.po",
396+
Arrays.asList(file3Symbol)
397+
),
398+
arguments(
399+
allFiles,
400+
"here\\*.po",
401+
allFiles
402+
)
403+
);
404+
}
405+
406+
@ParameterizedTest
407+
@MethodSource
408+
@DisabledOnOs(OS.WINDOWS)
409+
public void testFilterProjectFiles_escapeSymbols_unix(List<String> filePaths, String sourcePattern, List<String> expected) {
410+
List<String> actual = SourcesUtils.filterProjectFiles(
411+
filePaths, sourcePattern, Collections.emptyList(), true, PlaceholderUtilBuilder.STANDART.build(""));
412+
assertEquals(expected.size(), actual.size());
413+
assertThat(actual, containsInAnyOrder(expected.toArray()));
414+
}
415+
416+
static Stream<Arguments> testFilterProjectFiles_escapeSymbols_unix() {
417+
String file1 = "here/file-1.po";
418+
String file1Symbol = "here/file?1.po";
419+
String file2 = "here/file-2.po";
420+
String file2Symbol = "here/file*2.po";
421+
String file3 = "here/file-3.po";
422+
String file3Symbol = "here/file.3.po";
423+
List<String> allFiles = Arrays.asList(file1, file1Symbol, file2, file2Symbol, file3, file3Symbol);
424+
return Stream.of(
425+
arguments(
426+
allFiles,
427+
"here/file\\?1.po",
428+
Arrays.asList(file1Symbol)
429+
),
430+
arguments(
431+
allFiles,
432+
"here/file\\*2.po",
433+
Arrays.asList(file2Symbol)
434+
),
435+
arguments(
436+
allFiles,
437+
"here/file\\.3.po",
438+
Arrays.asList(file3Symbol)
439+
),
440+
arguments(
441+
allFiles,
442+
"here/*.po",
443+
allFiles
444+
)
445+
);
446+
}
447+
364448
@ParameterizedTest
365449
@MethodSource
366450
public void testContainsParameter(String sourcePattern, boolean expected) {

src/test/java/com/crowdin/cli/utils/UtilsTest.java

+11-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import java.util.Optional;
44
import org.apache.commons.lang3.SystemUtils;
55
import org.junit.jupiter.api.Test;
6+
import org.junit.jupiter.api.condition.DisabledOnOs;
7+
import org.junit.jupiter.api.condition.OS;
68

79
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
810
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -36,8 +38,15 @@ public void testBuildUserAgent() {
3638
}
3739

3840
@Test
39-
public void testUnixPath() {
40-
assertEquals("/path/to/file", Utils.unixPath("\\path\\to\\file"));
41+
@DisabledOnOs({OS.LINUX, OS.MAC})
42+
public void testUnixPath_windows() {
43+
assertEquals("/path/to/file", Utils.unixPath("\\path\\to\\\\file"));
44+
}
45+
46+
@Test
47+
@DisabledOnOs(OS.WINDOWS)
48+
public void testUnixPath_unix() {
49+
assertEquals("/path/to/file", Utils.unixPath("/path/to\\\\file"));
4150
}
4251

4352
@Test

0 commit comments

Comments
 (0)