12faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes/* 22faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Copyright (C) 2011 The Android Open Source Project 32faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * 42faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Licensed under the Apache License, Version 2.0 (the "License"); 52faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * you may not use this file except in compliance with the License. 62faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * You may obtain a copy of the License at 72faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * 82faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 92faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * 102faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Unless required by applicable law or agreed to in writing, software 112faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 122faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * See the License for the specific language governing permissions and 142faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * limitations under the License. 152faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes */ 1612eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro 17578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "dex_instruction_visitor.h" 1812eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro 19700a402244a1a423da4f3ba8032459f4b65fa18fIan Rogers#include <memory> 2090a3369d3b6238f1a4c9b19ca68978dab1c39bc4Elliott Hughes 2112eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro#include "gtest/gtest.h" 2212eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro 2312eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapironamespace art { 2412eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro 2512eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiroclass TestVisitor : public DexInstructionVisitor<TestVisitor> {}; 2612eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro 27a331b3cc392132c7333d36649a8310f38f4822ccBrian CarlstromTEST(InstructionTest, Init) { 28700a402244a1a423da4f3ba8032459f4b65fa18fIan Rogers std::unique_ptr<TestVisitor> visitor(new TestVisitor); 2912eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro} 3012eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro 3112eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiroclass CountVisitor : public DexInstructionVisitor<CountVisitor> { 3212eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro public: 3312eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro int count_; 3412eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro 3512eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro CountVisitor() : count_(0) {} 3612eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro 37317eb64f5b9aafcd158b8b701cf46a0f697506a5Elliott Hughes void Do_Default(const Instruction*) { 3812eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro ++count_; 3912eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro } 4012eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro}; 4112eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro 42a331b3cc392132c7333d36649a8310f38f4822ccBrian CarlstromTEST(InstructionTest, Count) { 4312eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro CountVisitor v0; 44ba5ebb944b7c5c6a1b754b6dd47eed96f39aea29jeffhao const uint16_t c0[] = {}; 4512eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro v0.Visit(c0, sizeof(c0)); 4612eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro EXPECT_EQ(0, v0.count_); 4712eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro 4812eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro CountVisitor v1; 49ba5ebb944b7c5c6a1b754b6dd47eed96f39aea29jeffhao const uint16_t c1[] = { 0 }; 5012eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro v1.Visit(c1, sizeof(c1)); 5112eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro EXPECT_EQ(1, v1.count_); 5212eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro 5312eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro CountVisitor v2; 54ba5ebb944b7c5c6a1b754b6dd47eed96f39aea29jeffhao const uint16_t c2[] = { 0, 0 }; 5512eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro v2.Visit(c2, sizeof(c2)); 5612eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro EXPECT_EQ(2, v2.count_); 5712eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro 5812eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro CountVisitor v3; 59ba5ebb944b7c5c6a1b754b6dd47eed96f39aea29jeffhao const uint16_t c3[] = { 0, 0, 0, }; 6012eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro v3.Visit(c3, sizeof(c3)); 6112eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro EXPECT_EQ(3, v3.count_); 6212eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro 6312eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro CountVisitor v4; 64ba5ebb944b7c5c6a1b754b6dd47eed96f39aea29jeffhao const uint16_t c4[] = { 0, 0, 0, 0 }; 6512eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro v4.Visit(c4, sizeof(c4)); 6612eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro EXPECT_EQ(4, v4.count_); 6712eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro} 6812eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro 6912eb78e651f13f2c1f0c2c922048a5a213253adfCarl Shapiro} // namespace art 70