13e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik/*
23e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * Copyright (C) 2015 The Android Open Source Project
33e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik *
43e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * Licensed under the Apache License, Version 2.0 (the "License");
53e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * you may not use this file except in compliance with the License.
63e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * You may obtain a copy of the License at
73e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik *
83e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik *      http://www.apache.org/licenses/LICENSE-2.0
93e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik *
103e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * Unless required by applicable law or agreed to in writing, software
113e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * distributed under the License is distributed on an "AS IS" BASIS,
123e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * See the License for the specific language governing permissions and
143e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik * limitations under the License.
153e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik */
163e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik
178cf9cb386cd9286d67e879f1ee501ec00d72a4e1Andreas Gampe#include <sstream>
183e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik#include <string>
193e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik#include <vector>
203e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik
213e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik#include <sys/types.h>
223e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik#include <unistd.h>
233e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik
242c30e4a2a2bd73c3e9d327d4b5d059b75cc0f798Andreas Gampe#include "arch/instruction_set.h"
258f4b056427a9d2321e3aa4f21ca8ffb18b3e5ae6David Sehr#include "base/os.h"
268f4b056427a9d2321e3aa4f21ca8ffb18b3e5ae6David Sehr#include "base/utils.h"
273e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik#include "common_runtime_test.h"
282c30e4a2a2bd73c3e9d327d4b5d059b75cc0f798Andreas Gampe#include "exec_utils.h"
292c30e4a2a2bd73c3e9d327d4b5d059b75cc0f798Andreas Gampe#include "gc/heap.h"
302c30e4a2a2bd73c3e9d327d4b5d059b75cc0f798Andreas Gampe#include "gc/space/image_space.h"
313e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik
323e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Biknamespace art {
333e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik
343e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bikclass DexListTest : public CommonRuntimeTest {
353e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik protected:
363e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik  virtual void SetUp() {
373e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik    CommonRuntimeTest::SetUp();
383e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik    // Dogfood our own lib core dex file.
39121b25e246b7012cfd895f205855c6102da48305Przemyslaw Szczepaniak    dex_file_ = GetLibCoreDexFileNames()[0];
403e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik  }
413e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik
423e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik  // Runs test with given arguments.
433e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik  bool Exec(const std::vector<std::string>& args, std::string* error_msg) {
443e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik    std::string file_path = GetTestAndroidRoot();
45333e7c540cca5290fc06a740ae0031890f6577ccColin Cross    file_path += "/bin/dexlist";
463e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik    EXPECT_TRUE(OS::FileExists(file_path.c_str())) << file_path << " should be a valid file path";
473e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik    std::vector<std::string> exec_argv = { file_path };
483e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik    exec_argv.insert(exec_argv.end(), args.begin(), args.end());
493e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik    return ::art::Exec(exec_argv, error_msg);
503e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik  }
513e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik
523e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik  std::string dex_file_;
533e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik};
543e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik
553e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik
563e40f4a7289bf0104e061dc36f17a776d4c122d4Aart BikTEST_F(DexListTest, NoInputFileGiven) {
573e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik  std::string error_msg;
583e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik  ASSERT_FALSE(Exec({}, &error_msg)) << error_msg;
593e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik}
603e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik
613e40f4a7289bf0104e061dc36f17a776d4c122d4Aart BikTEST_F(DexListTest, CantOpenOutput) {
623e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik  std::string error_msg;
633e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik  ASSERT_FALSE(Exec({"-o", "/joho", dex_file_}, &error_msg)) << error_msg;
643e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik}
653e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik
663e40f4a7289bf0104e061dc36f17a776d4c122d4Aart BikTEST_F(DexListTest, IllFormedMethod) {
673e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik  std::string error_msg;
683e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik  ASSERT_FALSE(Exec({"-m", "joho", dex_file_}, &error_msg)) << error_msg;
693e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik}
703e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik
713e40f4a7289bf0104e061dc36f17a776d4c122d4Aart BikTEST_F(DexListTest, FullOutput) {
723e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik  std::string error_msg;
733e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik  ASSERT_TRUE(Exec({"-o", "/dev/null", dex_file_}, &error_msg)) << error_msg;
743e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik}
753e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik
763e40f4a7289bf0104e061dc36f17a776d4c122d4Aart BikTEST_F(DexListTest, MethodOutput) {
773e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik  std::string error_msg;
783e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik  ASSERT_TRUE(Exec({"-o", "/dev/null", "-m", "java.lang.Object.toString",
793e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik    dex_file_}, &error_msg)) << error_msg;
803e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik}
813e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik
823e40f4a7289bf0104e061dc36f17a776d4c122d4Aart Bik}  // namespace art
83