Chromium Code Reviews| Index: test/cctest/test-parsing.cc |
| diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc |
| index 1a9c36ce906d1e55a3903c53bd17bd42958f5e6e..0c2bfe272114d9f5d71d47a2196b7dff6e233c84 100644 |
| --- a/test/cctest/test-parsing.cc |
| +++ b/test/cctest/test-parsing.cc |
| @@ -4671,11 +4671,24 @@ TEST(ComputedPropertyNameShorthandError) { |
| TEST(BasicImportExportParsing) { |
| - const char kSource[] = |
| - "export let x = 0;" |
| - "import y from 'http://module.com/foo.js';" |
| - "function f() {};" |
| - "f();"; |
| + const char* kSources[] = { |
| + "export let x = 0;", |
| + "export var y = 0;", |
|
adamk
2015/01/28 00:01:54
These lists of strings aren't supported by 'git cl
|
| + "export const z = 0;", |
| + "export function func() { };", |
| + "export class C { };", |
| + "export { };", |
| + "function f() {}; f(); export { f };", |
| + "var a, b, c; export { a, b as baz, c };", |
| + "var d, e; export { d as dreary, e, };", |
| + "import y from 'http://module.com/foo.js';", |
| + "export default function f() {}", |
| + "export default class C {}", |
| + "export default 42", |
| + "var x; export default x = 7", |
| + "export { Q } from 'somemodule.js';", |
| + "export * from 'somemodule.js';" |
| + }; |
| i::Isolate* isolate = CcTest::i_isolate(); |
| i::Factory* factory = isolate->factory(); |
| @@ -4687,38 +4700,96 @@ TEST(BasicImportExportParsing) { |
| isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - |
| 128 * 1024); |
| - int kProgramByteSize = i::StrLength(kSource); |
| - i::ScopedVector<char> program(kProgramByteSize + 1); |
| - i::SNPrintF(program, "%s", kSource); |
| - i::Handle<i::String> source = |
| + for (unsigned i = 0; i < arraysize(kSources); ++i) { |
| + int kProgramByteSize = i::StrLength(kSources[i]); |
| + i::ScopedVector<char> program(kProgramByteSize + 1); |
| + i::SNPrintF(program, "%s", kSources[i]); |
| + i::Handle<i::String> source = |
| factory->NewStringFromUtf8(i::CStrVector(program.start())) |
| - .ToHandleChecked(); |
| + .ToHandleChecked(); |
| - // Show that parsing as a module works |
| - { |
| - i::Handle<i::Script> script = factory->NewScript(source); |
| - i::CompilationInfoWithZone info(script); |
| - i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), |
| - isolate->heap()->HashSeed(), |
| - isolate->unicode_cache()}; |
| - i::Parser parser(&info, &parse_info); |
| - parser.set_allow_harmony_modules(true); |
| - parser.set_allow_harmony_scoping(true); |
| - info.MarkAsModule(); |
| - CHECK(parser.Parse()); |
| + // Show that parsing as a module works |
| + { |
| + i::Handle<i::Script> script = factory->NewScript(source); |
| + i::CompilationInfoWithZone info(script); |
| + i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), |
| + isolate->heap()->HashSeed(), |
| + isolate->unicode_cache()}; |
| + i::Parser parser(&info, &parse_info); |
| + parser.set_allow_harmony_classes(true); |
| + parser.set_allow_harmony_modules(true); |
| + parser.set_allow_harmony_scoping(true); |
| + info.MarkAsModule(); |
| + CHECK(parser.Parse()); |
| + } |
| + |
| + // And that parsing a script does not. |
| + { |
| + i::Handle<i::Script> script = factory->NewScript(source); |
| + i::CompilationInfoWithZone info(script); |
| + i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), |
| + isolate->heap()->HashSeed(), |
| + isolate->unicode_cache()}; |
| + i::Parser parser(&info, &parse_info); |
| + parser.set_allow_harmony_classes(true); |
| + parser.set_allow_harmony_modules(true); |
| + parser.set_allow_harmony_scoping(true); |
| + info.MarkAsGlobal(); |
| + CHECK(!parser.Parse()); |
| + } |
| } |
| +} |
| + |
| + |
| +TEST(ImportExportParsingErrors) { |
| + const char* kErrorSources[] = { |
| + "export {", |
| + "var a; export { a", |
|
arv (Not doing code reviews)
2015/01/28 02:57:19
Add test for `export {,}`?
adamk
2015/01/28 18:05:04
Done.
|
| + "var a; export { a,", |
| + "var a; export { a, ;", |
| + "var a; export { a as };", |
| + "var a, b; export { a as , b};", |
| + "export }", |
| + "var foo, bar; export { foo bar };", |
| + "export { foo };", |
| + "export default;", |
| + "export default var x = 7;", |
| + "export default let x = 7;", |
| + "export default const x = 7;", |
| + "export *;", |
| + "export * from;", |
| + "export { Q } from;" |
| + "export default from 'module.js';" |
| + }; |
| + |
| + i::Isolate* isolate = CcTest::i_isolate(); |
| + i::Factory* factory = isolate->factory(); |
| + |
| + v8::HandleScope handles(CcTest::isolate()); |
| + v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); |
| + v8::Context::Scope context_scope(context); |
| + |
| + isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - |
| + 128 * 1024); |
| + |
| + for (unsigned i = 0; i < arraysize(kErrorSources); ++i) { |
| + int kProgramByteSize = i::StrLength(kErrorSources[i]); |
| + i::ScopedVector<char> program(kProgramByteSize + 1); |
| + i::SNPrintF(program, "%s", kErrorSources[i]); |
| + i::Handle<i::String> source = |
| + factory->NewStringFromUtf8(i::CStrVector(program.start())) |
| + .ToHandleChecked(); |
| - // And that parsing a script does not. |
| - { |
| i::Handle<i::Script> script = factory->NewScript(source); |
| i::CompilationInfoWithZone info(script); |
| i::Parser::ParseInfo parse_info = {isolate->stack_guard()->real_climit(), |
| isolate->heap()->HashSeed(), |
| isolate->unicode_cache()}; |
| i::Parser parser(&info, &parse_info); |
| + parser.set_allow_harmony_classes(true); |
| parser.set_allow_harmony_modules(true); |
| parser.set_allow_harmony_scoping(true); |
| - info.MarkAsGlobal(); |
| + info.MarkAsModule(); |
| CHECK(!parser.Parse()); |
| } |
| } |