blob: bc8d8542a62a08cb353f1159f3607d1b45fc36bc [file] [log] [blame]
package org.unicode.icu.tool.cldrtoicu.ant;
import com.google.common.collect.ImmutableList;
import com.google.common.truth.BooleanSubject;
import com.google.common.truth.Truth;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.Arrays;
@RunWith(JUnit4.class)
public class CleanOutputDirectoryTaskTest {
// Not using the original field since we want this test to fail if this changes unexpectedly.
private static final String WAS_GENERATED_LABEL =
"Generated using tools/cldr/cldr-to-icu/build-icu-data.xml";
// Commented version of the label for test data.
private static final String WAS_GENERATED_LINE = "// " + WAS_GENERATED_LABEL;
private final static ImmutableList<String> HEADER = ImmutableList.of(
"Header#1",
"Header#2",
WAS_GENERATED_LABEL);
@Test
public void testWasFileAutoGenerated_lenientMatching() throws IOException {
// Testing comment prefixes (// or # supported equally)
assertWasAutogenerated("// Header#1", "// Header#2").isTrue();
assertWasAutogenerated("# Header#1", "# Header#2").isTrue();
assertWasAutogenerated("# Header#1", "// Header#2").isTrue();
assertWasAutogenerated("// Header#1", "//Header#2").isTrue();
// Extra lines
assertWasAutogenerated("// Header#1", "// Header#2", "// More comment", "Not a comment").isTrue();
// BOM is ignored on first line
assertWasAutogenerated("\uFEFF// Header#1", "// Header#2").isTrue();
}
@Test
public void testWasFileAutoGenerated_lenientMatching_fail() throws IOException {
// New blank line.
assertWasAutogenerated("", "// Header#1", "// Header#2").isFalse();
// Duplicated line.
assertWasAutogenerated("// Header#1", "// Header#1").isFalse();
// Reversed lines.
assertWasAutogenerated("// Header#2", "// Header#1").isFalse();
// Not commented.
assertWasAutogenerated("Header#1", "Header#2").isFalse();
// Extra blank line.
assertWasAutogenerated("// Header#1", "", "// Header#2").isFalse();
// Misplaced BOM.
assertWasAutogenerated("// Header#1", "\uFEFF// Header#2").isFalse();
}
@Test
public void testWasFileAutoGenerated_withLabel() throws IOException {
// With the label in the header comment section everything passes.
assertWasAutogenerated("// Header#1", "// Header#2", WAS_GENERATED_LINE).isTrue();
assertWasAutogenerated("// Hello", "// World", WAS_GENERATED_LINE).isTrue();
assertWasAutogenerated("// Shorter Header", WAS_GENERATED_LINE).isTrue();
assertWasAutogenerated("// This", "// Is", "// A", "// Longer", "// Header", WAS_GENERATED_LINE).isTrue();
assertWasAutogenerated("// Where the label is", WAS_GENERATED_LINE, "// Does not matter").isTrue();
assertWasAutogenerated(WAS_GENERATED_LINE).isTrue();
}
@Test
public void testWasFileAutoGenerated_matchingEndsAfterComments() throws IOException {
assertWasAutogenerated("// Header#1", "// Header#Changed", WAS_GENERATED_LINE).isTrue();
// Label outside the header comment section does not count.
assertWasAutogenerated("// Header#1", "// Header#Changed", "Not a comment", WAS_GENERATED_LINE).isFalse();
}
private static BooleanSubject assertWasAutogenerated(String... fileLines) throws IOException {
return Truth.assertWithMessage("wasAutogenerated: %s", Arrays.asList(fileLines))
.that(CleanOutputDirectoryTask.wasFileAutoGenerated(testFile(fileLines), HEADER));
}
private static BufferedReader testFile(String... lines) {
return new BufferedReader(new StringReader(String.join("\n", lines) + "\n"));
}
}