1dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski/*
2dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski * Copyright (C) 2014 The Android Open Source Project
3dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski *
4dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
5dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski * you may not use this file except in compliance with the License.
6dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski * You may obtain a copy of the License at
7dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski *
8dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
9dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski *
10dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski * Unless required by applicable law or agreed to in writing, software
11dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
12dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski * See the License for the specific language governing permissions and
14dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski * limitations under the License.
15dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski */
16dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski
17dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski#ifndef H_AAPT_SPLIT_TEST_RULES
18dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski#define H_AAPT_SPLIT_TEST_RULES
19dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski
20dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski#include "Rule.h"
21dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski
22dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski#include <gtest/gtest.h>
23dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski
24dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinskinamespace split {
25dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinskinamespace test {
26dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski
27dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinskistruct AndRule : public Rule {
28dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski    AndRule() {
29dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski        op = Rule::AND_SUBRULES;
30dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski    }
31dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski
32dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski    AndRule& add(const Rule& rhs) {
33dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski        subrules.add(new Rule(rhs));
34dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski        return *this;
35dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski    }
36dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski};
37dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski
38dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinskistruct OrRule : public Rule {
39dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski    OrRule() {
40dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski        op = Rule::OR_SUBRULES;
41dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski    }
42dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski
43dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski    OrRule& add(const Rule& rhs) {
44dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski        subrules.add(new Rule(rhs));
45dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski        return *this;
46dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski    }
47dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski};
48dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski
49dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinskiconst Rule EqRule(Rule::Key key, long value);
50dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinskiconst Rule LtRule(Rule::Key key, long value);
51dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinskiconst Rule GtRule(Rule::Key key, long value);
52dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinskiconst Rule ContainsAnyRule(Rule::Key key, const char* str1);
53dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinskiconst Rule ContainsAnyRule(Rule::Key key, const char* str1, const char* str2);
54dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinskiconst Rule AlwaysTrue();
55dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski
56dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski::testing::AssertionResult RulePredFormat(
57dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski        const char* actualExpr, const char* expectedExpr,
58dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski        const android::sp<Rule>& actual, const Rule& expected);
59dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski
60dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski#define EXPECT_RULES_EQ(actual, expected) \
61dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski        EXPECT_PRED_FORMAT2(::split::test::RulePredFormat, actual, expected)
62dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski
63dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski} // namespace test
64dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski} // namespace split
65dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski
66dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski#endif // H_AAPT_SPLIT_TEST_RULES
67