runtime_test.cc revision f734cf55d510976f4862b15e35fc86eae2a3daf8
1fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro// Copyright 2011 Google Inc. All Rights Reserved. 2fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 3db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom#include "runtime.h" 4f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom#include "common_test.h" 5fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 6fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapironamespace art { 76ea095ad30bf13cc00b4fee7afbbe4731a349c83Brian Carlstromvoid ParseClassPath(const char* class_path, std::vector<std::string>& vec); 8fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 9f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstromclass RuntimeTest : public CommonTest {}; 10fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 11f734cf55d510976f4862b15e35fc86eae2a3daf8Brian CarlstromTEST_F(RuntimeTest, ParseClassPath) { 12fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro std::vector<std::string> vec; 13fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 146ea095ad30bf13cc00b4fee7afbbe4731a349c83Brian Carlstrom art::ParseClassPath("", vec); 15fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro EXPECT_EQ(0U, vec.size()); 16fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro vec.clear(); 17fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 186ea095ad30bf13cc00b4fee7afbbe4731a349c83Brian Carlstrom art::ParseClassPath(":", vec); 19fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro EXPECT_EQ(0U, vec.size()); 20fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro vec.clear(); 21fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 226ea095ad30bf13cc00b4fee7afbbe4731a349c83Brian Carlstrom art::ParseClassPath(":foo", vec); 23fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro EXPECT_EQ(1U, vec.size()); 24fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro vec.clear(); 25fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 266ea095ad30bf13cc00b4fee7afbbe4731a349c83Brian Carlstrom art::ParseClassPath("foo:", vec); 27fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro EXPECT_EQ(1U, vec.size()); 28fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro vec.clear(); 29fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 306ea095ad30bf13cc00b4fee7afbbe4731a349c83Brian Carlstrom art::ParseClassPath(":foo:", vec); 31fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro EXPECT_EQ(1U, vec.size()); 32fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro vec.clear(); 33fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 346ea095ad30bf13cc00b4fee7afbbe4731a349c83Brian Carlstrom art::ParseClassPath("foo:bar", vec); 35fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro EXPECT_EQ(2U, vec.size()); 36fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro vec.clear(); 37fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 386ea095ad30bf13cc00b4fee7afbbe4731a349c83Brian Carlstrom art::ParseClassPath(":foo:bar", vec); 39fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro EXPECT_EQ(2U, vec.size()); 40fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro vec.clear(); 41fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 426ea095ad30bf13cc00b4fee7afbbe4731a349c83Brian Carlstrom art::ParseClassPath("foo:bar:", vec); 43fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro EXPECT_EQ(2U, vec.size()); 44fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro vec.clear(); 45fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 466ea095ad30bf13cc00b4fee7afbbe4731a349c83Brian Carlstrom art::ParseClassPath(":foo:bar:", vec); 47fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro EXPECT_EQ(2U, vec.size()); 48fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro vec.clear(); 49fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 506ea095ad30bf13cc00b4fee7afbbe4731a349c83Brian Carlstrom art::ParseClassPath("foo:bar:baz", vec); 51fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro EXPECT_EQ(3U, vec.size()); 52fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro vec.clear(); 53fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 546ea095ad30bf13cc00b4fee7afbbe4731a349c83Brian Carlstrom art::ParseClassPath(":foo:bar:baz", vec); 55fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro EXPECT_EQ(3U, vec.size()); 56fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro vec.clear(); 57fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 586ea095ad30bf13cc00b4fee7afbbe4731a349c83Brian Carlstrom art::ParseClassPath("foo:bar:baz:", vec); 59fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro EXPECT_EQ(3U, vec.size()); 60fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro vec.clear(); 61fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 626ea095ad30bf13cc00b4fee7afbbe4731a349c83Brian Carlstrom art::ParseClassPath(":foo:bar:baz:", vec); 63fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro EXPECT_EQ(3U, vec.size()); 64fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro vec.clear(); 65fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro} 66fc322c72d7a89a6f7a05c8bdc232d780aecd9232Carl Shapiro 67f734cf55d510976f4862b15e35fc86eae2a3daf8Brian CarlstromTEST_F(RuntimeTest, ParsedOptions) { 68f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom void* test_vfprintf = reinterpret_cast<void*>(0xa); 69f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom void* test_abort = reinterpret_cast<void*>(0xb); 70f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom void* test_exit = reinterpret_cast<void*>(0xc); 71f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom void* null = reinterpret_cast<void*>(NULL); 72f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom scoped_ptr<const DexFile> java_lang_dex_file(GetLibCoreDex()); 73f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom std::vector<const DexFile*> boot_class_path; 74f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom boot_class_path.push_back(java_lang_dex_file_.get()); 75f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom 76f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom Runtime::Options options; 77f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom options.push_back(std::make_pair("-Xbootclasspath:class_path_foo:class_path_bar", null)); 78f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom options.push_back(std::make_pair("bootclasspath", &boot_class_path)); 79f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom options.push_back(std::make_pair("-Xbootimage:boot_image", null)); 80f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom options.push_back(std::make_pair("-Xcheck:jni", null)); 81f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom options.push_back(std::make_pair("-Xms2048", null)); 82f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom options.push_back(std::make_pair("-Xmx4k", null)); 83f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom options.push_back(std::make_pair("-Xss1m", null)); 84f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom options.push_back(std::make_pair("-Dfoo=bar", null)); 85f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom options.push_back(std::make_pair("-Dbaz=qux", null)); 86f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom options.push_back(std::make_pair("-verbose:gc,class,jni", null)); 87f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom options.push_back(std::make_pair("vfprintf", test_vfprintf)); 88f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom options.push_back(std::make_pair("abort", test_abort)); 89f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom options.push_back(std::make_pair("exit", test_exit)); 90f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom scoped_ptr<Runtime::ParsedOptions> parsed(Runtime::ParsedOptions::Create(options, false)); 91f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom ASSERT_TRUE(parsed != NULL); 92f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom 93f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom EXPECT_EQ(1U, parsed->boot_class_path_.size()); // bootclasspath overrides -Xbootclasspath 94f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom EXPECT_STREQ("boot_image", parsed->boot_image_); 95f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom EXPECT_EQ(true, parsed->check_jni_); 96f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom EXPECT_EQ(2048U, parsed->heap_initial_size_); 97f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom EXPECT_EQ(4 * KB, parsed->heap_maximum_size_); 98f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom EXPECT_EQ(1 * MB, parsed->stack_size_); 99f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom EXPECT_TRUE(test_vfprintf == parsed->hook_vfprintf_); 100f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom EXPECT_TRUE(test_exit == parsed->hook_exit_); 101f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom EXPECT_TRUE(test_abort == parsed->hook_abort_); 102f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom ASSERT_EQ(3U, parsed->verbose_.size()); 103f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom EXPECT_TRUE(parsed->verbose_.find("gc") != parsed->verbose_.end()); 104f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom EXPECT_TRUE(parsed->verbose_.find("class") != parsed->verbose_.end()); 105f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom EXPECT_TRUE(parsed->verbose_.find("jni") != parsed->verbose_.end()); 106f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom ASSERT_EQ(2U, parsed->properties_.size()); 107f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom EXPECT_EQ("foo=bar", parsed->properties_[0]); 108f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom EXPECT_EQ("baz=qux", parsed->properties_[1]); 109f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom} 110f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom 111f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom} // namespace art 112