From 8b2bc18a352206796d0c284a087d598873f2662f Mon Sep 17 00:00:00 2001 From: vmutafov Date: Wed, 29 Jan 2020 17:23:52 +0200 Subject: [PATCH 1/2] Fix incorrect dependency declaration; add tests for pattern matcher --- .../android-metadata-generator/build.gradle | 2 +- .../matching/impl/PatternMatcherImpl.kt | 6 ++++ .../matching/impl/PatternMatcherImplTest.kt | 35 +++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 test-app/build-tools/android-metadata-generator/src/test/java/com/telerik/metadata/security/filtering/matching/impl/PatternMatcherImplTest.kt diff --git a/test-app/build-tools/android-metadata-generator/build.gradle b/test-app/build-tools/android-metadata-generator/build.gradle index d2b117ff7..77da55321 100644 --- a/test-app/build-tools/android-metadata-generator/build.gradle +++ b/test-app/build-tools/android-metadata-generator/build.gradle @@ -51,7 +51,7 @@ dependencies { testCompile 'junit:junit:4.13' testCompile 'org.mockito:mockito-core:3.0.0' - implementation 'junit:junit:4.12' + testImplementation 'junit:junit:4.12' } task copyNecessaryFiles { diff --git a/test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/security/filtering/matching/impl/PatternMatcherImpl.kt b/test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/security/filtering/matching/impl/PatternMatcherImpl.kt index 0daf117d6..5607e17c1 100644 --- a/test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/security/filtering/matching/impl/PatternMatcherImpl.kt +++ b/test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/security/filtering/matching/impl/PatternMatcherImpl.kt @@ -9,6 +9,12 @@ class PatternMatcherImpl : PatternMatcher { Algorithm is borrowed from: https://www.geeksforgeeks.org/wildcard-character-matching/ */ + + // Short circuit if pattern is '*' + if (pattern == "*" && input.isNotEmpty()) { + return true + } + // If we reach at the end of both strings, // we are done if (pattern.isEmpty() && input.isEmpty()) diff --git a/test-app/build-tools/android-metadata-generator/src/test/java/com/telerik/metadata/security/filtering/matching/impl/PatternMatcherImplTest.kt b/test-app/build-tools/android-metadata-generator/src/test/java/com/telerik/metadata/security/filtering/matching/impl/PatternMatcherImplTest.kt new file mode 100644 index 000000000..7d6d4d0a7 --- /dev/null +++ b/test-app/build-tools/android-metadata-generator/src/test/java/com/telerik/metadata/security/filtering/matching/impl/PatternMatcherImplTest.kt @@ -0,0 +1,35 @@ +package com.telerik.metadata.security.filtering.matching.impl + +import org.junit.Assert.assertEquals +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized + + +@RunWith(Parameterized::class) +class PatternMatcherImplTest(private var pattern: String, private var input: String, private var shouldMatch: Boolean) { + + private val matcher = PatternMatcherImpl() + + companion object { + @JvmStatic + @Parameterized.Parameters(name = "Case {index}: matcher.match({0}, {1}) should be {2}") + fun data(): Collection> { + return listOf( + arrayOf("g*ks", "geeks", true), + arrayOf("ge?ks*", "geeksforgeeks", true), + arrayOf("g*k", "gee", false), + arrayOf("*pqrs", "pqrst", false), + arrayOf("abc*bcd", "abcdhghgbcd", true), + arrayOf("abc*c?d", "abcd", false), + arrayOf("*c*d", "abcd", true), + arrayOf("*?c*d", "abcd", true) + ) + } + } + + @Test + fun `Test match`() { + assertEquals("Wrong pattern matcher result!", shouldMatch, matcher.match(pattern, input)) + } +} \ No newline at end of file From c3e649b8d80c869efb4540c65767b5a7ad3481df Mon Sep 17 00:00:00 2001 From: vmutafov Date: Thu, 30 Jan 2020 17:21:23 +0200 Subject: [PATCH 2/2] Fix issue with empty line and add tests --- ...LineCommentFilter.kt => UserLineFilter.kt} | 3 ++- .../input/user/UserPatternsCollection.kt | 7 ++++-- ...entFilterTest.kt => UserLineFilterTest.kt} | 22 +++++++++++++++++-- 3 files changed, 27 insertions(+), 5 deletions(-) rename test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/security/filtering/input/user/{UserLineCommentFilter.kt => UserLineFilter.kt} (66%) rename test-app/build-tools/android-metadata-generator/src/test/java/com/telerik/metadata/security/filtering/input/user/{UserLineCommentFilterTest.kt => UserLineFilterTest.kt} (64%) diff --git a/test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/security/filtering/input/user/UserLineCommentFilter.kt b/test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/security/filtering/input/user/UserLineFilter.kt similarity index 66% rename from test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/security/filtering/input/user/UserLineCommentFilter.kt rename to test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/security/filtering/input/user/UserLineFilter.kt index 17c3374a9..e2bd83df7 100644 --- a/test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/security/filtering/input/user/UserLineCommentFilter.kt +++ b/test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/security/filtering/input/user/UserLineFilter.kt @@ -1,5 +1,6 @@ package com.telerik.metadata.security.filtering.input.user -class UserLineCommentFilter { +class UserLineFilter { fun isCommentLine(line: String) = line.startsWith("//") || line.startsWith("#") + fun isEmptyLine(line: String) = line.isBlank() } \ No newline at end of file diff --git a/test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/security/filtering/input/user/UserPatternsCollection.kt b/test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/security/filtering/input/user/UserPatternsCollection.kt index 0864d00a3..a1e4e04c8 100644 --- a/test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/security/filtering/input/user/UserPatternsCollection.kt +++ b/test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/security/filtering/input/user/UserPatternsCollection.kt @@ -40,10 +40,13 @@ object UserPatternsCollection : PatternsCollection { private fun parseFile(path: Path): Collection { val fileLines = Files.readAllLines(path) val lineSplitter = UserLineSplitter() - val commentFilter = UserLineCommentFilter() + val lineFilter = UserLineFilter() return fileLines - .filter { !commentFilter.isCommentLine(it) } + .asSequence() + .filter { !lineFilter.isCommentLine(it) } + .filter { !lineFilter.isEmptyLine(it) } .map { lineSplitter.splitLine(it) } + .toList() } } \ No newline at end of file diff --git a/test-app/build-tools/android-metadata-generator/src/test/java/com/telerik/metadata/security/filtering/input/user/UserLineCommentFilterTest.kt b/test-app/build-tools/android-metadata-generator/src/test/java/com/telerik/metadata/security/filtering/input/user/UserLineFilterTest.kt similarity index 64% rename from test-app/build-tools/android-metadata-generator/src/test/java/com/telerik/metadata/security/filtering/input/user/UserLineCommentFilterTest.kt rename to test-app/build-tools/android-metadata-generator/src/test/java/com/telerik/metadata/security/filtering/input/user/UserLineFilterTest.kt index 74e972caa..e714c1039 100644 --- a/test-app/build-tools/android-metadata-generator/src/test/java/com/telerik/metadata/security/filtering/input/user/UserLineCommentFilterTest.kt +++ b/test-app/build-tools/android-metadata-generator/src/test/java/com/telerik/metadata/security/filtering/input/user/UserLineFilterTest.kt @@ -4,13 +4,13 @@ import org.junit.Test import org.junit.Assert.* -class UserLineCommentFilterTest { +class UserLineFilterTest { companion object { private const val UNEXPECTED_LINE_FILTERING_RESULT_MESSAGE = "Unexpected line filtering result" } - private val filter = UserLineCommentFilter() + private val filter = UserLineFilter() @Test fun `Is regular commented line`() { @@ -38,4 +38,22 @@ class UserLineCommentFilterTest { assertFalse(UNEXPECTED_LINE_FILTERING_RESULT_MESSAGE, isComment) } + + @Test + fun `Is empty line`(){ + val line = System.lineSeparator() + + val isEmptyLine = filter.isEmptyLine(line) + + assertTrue(UNEXPECTED_LINE_FILTERING_RESULT_MESSAGE, isEmptyLine) + } + + @Test + fun `Is whitespace line`(){ + val line = " " + + val isEmptyLine = filter.isEmptyLine(line) + + assertTrue(UNEXPECTED_LINE_FILTERING_RESULT_MESSAGE, isEmptyLine) + } } \ No newline at end of file