From b7ee2f8e66b7568d6c93f722b9d08b1f92d3cbd3 Mon Sep 17 00:00:00 2001 From: Jonas Fonseca Date: Mon, 10 Aug 2009 08:59:17 -0400 Subject: [PATCH] Use new CharacterSequence test utility to generate strings Signed-off-by: Jonas Fonseca --- src/org/nbgit/util/exclude/PathPattern.java | 2 +- .../org/nbgit/util/exclude/CharacterSequence.java | 102 +++++++++++++++++++++ .../org/nbgit/util/exclude/PathPatternTest.java | 14 +-- 3 files changed, 106 insertions(+), 12 deletions(-) create mode 100644 test/unit/src/org/nbgit/util/exclude/CharacterSequence.java diff --git a/src/org/nbgit/util/exclude/PathPattern.java b/src/org/nbgit/util/exclude/PathPattern.java index e2b0edc..4d9afcf 100644 --- a/src/org/nbgit/util/exclude/PathPattern.java +++ b/src/org/nbgit/util/exclude/PathPattern.java @@ -50,7 +50,7 @@ public abstract class PathPattern { } } - public static boolean isWildcard(char c) { + private static boolean isWildcard(char c) { return c == '*' || c == '[' || c == '?' || c == '\\'; } diff --git a/test/unit/src/org/nbgit/util/exclude/CharacterSequence.java b/test/unit/src/org/nbgit/util/exclude/CharacterSequence.java new file mode 100644 index 0000000..e33dee8 --- /dev/null +++ b/test/unit/src/org/nbgit/util/exclude/CharacterSequence.java @@ -0,0 +1,102 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 2009 Jonas Fonseca + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common + * Development and Distribution License("CDDL") (collectively, the + * "License"). You may not use this file except in compliance with the + * License. You can obtain a copy of the License at + * http://www.netbeans.org/cddl-gplv2.html. See the License for the + * specific language governing permissions and limitations under the + * License. When distributing the software, include this License Header + * Notice in each file. + * + * This particular file is subject to the "Classpath" exception as provided + * by Sun in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the + * License Header, with the fields enclosed by brackets [] replaced by + * your own identifying information: + * "Portions Copyrighted [year] [name of copyright owner]" + * + * Contributor(s): + * + * If you wish your version of this file to be governed by only the CDDL + * or only the GPL Version 2, indicate your decision by adding + * "[Contributor] elects to include this software in this distribution + * under the [CDDL or GPL Version 2] license." If you do not indicate a + * single choice of license, a recipient has the option to distribute + * your version of this file under either the CDDL, the GPL Version 2 or + * to extend the choice of license to its licensees as provided above. + * However, if you add GPL Version 2 code and therefore, elected the GPL + * Version 2 license, then the option applies only if the new code is + * made subject to such option by the copyright holder. + */ +package org.nbgit.util.exclude; + +import java.util.Iterator; +import java.util.NoSuchElementException; + +public class CharacterSequence implements Iterable { + + public static final String WILDCARD_CHARS = "*[?\\"; + private final String except; + private final int from, to; + + private CharacterSequence(int from, int to, String except) { + this.from = from - 1; + this.to = to; + this.except = except; + } + + public static CharacterSequence create(int from, int to, String except) { + return new CharacterSequence(from, to, except); + } + + public Iterator iterator() { + return new Generator(); + } + + private class Generator implements Iterator { + + private int current = from; + + private String toString(int value) { + try { + return String.valueOf(Character.toChars(value)[0]); + } catch (Throwable error) { + throw new IllegalArgumentException("Using " + value); + } + } + + private int nextInt() { + for (int i = current + 1; i <= to; i++) { + if (!except.contains(toString(i))) { + return i; + } + } + return -1; + } + + public boolean hasNext() { + return isValidRange(nextInt()); + } + + public String next() { + current = nextInt(); + if (!isValidRange(current)) { + throw new NoSuchElementException(); + } + return toString(current); + } + + public void remove() { + throw new UnsupportedOperationException("Not supported yet."); + } + + private boolean isValidRange(int value) { + return value > from && value <= to; + } + } +} diff --git a/test/unit/src/org/nbgit/util/exclude/PathPatternTest.java b/test/unit/src/org/nbgit/util/exclude/PathPatternTest.java index 5dc3a8e..d66faab 100644 --- a/test/unit/src/org/nbgit/util/exclude/PathPatternTest.java +++ b/test/unit/src/org/nbgit/util/exclude/PathPatternTest.java @@ -47,14 +47,8 @@ public class PathPatternTest extends TestCase { }; public void testNoWildCard() { - for (int i = 1; i < 256; i++) { - String string = String.valueOf(Character.toChars(i)); - if (PathPattern.isWildcard(string.charAt(0)) || - string.startsWith("!") || - string.startsWith("/") || - string.length() == 0) { - continue; - } + String reject = CharacterSequence.WILDCARD_CHARS + "!/"; + for (String string : CharacterSequence.create(1, 256, reject)) { pattern(string). matchesFile(string). matchesDir(string); @@ -65,9 +59,7 @@ public class PathPatternTest extends TestCase { } public void testSingleGlob() { - for (int i = 0; i < 256; i++) { - char c = Character.toChars(0)[0]; - String string = String.valueOf(c); + for (String string : CharacterSequence.create(0, 256, "!/")) { pattern(string). matchesFile(string). matchesDir(string); -- 2.11.4.GIT