| /* | 
 |  * Copyright (C) 2014 The Android Open Source Project | 
 |  * | 
 |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
 |  * you may not use this file except in compliance with the License. | 
 |  * You may obtain a copy of the License at | 
 |  * | 
 |  *      http://www.apache.org/licenses/LICENSE-2.0 | 
 |  * | 
 |  * Unless required by applicable law or agreed to in writing, software | 
 |  * distributed under the License is distributed on an "AS IS" BASIS, | 
 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 |  * See the License for the specific language governing permissions and | 
 |  * limitations under the License. | 
 |  */ | 
 |  | 
 | #include "Rule.h" | 
 |  | 
 | #include "SplitDescription.h" | 
 | #include "TestRules.h" | 
 |  | 
 | #include <algorithm> | 
 | #include <gtest/gtest.h> | 
 | #include <string> | 
 | #include <utils/String8.h> | 
 |  | 
 | using namespace android; | 
 | using namespace split::test; | 
 |  | 
 | namespace split { | 
 |  | 
 | TEST(RuleTest, generatesValidJson) { | 
 |     Rule rule(AndRule() | 
 |         .add(EqRule(Rule::SDK_VERSION, 7)) | 
 |         .add(OrRule() | 
 |                 .add(GtRule(Rule::SCREEN_DENSITY, 10)) | 
 |                 .add(LtRule(Rule::SCREEN_DENSITY, 5)) | 
 |         ) | 
 |     ); | 
 |  | 
 |     // Expected | 
 |     std::string expected( | 
 |             "{" | 
 |             "  \"op\": \"AND_SUBRULES\"," | 
 |             "  \"subrules\": [" | 
 |             "    {" | 
 |             "      \"op\": \"EQUALS\"," | 
 |             "      \"property\": \"SDK_VERSION\"," | 
 |             "      \"args\": [7]" | 
 |             "    }," | 
 |             "    {" | 
 |             "      \"op\": \"OR_SUBRULES\"," | 
 |             "      \"subrules\": [" | 
 |             "        {" | 
 |             "          \"op\": \"GREATER_THAN\"," | 
 |             "          \"property\": \"SCREEN_DENSITY\"," | 
 |             "          \"args\": [10]" | 
 |             "        }," | 
 |             "        {" | 
 |             "          \"op\": \"LESS_THAN\"," | 
 |             "          \"property\": \"SCREEN_DENSITY\"," | 
 |             "          \"args\": [5]" | 
 |             "        }" | 
 |             "      ]" | 
 |             "     }" | 
 |             "  ]" | 
 |             "}"); | 
 |     expected.erase(std::remove_if(expected.begin(), expected.end(), ::isspace), expected.end()); | 
 |  | 
 |     // Result | 
 |     std::string result(rule.toJson().string()); | 
 |     result.erase(std::remove_if(result.begin(), result.end(), ::isspace), result.end()); | 
 |  | 
 |     ASSERT_EQ(expected, result); | 
 | } | 
 |  | 
 | TEST(RuleTest, simplifiesSingleSubruleRules) { | 
 |     sp<Rule> rule = new Rule(AndRule() | 
 |         .add(EqRule(Rule::SDK_VERSION, 7)) | 
 |     ); | 
 |  | 
 |     EXPECT_RULES_EQ(Rule::simplify(rule), EqRule(Rule::SDK_VERSION, 7)); | 
 | } | 
 |  | 
 | TEST(RuleTest, simplifiesNestedSameOpSubrules) { | 
 |     sp<Rule> rule = new Rule(AndRule() | 
 |         .add(AndRule() | 
 |             .add(EqRule(Rule::SDK_VERSION, 7)) | 
 |         ) | 
 |         .add(EqRule(Rule::SDK_VERSION, 8)) | 
 |     ); | 
 |  | 
 |     EXPECT_RULES_EQ(Rule::simplify(rule), | 
 |             AndRule() | 
 |                 .add(EqRule(Rule::SDK_VERSION, 7)) | 
 |                 .add(EqRule(Rule::SDK_VERSION, 8)) | 
 |     ); | 
 | } | 
 |  | 
 | } // namespace split |