169ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik/* 269ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik * Copyright (C) 2015 The Android Open Source Project 369ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik * 469ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik * Licensed under the Apache License, Version 2.0 (the "License"); 569ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik * you may not use this file except in compliance with the License. 669ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik * You may obtain a copy of the License at 769ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik * 869ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik * http://www.apache.org/licenses/LICENSE-2.0 969ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik * 1069ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik * Unless required by applicable law or agreed to in writing, software 1169ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik * distributed under the License is distributed on an "AS IS" BASIS, 1269ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1369ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik * See the License for the specific language governing permissions and 1469ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik * limitations under the License. 1569ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik */ 1669ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik 1769ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik#include <string> 1869ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik#include <vector> 1969ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik#include <sstream> 2069ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik 2169ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik#include <sys/types.h> 2269ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik#include <unistd.h> 2369ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik 2469ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik#include "common_runtime_test.h" 2569ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik#include "runtime/arch/instruction_set.h" 2697c381e3ce34cd327c2ec35fa850bd0eaa9b697fDavid Sehr#include "runtime/exec_utils.h" 2769ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik#include "runtime/os.h" 2869ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik#include "runtime/utils.h" 2969ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik#include "utils.h" 3069ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik 3169ae54abd4eaad54dc73b75ea7c8051aa515581dAart Biknamespace art { 3269ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik 3369ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bikclass DexDumpTest : public CommonRuntimeTest { 3469ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik protected: 3569ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik virtual void SetUp() { 3669ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik CommonRuntimeTest::SetUp(); 3769ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik // Dogfood our own lib core dex file. 38121b25e246b7012cfd895f205855c6102da48305Przemyslaw Szczepaniak dex_file_ = GetLibCoreDexFileNames()[0]; 3969ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik } 4069ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik 4169ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik // Runs test with given arguments. 4269ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik bool Exec(const std::vector<std::string>& args, std::string* error_msg) { 4322c26f5b454b56a20215cb8bbc5e8afcaccafdb0Aart Bik // TODO(ajcbik): dexdump2 -> dexdump 445ed8b2dfbdf1b487334a661bc5b8dc8ac880e435Elliott Hughes std::string file_path = GetTestAndroidRoot() + "/bin/dexdump2"; 4569ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik EXPECT_TRUE(OS::FileExists(file_path.c_str())) << file_path << " should be a valid file path"; 4669ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik std::vector<std::string> exec_argv = { file_path }; 4769ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik exec_argv.insert(exec_argv.end(), args.begin(), args.end()); 4869ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik return ::art::Exec(exec_argv, error_msg); 4969ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik } 5069ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik 5169ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik std::string dex_file_; 5269ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik}; 5369ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik 5469ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik 5569ae54abd4eaad54dc73b75ea7c8051aa515581dAart BikTEST_F(DexDumpTest, NoInputFileGiven) { 5669ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik std::string error_msg; 5769ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik ASSERT_FALSE(Exec({}, &error_msg)) << error_msg; 5869ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik} 5969ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik 6069ae54abd4eaad54dc73b75ea7c8051aa515581dAart BikTEST_F(DexDumpTest, CantOpenOutput) { 6169ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik std::string error_msg; 6269ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik ASSERT_FALSE(Exec({"-o", "/joho", dex_file_}, &error_msg)) << error_msg; 6369ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik} 6469ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik 6569ae54abd4eaad54dc73b75ea7c8051aa515581dAart BikTEST_F(DexDumpTest, BadFlagCombination) { 6669ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik std::string error_msg; 6769ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik ASSERT_FALSE(Exec({"-c", "-i", dex_file_}, &error_msg)) << error_msg; 6869ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik} 6969ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik 7069ae54abd4eaad54dc73b75ea7c8051aa515581dAart BikTEST_F(DexDumpTest, FullPlainOutput) { 7169ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik std::string error_msg; 7269ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik ASSERT_TRUE(Exec({"-d", "-f", "-h", "-l", "plain", "-o", "/dev/null", 7369ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik dex_file_}, &error_msg)) << error_msg; 7469ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik} 7569ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik 7669ae54abd4eaad54dc73b75ea7c8051aa515581dAart BikTEST_F(DexDumpTest, XMLOutput) { 7769ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik std::string error_msg; 7869ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik ASSERT_TRUE(Exec({"-l", "xml", "-o", "/dev/null", 7969ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik dex_file_}, &error_msg)) << error_msg; 8069ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik} 8169ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik 8269ae54abd4eaad54dc73b75ea7c8051aa515581dAart Bik} // namespace art 83