140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski/* 240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * Copyright (C) 2014 The Android Open Source Project 340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * 440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * you may not use this file except in compliance with the License. 640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * You may obtain a copy of the License at 740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * 840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * 1040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * Unless required by applicable law or agreed to in writing, software 1140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 1240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * See the License for the specific language governing permissions and 1440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * limitations under the License. 1540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski */ 1640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 1740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#include "Rule.h" 1840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 1940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#include "SplitDescription.h" 20dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski#include "TestRules.h" 2140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 2240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#include <algorithm> 2340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#include <gtest/gtest.h> 24dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski#include <string> 2540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#include <utils/String8.h> 2640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 2740e8eefbedcafc51948945647d746daaee092f16Adam Lesinskiusing namespace android; 28dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinskiusing namespace split::test; 2940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 3040e8eefbedcafc51948945647d746daaee092f16Adam Lesinskinamespace split { 3140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 3240e8eefbedcafc51948945647d746daaee092f16Adam LesinskiTEST(RuleTest, generatesValidJson) { 33dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski Rule rule(AndRule() 34dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(EqRule(Rule::SDK_VERSION, 7)) 35dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(OrRule() 36dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(GtRule(Rule::SCREEN_DENSITY, 10)) 37dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(LtRule(Rule::SCREEN_DENSITY, 5)) 38dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ) 39dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ); 40dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski 41dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski // Expected 4240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski std::string expected( 4340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski "{" 4440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " \"op\": \"AND_SUBRULES\"," 4540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " \"subrules\": [" 4640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " {" 4740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " \"op\": \"EQUALS\"," 4840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " \"property\": \"SDK_VERSION\"," 4940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " \"args\": [7]" 5040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " }," 5140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " {" 5240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " \"op\": \"OR_SUBRULES\"," 5340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " \"subrules\": [" 5440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " {" 5540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " \"op\": \"GREATER_THAN\"," 5640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " \"property\": \"SCREEN_DENSITY\"," 5740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " \"args\": [10]" 5840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " }," 5940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " {" 6040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " \"op\": \"LESS_THAN\"," 6140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " \"property\": \"SCREEN_DENSITY\"," 6240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " \"args\": [5]" 6340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " }" 6440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " ]" 6540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " }" 6640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski " ]" 6740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski "}"); 6840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski expected.erase(std::remove_if(expected.begin(), expected.end(), ::isspace), expected.end()); 6940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 70dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski // Result 71dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski std::string result(rule.toJson().string()); 7240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski result.erase(std::remove_if(result.begin(), result.end(), ::isspace), result.end()); 7340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 7440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski ASSERT_EQ(expected, result); 7540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski} 7640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 7740e8eefbedcafc51948945647d746daaee092f16Adam LesinskiTEST(RuleTest, simplifiesSingleSubruleRules) { 78dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski sp<Rule> rule = new Rule(AndRule() 79dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(EqRule(Rule::SDK_VERSION, 7)) 80dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ); 8140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 82dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski EXPECT_RULES_EQ(Rule::simplify(rule), EqRule(Rule::SDK_VERSION, 7)); 8340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski} 8440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 8540e8eefbedcafc51948945647d746daaee092f16Adam LesinskiTEST(RuleTest, simplifiesNestedSameOpSubrules) { 86dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski sp<Rule> rule = new Rule(AndRule() 87dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(AndRule() 88dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(EqRule(Rule::SDK_VERSION, 7)) 89dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ) 90dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(EqRule(Rule::SDK_VERSION, 8)) 91dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ); 92dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski 93dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski EXPECT_RULES_EQ(Rule::simplify(rule), 94dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski AndRule() 95dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(EqRule(Rule::SDK_VERSION, 7)) 96dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(EqRule(Rule::SDK_VERSION, 8)) 97dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ); 9840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski} 9940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 10040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski} // namespace split 101