1 /* 2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package com.android.statementservice.parser 18 19 import android.os.PatternMatcher.PATTERN_ADVANCED_GLOB 20 import android.os.PatternMatcher.PATTERN_LITERAL 21 import android.os.PatternMatcher.PATTERN_PREFIX 22 import android.os.PatternMatcher.PATTERN_SIMPLE_GLOB 23 import androidx.test.ext.junit.runners.AndroidJUnit4 24 import com.google.common.truth.Truth.assertThat 25 import org.junit.Test 26 import org.junit.runner.RunWith 27 28 @RunWith(AndroidJUnit4::class) 29 class DalComponentParserTest { 30 31 @Test parseExpressionsnull32 fun parseExpressions() { 33 validateParsedExpression("foobar", PATTERN_LITERAL, "foobar") 34 validateParsedExpression("foo.bar", PATTERN_LITERAL, "foo\\.bar") 35 validateParsedExpression("foo*", PATTERN_PREFIX, "foo") 36 validateParsedExpression("*bar", PATTERN_SIMPLE_GLOB, ".*bar") 37 validateParsedExpression("foo*bar", PATTERN_SIMPLE_GLOB, "foo.*bar") 38 validateParsedExpression("foo.*bar", PATTERN_SIMPLE_GLOB, "foo\\..*bar") 39 validateParsedExpression("*foo*bar", PATTERN_SIMPLE_GLOB, ".*foo.*bar") 40 validateParsedExpression("foo?bar", PATTERN_SIMPLE_GLOB, "foo.bar") 41 validateParsedExpression("foo.?bar", PATTERN_SIMPLE_GLOB, "foo\\..bar") 42 validateParsedExpression("?bar", PATTERN_SIMPLE_GLOB, ".bar") 43 validateParsedExpression("foo?", PATTERN_SIMPLE_GLOB, "foo.") 44 validateParsedExpression("fo?b*r", PATTERN_SIMPLE_GLOB, "fo.b.*r") 45 validateParsedExpression("?*bar", PATTERN_ADVANCED_GLOB, ".+bar") 46 validateParsedExpression("foo?*bar", PATTERN_ADVANCED_GLOB, "foo.+bar") 47 validateParsedExpression("foo?*bar*", PATTERN_ADVANCED_GLOB, "foo.+bar.*") 48 validateParsedExpression("foo*?bar", PATTERN_SIMPLE_GLOB, "foo.*.bar") 49 50 // set matches are not supported in DAL 51 validateParsedExpression("foo[a-z]", PATTERN_LITERAL, "foo[a-z]") 52 validateParsedExpression("foo[a-z]+", PATTERN_LITERAL, "foo[a-z]+") 53 validateParsedExpression("foo[a-z]*", PATTERN_PREFIX, "foo[a-z]") 54 validateParsedExpression("[a-z]*bar", PATTERN_SIMPLE_GLOB, "[a-z].*bar") 55 validateParsedExpression("foo[a-z]?bar", PATTERN_SIMPLE_GLOB, "foo[a-z].bar") 56 validateParsedExpression("foo[a-z]?*bar", PATTERN_ADVANCED_GLOB, "foo\\[a-z\\].+bar") 57 58 // range matches are not supported in DAL 59 validateParsedExpression("fo{2}", PATTERN_LITERAL, "fo{2}") 60 validateParsedExpression("fo{2}+", PATTERN_LITERAL, "fo{2}+") 61 validateParsedExpression("fo{2}*", PATTERN_PREFIX, "fo{2}") 62 validateParsedExpression("fo{2}*bar", PATTERN_SIMPLE_GLOB, "fo{2}.*bar") 63 validateParsedExpression("fo{2}?*", PATTERN_ADVANCED_GLOB, "fo\\{2\\}.+") 64 validateParsedExpression("foo{2}?*bar", PATTERN_ADVANCED_GLOB, "foo\\{2\\}.+bar") 65 } 66 67 @Test(expected = IllegalArgumentException::class) parseEmptyExpressionnull68 fun parseEmptyExpression() { 69 parseMatchingExpression("") 70 } 71 validateParsedExpressionnull72 private fun validateParsedExpression(given: String, expectedType: Int, expectedFilter: String) { 73 val (type, filter) = parseMatchingExpression(given) 74 assertThat(filter).isEqualTo(expectedFilter) 75 assertThat(type).isEqualTo(expectedType) 76 assertThat(filter).isEqualTo(expectedFilter) 77 } 78 }