Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(176)

Unified Diff: vm/snapshot_test.cc

Issue 10911159: - Add a test case to test Source code generation of all the corelibs (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« vm/object.cc ('K') | « vm/object.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: vm/snapshot_test.cc
===================================================================
--- vm/snapshot_test.cc (revision 12091)
+++ vm/snapshot_test.cc (working copy)
@@ -681,6 +681,36 @@
};
+static void GenerateSourceAndCheck(const Script& script) {
+ // Check if we are able to generate the source from the token stream.
+ // Rescan this source and compare the token stream to see if they are
+ // the same.
+ const TokenStream& expected_tokens = TokenStream::Handle(script.tokens());
+ TokenStream::Iterator expected_iterator(expected_tokens, 0);
+ const String& str = String::Handle(expected_tokens.GenerateSource());
+ const String& private_key = String::Handle(expected_tokens.PrivateKey());
+ Scanner scanner(str, private_key);
+ const TokenStream& reconstructed_tokens =
+ TokenStream::Handle(TokenStream::New(scanner.GetStream(), private_key));
+ expected_iterator.SetCurrentPosition(0);
+ TokenStream::Iterator reconstructed_iterator(reconstructed_tokens, 0);
+ Token::Kind expected_kind = expected_iterator.CurrentTokenKind();
+ Token::Kind reconstructed_kind = reconstructed_iterator.CurrentTokenKind();
+ String& expected_literal = String::Handle();
+ String& actual_literal = String::Handle();
+ while (expected_kind != Token::kEOS && reconstructed_kind != Token::kEOS) {
+ EXPECT_EQ(expected_kind, reconstructed_kind);
+ expected_literal ^= expected_iterator.CurrentLiteral();
+ actual_literal ^= reconstructed_iterator.CurrentLiteral();
+ EXPECT(expected_literal.Equals(actual_literal));
+ expected_iterator.Advance();
+ reconstructed_iterator.Advance();
+ expected_kind = expected_iterator.CurrentTokenKind();
+ reconstructed_kind = reconstructed_iterator.CurrentTokenKind();
+ }
+}
+
+
TEST_CASE(SerializeScript) {
const char* kScriptChars =
"class A {\n"
@@ -746,30 +776,51 @@
// Check if we are able to generate the source from the token stream.
// Rescan this source and compare the token stream to see if they are
// the same.
- str ^= serialized_tokens.GenerateSource();
- const String& dummy_key = String::Handle(String::New(""));
- Scanner scanner(str, dummy_key);
- const TokenStream& reconstructed_tokens =
- TokenStream::Handle(TokenStream::New(scanner.GetStream(), dummy_key));
- expected_iterator.SetCurrentPosition(0);
- TokenStream::Iterator reconstructed_iterator(reconstructed_tokens, 0);
- expected_kind = expected_iterator.CurrentTokenKind();
- Token::Kind reconstructed_kind = reconstructed_iterator.CurrentTokenKind();
- while (expected_kind != Token::kEOS && reconstructed_kind != Token::kEOS) {
- EXPECT_EQ(expected_kind, reconstructed_kind);
- expected_literal ^= expected_iterator.CurrentLiteral();
- actual_literal ^= reconstructed_iterator.CurrentLiteral();
- EXPECT(expected_literal.Equals(actual_literal));
- expected_iterator.Advance();
- reconstructed_iterator.Advance();
- expected_kind = expected_iterator.CurrentTokenKind();
- reconstructed_kind = reconstructed_iterator.CurrentTokenKind();
- }
+ GenerateSourceAndCheck(serialized_script);
free(buffer);
}
+static void IterateScripts(const Library& lib) {
+ const Array& lib_scripts = Array::Handle(lib.LoadedScripts());
+ Script& script = Script::Handle();
+ for (intptr_t i = 0; i < lib_scripts.Length(); i++) {
+ script ^= lib_scripts.At(i);
+ EXPECT(!script.IsNull());
+ GenerateSourceAndCheck(script);
+ }
+}
+
+TEST_CASE(GenerateSource) {
+ Library& lib = Library::Handle();
+ // Check core lib.
+ lib = Library::CoreLibrary();
+ EXPECT(!lib.IsNull());
+ IterateScripts(lib);
+
+ // Check core impl lib.
+ lib = Library::CoreImplLibrary();
+ EXPECT(!lib.IsNull());
+ IterateScripts(lib);
+
+ // Check isolate lib.
+ lib = Library::IsolateLibrary();
+ EXPECT(!lib.IsNull());
+ IterateScripts(lib);
+
+ // Check math lib.
+ lib = Library::MathLibrary();
+ EXPECT(!lib.IsNull());
+ IterateScripts(lib);
+
+ // Check mirrors lib.
+ lib = Library::MirrorsLibrary();
+ EXPECT(!lib.IsNull());
+ IterateScripts(lib);
+}
+
+
// Only ia32 and x64 can run execution tests.
#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
UNIT_TEST_CASE(FullSnapshot) {
« vm/object.cc ('K') | « vm/object.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698