blob: 6fc14b8872d875dcded5a791f56be50705f0faaf [file] [log] [blame]
Carl Shapirofc322c72011-07-27 00:20:01 -07001// Copyright 2011 Google Inc. All Rights Reserved.
2
Brian Carlstromdb4d5402011-08-09 12:18:28 -07003#include "runtime.h"
Brian Carlstromf734cf52011-08-17 16:28:14 -07004#include "common_test.h"
Carl Shapirofc322c72011-07-27 00:20:01 -07005
6namespace art {
Brian Carlstrom6ea095a2011-08-16 15:26:54 -07007void ParseClassPath(const char* class_path, std::vector<std::string>& vec);
Carl Shapirofc322c72011-07-27 00:20:01 -07008
Brian Carlstromf734cf52011-08-17 16:28:14 -07009class RuntimeTest : public CommonTest {};
Carl Shapirofc322c72011-07-27 00:20:01 -070010
Brian Carlstromf734cf52011-08-17 16:28:14 -070011TEST_F(RuntimeTest, ParseClassPath) {
Carl Shapirofc322c72011-07-27 00:20:01 -070012 std::vector<std::string> vec;
13
Brian Carlstrom6ea095a2011-08-16 15:26:54 -070014 art::ParseClassPath("", vec);
Carl Shapirofc322c72011-07-27 00:20:01 -070015 EXPECT_EQ(0U, vec.size());
16 vec.clear();
17
Brian Carlstrom6ea095a2011-08-16 15:26:54 -070018 art::ParseClassPath(":", vec);
Carl Shapirofc322c72011-07-27 00:20:01 -070019 EXPECT_EQ(0U, vec.size());
20 vec.clear();
21
Brian Carlstrom6ea095a2011-08-16 15:26:54 -070022 art::ParseClassPath(":foo", vec);
Carl Shapirofc322c72011-07-27 00:20:01 -070023 EXPECT_EQ(1U, vec.size());
24 vec.clear();
25
Brian Carlstrom6ea095a2011-08-16 15:26:54 -070026 art::ParseClassPath("foo:", vec);
Carl Shapirofc322c72011-07-27 00:20:01 -070027 EXPECT_EQ(1U, vec.size());
28 vec.clear();
29
Brian Carlstrom6ea095a2011-08-16 15:26:54 -070030 art::ParseClassPath(":foo:", vec);
Carl Shapirofc322c72011-07-27 00:20:01 -070031 EXPECT_EQ(1U, vec.size());
32 vec.clear();
33
Brian Carlstrom6ea095a2011-08-16 15:26:54 -070034 art::ParseClassPath("foo:bar", vec);
Carl Shapirofc322c72011-07-27 00:20:01 -070035 EXPECT_EQ(2U, vec.size());
36 vec.clear();
37
Brian Carlstrom6ea095a2011-08-16 15:26:54 -070038 art::ParseClassPath(":foo:bar", vec);
Carl Shapirofc322c72011-07-27 00:20:01 -070039 EXPECT_EQ(2U, vec.size());
40 vec.clear();
41
Brian Carlstrom6ea095a2011-08-16 15:26:54 -070042 art::ParseClassPath("foo:bar:", vec);
Carl Shapirofc322c72011-07-27 00:20:01 -070043 EXPECT_EQ(2U, vec.size());
44 vec.clear();
45
Brian Carlstrom6ea095a2011-08-16 15:26:54 -070046 art::ParseClassPath(":foo:bar:", vec);
Carl Shapirofc322c72011-07-27 00:20:01 -070047 EXPECT_EQ(2U, vec.size());
48 vec.clear();
49
Brian Carlstrom6ea095a2011-08-16 15:26:54 -070050 art::ParseClassPath("foo:bar:baz", vec);
Carl Shapirofc322c72011-07-27 00:20:01 -070051 EXPECT_EQ(3U, vec.size());
52 vec.clear();
53
Brian Carlstrom6ea095a2011-08-16 15:26:54 -070054 art::ParseClassPath(":foo:bar:baz", vec);
Carl Shapirofc322c72011-07-27 00:20:01 -070055 EXPECT_EQ(3U, vec.size());
56 vec.clear();
57
Brian Carlstrom6ea095a2011-08-16 15:26:54 -070058 art::ParseClassPath("foo:bar:baz:", vec);
Carl Shapirofc322c72011-07-27 00:20:01 -070059 EXPECT_EQ(3U, vec.size());
60 vec.clear();
61
Brian Carlstrom6ea095a2011-08-16 15:26:54 -070062 art::ParseClassPath(":foo:bar:baz:", vec);
Carl Shapirofc322c72011-07-27 00:20:01 -070063 EXPECT_EQ(3U, vec.size());
64 vec.clear();
65}
66
Brian Carlstromf734cf52011-08-17 16:28:14 -070067TEST_F(RuntimeTest, ParsedOptions) {
68 void* test_vfprintf = reinterpret_cast<void*>(0xa);
69 void* test_abort = reinterpret_cast<void*>(0xb);
70 void* test_exit = reinterpret_cast<void*>(0xc);
71 void* null = reinterpret_cast<void*>(NULL);
72 scoped_ptr<const DexFile> java_lang_dex_file(GetLibCoreDex());
73 std::vector<const DexFile*> boot_class_path;
74 boot_class_path.push_back(java_lang_dex_file_.get());
75
76 Runtime::Options options;
77 options.push_back(std::make_pair("-Xbootclasspath:class_path_foo:class_path_bar", null));
78 options.push_back(std::make_pair("bootclasspath", &boot_class_path));
79 options.push_back(std::make_pair("-Xbootimage:boot_image", null));
80 options.push_back(std::make_pair("-Xcheck:jni", null));
81 options.push_back(std::make_pair("-Xms2048", null));
82 options.push_back(std::make_pair("-Xmx4k", null));
83 options.push_back(std::make_pair("-Xss1m", null));
84 options.push_back(std::make_pair("-Dfoo=bar", null));
85 options.push_back(std::make_pair("-Dbaz=qux", null));
86 options.push_back(std::make_pair("-verbose:gc,class,jni", null));
87 options.push_back(std::make_pair("vfprintf", test_vfprintf));
88 options.push_back(std::make_pair("abort", test_abort));
89 options.push_back(std::make_pair("exit", test_exit));
90 scoped_ptr<Runtime::ParsedOptions> parsed(Runtime::ParsedOptions::Create(options, false));
91 ASSERT_TRUE(parsed != NULL);
92
93 EXPECT_EQ(1U, parsed->boot_class_path_.size()); // bootclasspath overrides -Xbootclasspath
94 EXPECT_STREQ("boot_image", parsed->boot_image_);
95 EXPECT_EQ(true, parsed->check_jni_);
96 EXPECT_EQ(2048U, parsed->heap_initial_size_);
97 EXPECT_EQ(4 * KB, parsed->heap_maximum_size_);
98 EXPECT_EQ(1 * MB, parsed->stack_size_);
99 EXPECT_TRUE(test_vfprintf == parsed->hook_vfprintf_);
100 EXPECT_TRUE(test_exit == parsed->hook_exit_);
101 EXPECT_TRUE(test_abort == parsed->hook_abort_);
102 ASSERT_EQ(3U, parsed->verbose_.size());
103 EXPECT_TRUE(parsed->verbose_.find("gc") != parsed->verbose_.end());
104 EXPECT_TRUE(parsed->verbose_.find("class") != parsed->verbose_.end());
105 EXPECT_TRUE(parsed->verbose_.find("jni") != parsed->verbose_.end());
106 ASSERT_EQ(2U, parsed->properties_.size());
107 EXPECT_EQ("foo=bar", parsed->properties_[0]);
108 EXPECT_EQ("baz=qux", parsed->properties_[1]);
109}
110
111} // namespace art