From 803a137bc12b2010cd740d2f6726c4a3c10fb422 Mon Sep 17 00:00:00 2001 From: Robert Stupp Date: Thu, 22 Aug 2019 20:13:29 +0200 Subject: [PATCH] Add unit tests Signed-off-by: Robert Stupp --- .../pattern/PatternMatcherFactoryTest.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/subprojects/files/src/test/groovy/org/gradle/api/internal/file/pattern/PatternMatcherFactoryTest.java b/subprojects/files/src/test/groovy/org/gradle/api/internal/file/pattern/PatternMatcherFactoryTest.java index 22e6f580012e..c6aa26cc821c 100644 --- a/subprojects/files/src/test/groovy/org/gradle/api/internal/file/pattern/PatternMatcherFactoryTest.java +++ b/subprojects/files/src/test/groovy/org/gradle/api/internal/file/pattern/PatternMatcherFactoryTest.java @@ -22,6 +22,9 @@ import org.hamcrest.Matcher; import org.junit.Test; +import java.util.LinkedHashSet; +import java.util.Set; + import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.not; import static org.junit.Assert.assertThat; @@ -29,6 +32,42 @@ public class PatternMatcherFactoryTest { private PatternMatcher matcher; + @Test public void testNoStackOverflowForManyPatterns() { + // The only reason for this unit test is to verify that no StackOverflowException is being thrown when + // many patterns are passed to getPatternsMatcher. See https://github.com/gradle/gradle/issues/10329 + Set manyPatterns = new LinkedHashSet(); + for (int i = 0; i < 5000; i++) { + manyPatterns.add("some/package/Some" + i + "ClassName.class"); + manyPatterns.add("some/package/Some" + i + "ClassName.java"); + manyPatterns.add("some/package/Some" + i + "ClassName.h"); + manyPatterns.add("some/package/Some" + i + "ClassName$*.class"); + manyPatterns.add("some/package/Some" + i + "ClassName$*.java"); + manyPatterns.add("some/package/Some" + i + "ClassName$*.h"); + } + matcher = PatternMatcherFactory.getPatternsMatcher(true, true, manyPatterns); + assertThat(matcher, not(matchesFile("some", "package", "SomeClassName.java"))); + assertThat(matcher, matchesFile("some", "package", "Some123ClassName.java")); + } + + @Test public void testManyOr() { + Set manyPatterns = new LinkedHashSet(); + manyPatterns.add("some/package/SomeClassName.class"); + manyPatterns.add("some/package/SomeClassName.java"); + manyPatterns.add("some/package/SomeClassName.h"); + manyPatterns.add("some/package/SomeClassName$*.class"); + manyPatterns.add("some/package/SomeClassName$*.java"); + manyPatterns.add("some/package/SomeClassName$*.h"); + matcher = PatternMatcherFactory.getPatternsMatcher(true, true, manyPatterns); + assertThat(matcher, not(matchesFile())); + assertThat(matcher, matchesFile("some", "package", "SomeClassName.java")); + assertThat(matcher, matchesFile("some", "package", "SomeClassName.class")); + assertThat(matcher, matchesFile("some", "package", "SomeClassName.h")); + assertThat(matcher, matchesFile("some", "package", "SomeClassName$*.java")); + assertThat(matcher, matchesFile("some", "package", "SomeClassName$*.class")); + assertThat(matcher, matchesFile("some", "package", "SomeClassName$*.h")); + assertThat(matcher, not(matchesFile("a"))); + } + @Test public void testEmpty() { matcher = PatternMatcherFactory.getPatternMatcher(true, true, ""); assertThat(matcher, matchesFile());