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