tikhomirov@269: /* tikhomirov@269: * Copyright (c) 2011 TMate Software Ltd tikhomirov@269: * tikhomirov@269: * This program is free software; you can redistribute it and/or modify tikhomirov@269: * it under the terms of the GNU General Public License as published by tikhomirov@269: * the Free Software Foundation; version 2 of the License. tikhomirov@269: * tikhomirov@269: * This program is distributed in the hope that it will be useful, tikhomirov@269: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@269: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@269: * GNU General Public License for more details. tikhomirov@269: * tikhomirov@269: * For information on how to redistribute this software under tikhomirov@269: * the terms of a license other than GNU General Public License tikhomirov@269: * contact TMate Software at support@hg4j.com tikhomirov@269: */ tikhomirov@269: package org.tmatesoft.hg.test; tikhomirov@269: tikhomirov@269: import java.io.BufferedReader; tikhomirov@269: import java.io.File; tikhomirov@269: import java.io.FileReader; tikhomirov@269: import java.io.StringReader; tikhomirov@269: tikhomirov@269: import org.junit.Rule; tikhomirov@269: import org.junit.Test; tikhomirov@269: import org.tmatesoft.hg.repo.HgIgnore; tikhomirov@269: import org.tmatesoft.hg.repo.HgInternals; tikhomirov@269: import org.tmatesoft.hg.util.Path; tikhomirov@269: tikhomirov@269: /** tikhomirov@269: * tikhomirov@269: * @author Artem Tikhomirov tikhomirov@269: * @author TMate Software Ltd. tikhomirov@269: */ tikhomirov@269: public class TestIgnore { tikhomirov@269: tikhomirov@269: @Rule tikhomirov@269: public ErrorCollectorExt errorCollector = new ErrorCollectorExt(); tikhomirov@269: tikhomirov@269: public static void main(String[] args) throws Throwable { tikhomirov@269: TestIgnore test = new TestIgnore(); tikhomirov@269: test.testGlobWithAlternatives(); tikhomirov@269: test.testComplexFileParse(); tikhomirov@339: test.testSegmentsMatch(); tikhomirov@339: test.testWildcardsDoNotMatchDirectorySeparator(); tikhomirov@269: test.errorCollector.verify(); tikhomirov@269: } tikhomirov@269: tikhomirov@269: @Test tikhomirov@269: public void testGlobWithAlternatives() throws Exception { tikhomirov@269: String content = "syntax:glob\ndoc/*.[0-9].{x,ht}ml"; tikhomirov@269: HgIgnore hgIgnore = HgInternals.newHgIgnore(new StringReader(content)); tikhomirov@269: final Path p1 = Path.create("doc/asd.2.xml"); tikhomirov@269: final Path p2 = Path.create("doc/zxc.6.html"); tikhomirov@269: errorCollector.assertTrue(p1.toString(), hgIgnore.isIgnored(p1)); tikhomirov@269: errorCollector.assertTrue(p2.toString(), hgIgnore.isIgnored(p2)); tikhomirov@269: } tikhomirov@269: tikhomirov@269: @Test tikhomirov@269: public void testComplexFileParse() throws Exception { tikhomirov@269: BufferedReader br = new BufferedReader(new FileReader(new File(Configuration.get().getTestDataDir(), "mercurial.hgignore"))); tikhomirov@269: HgIgnore hgIgnore = HgInternals.newHgIgnore(br); tikhomirov@269: br.close(); tikhomirov@269: Path[] toCheck = new Path[] { tikhomirov@269: Path.create("file.so"), tikhomirov@269: Path.create("a/b/file.so"), tikhomirov@269: Path.create("#abc#"), tikhomirov@269: Path.create(".#abc"), tikhomirov@269: Path.create("locale/en/LC_MESSAGES/hg.mo"), tikhomirov@269: }; tikhomirov@269: for (Path p : toCheck) { tikhomirov@269: errorCollector.assertTrue(p.toString(), hgIgnore.isIgnored(p)); tikhomirov@269: } tikhomirov@269: } tikhomirov@269: tikhomirov@339: @Test tikhomirov@339: public void testSegmentsMatch() throws Exception { tikhomirov@339: String s = "syntax:glob\nbin\n.*\nTEST-*.xml"; tikhomirov@339: HgIgnore hgIgnore = HgInternals.newHgIgnore(new StringReader(s)); tikhomirov@339: Path[] toCheck = new Path[] { tikhomirov@339: Path.create("bin/org/sample/First.class"), tikhomirov@339: Path.create(".ignored-file"), tikhomirov@339: Path.create("dir/.ignored-file"), tikhomirov@339: Path.create("dir/.ignored-dir/file"), tikhomirov@339: Path.create("TEST-a.xml"), tikhomirov@339: Path.create("dir/TEST-b.xml"), tikhomirov@339: }; tikhomirov@339: for (Path p : toCheck) { tikhomirov@339: errorCollector.assertTrue(p.toString(), hgIgnore.isIgnored(p)); tikhomirov@339: } tikhomirov@339: } tikhomirov@339: tikhomirov@339: @Test tikhomirov@339: public void testWildcardsDoNotMatchDirectorySeparator() throws Exception { tikhomirov@339: String s = "syntax:glob\na?b\nc*d"; tikhomirov@339: HgIgnore hgIgnore = HgInternals.newHgIgnore(new StringReader(s)); tikhomirov@339: // shall not be ignored tikhomirov@339: Path[] toPass = new Path[] { tikhomirov@339: Path.create("a/b"), tikhomirov@339: Path.create("a/b/x"), tikhomirov@339: Path.create("x/a/b"), tikhomirov@339: Path.create("axyb"), tikhomirov@339: Path.create("c/d"), tikhomirov@339: Path.create("c/d/x"), tikhomirov@339: Path.create("x/c/d"), tikhomirov@339: }; tikhomirov@339: // shall be ignored tikhomirov@339: Path[] toIgnore = new Path[] { tikhomirov@339: Path.create("axb"), tikhomirov@339: Path.create("a3b"), tikhomirov@339: Path.create("a_b"), tikhomirov@339: Path.create("cd"), tikhomirov@339: Path.create("cxd"), tikhomirov@339: Path.create("cxyd"), tikhomirov@339: Path.create("x/cd"), tikhomirov@339: Path.create("x/cxyd"), tikhomirov@339: Path.create("cd/x"), tikhomirov@339: Path.create("cxyd/x"), tikhomirov@339: }; tikhomirov@339: for (Path p : toIgnore) { tikhomirov@339: errorCollector.assertTrue(p.toString(), hgIgnore.isIgnored(p)); tikhomirov@339: } tikhomirov@339: for (Path p : toPass) { tikhomirov@339: errorCollector.assertTrue(p.toString(), !hgIgnore.isIgnored(p)); tikhomirov@339: } tikhomirov@339: } tikhomirov@269: }