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

Side by Side Diff: test/cctest/test-api.cc

Issue 622783002: Make PromiseRejectCallback fire after end-of-turn. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 2 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/runtime/runtime-observe.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 17650 matching lines...) Expand 10 before | Expand all | Expand 10 after
17661 v8::Isolate* isolate = env->GetIsolate(); 17661 v8::Isolate* isolate = env->GetIsolate();
17662 v8::HandleScope scope(isolate); 17662 v8::HandleScope scope(isolate);
17663 17663
17664 isolate->SetPromiseRejectCallback(PromiseRejectCallback); 17664 isolate->SetPromiseRejectCallback(PromiseRejectCallback);
17665 17665
17666 ResetPromiseStates(); 17666 ResetPromiseStates();
17667 17667
17668 // Create promise p0. 17668 // Create promise p0.
17669 CompileRun( 17669 CompileRun(
17670 "var reject; \n" 17670 "var reject; \n"
17671 "var p0 = new Promise( \n" 17671 "var p0 = new Promise( \n"
17672 " function(res, rej) { \n" 17672 " function(res, rej) { \n"
17673 " reject = rej; \n" 17673 " reject = rej; \n"
17674 " } \n" 17674 " } \n"
17675 "); \n"); 17675 "); \n");
17676 CHECK(!GetPromise("p0")->HasHandler());
17677 CHECK_EQ(0, promise_reject_counter); 17676 CHECK_EQ(0, promise_reject_counter);
17678 CHECK_EQ(0, promise_revoke_counter); 17677 CHECK_EQ(0, promise_revoke_counter);
17679 17678
17680 // Add resolve handler (and default reject handler) to p0. 17679 // Add resolve handler (and default reject handler) to p0.
17681 CompileRun("var p1 = p0.then(function(){});"); 17680 CompileRun("var p1 = p0.then(function(){});");
17682 CHECK(GetPromise("p0")->HasHandler());
17683 CHECK(!GetPromise("p1")->HasHandler());
17684 CHECK_EQ(0, promise_reject_counter); 17681 CHECK_EQ(0, promise_reject_counter);
17685 CHECK_EQ(0, promise_revoke_counter); 17682 CHECK_EQ(0, promise_revoke_counter);
17686 17683
17687 // Reject p0. 17684 // Reject p0.
17688 CompileRun("reject('ppp');"); 17685 CompileRun("reject('ppp');");
17689 CHECK(GetPromise("p0")->HasHandler());
17690 CHECK(!GetPromise("p1")->HasHandler());
17691 CHECK_EQ(1, promise_reject_counter); 17686 CHECK_EQ(1, promise_reject_counter);
17692 CHECK_EQ(0, promise_revoke_counter); 17687 CHECK_EQ(0, promise_revoke_counter);
17693 CHECK_EQ(v8::kPromiseRejectWithNoHandler, reject_event); 17688 CHECK_EQ(v8::kPromiseRejectWithNoHandler, reject_event);
17694 CHECK(GetPromise("rejected")->Equals(GetPromise("p1"))); 17689 CHECK(GetPromise("rejected")->Equals(GetPromise("p1")));
17695 CHECK(RejectValue()->Equals(v8_str("ppp"))); 17690 CHECK(RejectValue()->Equals(v8_str("ppp")));
17696 17691
17697 // Reject p0 again. Callback is not triggered again. 17692 // Reject p0 again. Callback is not triggered again.
17698 CompileRun("reject();"); 17693 CompileRun("reject();");
17699 CHECK(GetPromise("p0")->HasHandler());
17700 CHECK(!GetPromise("p1")->HasHandler());
17701 CHECK_EQ(1, promise_reject_counter); 17694 CHECK_EQ(1, promise_reject_counter);
17702 CHECK_EQ(0, promise_revoke_counter); 17695 CHECK_EQ(0, promise_revoke_counter);
17703 17696
17704 // Add resolve handler to p1. 17697 // Add resolve handler to p1.
17705 CompileRun("var p2 = p1.then(function(){});"); 17698 CompileRun("var p2 = p1.then(function(){});");
17706 CHECK(GetPromise("p0")->HasHandler());
17707 CHECK(GetPromise("p1")->HasHandler());
17708 CHECK(!GetPromise("p2")->HasHandler());
17709 CHECK_EQ(2, promise_reject_counter); 17699 CHECK_EQ(2, promise_reject_counter);
17710 CHECK_EQ(1, promise_revoke_counter); 17700 CHECK_EQ(1, promise_revoke_counter);
17711 CHECK(GetPromise("rejected")->Equals(GetPromise("p2"))); 17701 CHECK(GetPromise("rejected")->Equals(GetPromise("p2")));
17712 CHECK(RejectValue()->Equals(v8_str("ppp"))); 17702 CHECK(RejectValue()->Equals(v8_str("ppp")));
17713 CHECK(GetPromise("revoked")->Equals(GetPromise("p1"))); 17703 CHECK(GetPromise("revoked")->Equals(GetPromise("p1")));
17714 17704
17715 ResetPromiseStates(); 17705 ResetPromiseStates();
17716 17706
17717 // Create promise q0. 17707 // Create promise q0.
17718 CompileRun( 17708 CompileRun(
17719 "var q0 = new Promise( \n" 17709 "var q0 = new Promise( \n"
17720 " function(res, rej) { \n" 17710 " function(res, rej) { \n"
17721 " reject = rej; \n" 17711 " reject = rej; \n"
17722 " } \n" 17712 " } \n"
17723 "); \n"); 17713 "); \n");
17724 CHECK(!GetPromise("q0")->HasHandler());
17725 CHECK_EQ(0, promise_reject_counter); 17714 CHECK_EQ(0, promise_reject_counter);
17726 CHECK_EQ(0, promise_revoke_counter); 17715 CHECK_EQ(0, promise_revoke_counter);
17727 17716
17728 // Add reject handler to q0. 17717 // Add reject handler to q0.
17729 CompileRun("var q1 = q0.catch(function() {});"); 17718 CompileRun("var q1 = q0.catch(function() {});");
17730 CHECK(GetPromise("q0")->HasHandler());
17731 CHECK(!GetPromise("q1")->HasHandler());
17732 CHECK_EQ(0, promise_reject_counter); 17719 CHECK_EQ(0, promise_reject_counter);
17733 CHECK_EQ(0, promise_revoke_counter); 17720 CHECK_EQ(0, promise_revoke_counter);
17734 17721
17735 // Reject q0. 17722 // Reject q0.
17736 CompileRun("reject('qq')"); 17723 CompileRun("reject('qq')");
17737 CHECK(GetPromise("q0")->HasHandler());
17738 CHECK(!GetPromise("q1")->HasHandler());
17739 CHECK_EQ(0, promise_reject_counter); 17724 CHECK_EQ(0, promise_reject_counter);
17740 CHECK_EQ(0, promise_revoke_counter); 17725 CHECK_EQ(0, promise_revoke_counter);
17741 17726
17742 // Add a new reject handler, which rejects by returning Promise.reject(). 17727 // Add a new reject handler, which rejects by returning Promise.reject().
17743 // The returned promise q_ triggers a reject callback at first, only to 17728 // The returned promise q_ triggers a reject callback at first, only to
17744 // revoke it when returning it causes q2 to be rejected. 17729 // revoke it when returning it causes q2 to be rejected.
17745 CompileRun( 17730 CompileRun(
17746 "var q_;" 17731 "var q_;"
17747 "var q2 = q0.catch( \n" 17732 "var q2 = q0.catch( \n"
17748 " function() { \n" 17733 " function() { \n"
17749 " q_ = Promise.reject('qqq'); \n" 17734 " q_ = Promise.reject('qqq'); \n"
17750 " return q_; \n" 17735 " return q_; \n"
17751 " } \n" 17736 " } \n"
17752 "); \n"); 17737 "); \n");
17753 CHECK(GetPromise("q0")->HasHandler()); 17738 CHECK_EQ(1, promise_reject_counter);
17754 CHECK(!GetPromise("q1")->HasHandler()); 17739 CHECK_EQ(0, promise_revoke_counter);
17755 CHECK(!GetPromise("q2")->HasHandler());
17756 CHECK(GetPromise("q_")->HasHandler());
17757 CHECK_EQ(2, promise_reject_counter);
17758 CHECK_EQ(1, promise_revoke_counter);
17759 CHECK(GetPromise("rejected")->Equals(GetPromise("q2"))); 17740 CHECK(GetPromise("rejected")->Equals(GetPromise("q2")));
17760 CHECK(GetPromise("revoked")->Equals(GetPromise("q_")));
17761 CHECK(RejectValue()->Equals(v8_str("qqq"))); 17741 CHECK(RejectValue()->Equals(v8_str("qqq")));
17762 17742
17763 // Add a reject handler to the resolved q1, which rejects by throwing. 17743 // Add a reject handler to the resolved q1, which rejects by throwing.
17764 CompileRun( 17744 CompileRun(
17765 "var q3 = q1.then( \n" 17745 "var q3 = q1.then( \n"
17766 " function() { \n" 17746 " function() { \n"
17767 " throw 'qqqq'; \n" 17747 " throw 'qqqq'; \n"
17768 " } \n" 17748 " } \n"
17769 "); \n"); 17749 "); \n");
17770 CHECK(GetPromise("q0")->HasHandler()); 17750 CHECK_EQ(2, promise_reject_counter);
17771 CHECK(GetPromise("q1")->HasHandler()); 17751 CHECK_EQ(0, promise_revoke_counter);
17772 CHECK(!GetPromise("q2")->HasHandler());
17773 CHECK(!GetPromise("q3")->HasHandler());
17774 CHECK_EQ(3, promise_reject_counter);
17775 CHECK_EQ(1, promise_revoke_counter);
17776 CHECK(GetPromise("rejected")->Equals(GetPromise("q3"))); 17752 CHECK(GetPromise("rejected")->Equals(GetPromise("q3")));
17777 CHECK(RejectValue()->Equals(v8_str("qqqq"))); 17753 CHECK(RejectValue()->Equals(v8_str("qqqq")));
17778 17754
17779 ResetPromiseStates(); 17755 ResetPromiseStates();
17780 17756
17781 // Create promise r0, which has three handlers, two of which handle rejects. 17757 // Create promise r0, which has three handlers, two of which handle rejects.
17782 CompileRun( 17758 CompileRun(
17783 "var r0 = new Promise( \n" 17759 "var r0 = new Promise( \n"
17784 " function(res, rej) { \n" 17760 " function(res, rej) { \n"
17785 " reject = rej; \n" 17761 " reject = rej; \n"
17786 " } \n" 17762 " } \n"
17787 "); \n" 17763 "); \n"
17788 "var r1 = r0.catch(function() {}); \n" 17764 "var r1 = r0.catch(function() {}); \n"
17789 "var r2 = r0.then(function() {}); \n" 17765 "var r2 = r0.then(function() {}); \n"
17790 "var r3 = r0.then(function() {}, \n" 17766 "var r3 = r0.then(function() {}, \n"
17791 " function() {}); \n"); 17767 " function() {}); \n");
17792 CHECK(GetPromise("r0")->HasHandler());
17793 CHECK(!GetPromise("r1")->HasHandler());
17794 CHECK(!GetPromise("r2")->HasHandler());
17795 CHECK(!GetPromise("r3")->HasHandler());
17796 CHECK_EQ(0, promise_reject_counter); 17768 CHECK_EQ(0, promise_reject_counter);
17797 CHECK_EQ(0, promise_revoke_counter); 17769 CHECK_EQ(0, promise_revoke_counter);
17798 17770
17799 // Reject r0. 17771 // Reject r0.
17800 CompileRun("reject('rrr')"); 17772 CompileRun("reject('rrr')");
17801 CHECK(GetPromise("r0")->HasHandler());
17802 CHECK(!GetPromise("r1")->HasHandler());
17803 CHECK(!GetPromise("r2")->HasHandler());
17804 CHECK(!GetPromise("r3")->HasHandler());
17805 CHECK_EQ(1, promise_reject_counter); 17773 CHECK_EQ(1, promise_reject_counter);
17806 CHECK_EQ(0, promise_revoke_counter); 17774 CHECK_EQ(0, promise_revoke_counter);
17807 CHECK(GetPromise("rejected")->Equals(GetPromise("r2"))); 17775 CHECK(GetPromise("rejected")->Equals(GetPromise("r2")));
17808 CHECK(RejectValue()->Equals(v8_str("rrr"))); 17776 CHECK(RejectValue()->Equals(v8_str("rrr")));
17809 17777
17810 // Add reject handler to r2. 17778 // Add reject handler to r2.
17811 CompileRun("var r4 = r2.catch(function() {});"); 17779 CompileRun("var r4 = r2.catch(function() {});");
17812 CHECK(GetPromise("r0")->HasHandler());
17813 CHECK(!GetPromise("r1")->HasHandler());
17814 CHECK(GetPromise("r2")->HasHandler());
17815 CHECK(!GetPromise("r3")->HasHandler());
17816 CHECK(!GetPromise("r4")->HasHandler());
17817 CHECK_EQ(1, promise_reject_counter); 17780 CHECK_EQ(1, promise_reject_counter);
17818 CHECK_EQ(1, promise_revoke_counter); 17781 CHECK_EQ(1, promise_revoke_counter);
17819 CHECK(GetPromise("revoked")->Equals(GetPromise("r2"))); 17782 CHECK(GetPromise("revoked")->Equals(GetPromise("r2")));
17820 CHECK(RejectValue()->Equals(v8_str("rrr"))); 17783 CHECK(RejectValue()->Equals(v8_str("rrr")));
17821 17784
17822 // Add reject handlers to r4. 17785 // Add reject handlers to r4.
17823 CompileRun("var r5 = r4.then(function() {}, function() {});"); 17786 CompileRun("var r5 = r4.then(function() {}, function() {});");
17824 CHECK(GetPromise("r0")->HasHandler());
17825 CHECK(!GetPromise("r1")->HasHandler());
17826 CHECK(GetPromise("r2")->HasHandler());
17827 CHECK(!GetPromise("r3")->HasHandler());
17828 CHECK(GetPromise("r4")->HasHandler());
17829 CHECK(!GetPromise("r5")->HasHandler());
17830 CHECK_EQ(1, promise_reject_counter); 17787 CHECK_EQ(1, promise_reject_counter);
17831 CHECK_EQ(1, promise_revoke_counter); 17788 CHECK_EQ(1, promise_revoke_counter);
17832 17789
17833 ResetPromiseStates(); 17790 ResetPromiseStates();
17834 17791
17835 // Create promise s0, which has three handlers, none of which handle rejects. 17792 // Create promise s0, which has three handlers, none of which handle rejects.
17836 CompileRun( 17793 CompileRun(
17837 "var s0 = new Promise( \n" 17794 "var s0 = new Promise( \n"
17838 " function(res, rej) { \n" 17795 " function(res, rej) { \n"
17839 " reject = rej; \n" 17796 " reject = rej; \n"
17840 " } \n" 17797 " } \n"
17841 "); \n" 17798 "); \n"
17842 "var s1 = s0.then(function() {}); \n" 17799 "var s1 = s0.then(function() {}); \n"
17843 "var s2 = s0.then(function() {}); \n" 17800 "var s2 = s0.then(function() {}); \n"
17844 "var s3 = s0.then(function() {}); \n"); 17801 "var s3 = s0.then(function() {}); \n");
17845 CHECK(GetPromise("s0")->HasHandler());
17846 CHECK(!GetPromise("s1")->HasHandler());
17847 CHECK(!GetPromise("s2")->HasHandler());
17848 CHECK(!GetPromise("s3")->HasHandler());
17849 CHECK_EQ(0, promise_reject_counter); 17802 CHECK_EQ(0, promise_reject_counter);
17850 CHECK_EQ(0, promise_revoke_counter); 17803 CHECK_EQ(0, promise_revoke_counter);
17851 17804
17852 // Reject s0. 17805 // Reject s0.
17853 CompileRun("reject('sss')"); 17806 CompileRun("reject('sss')");
17854 CHECK(GetPromise("s0")->HasHandler());
17855 CHECK(!GetPromise("s1")->HasHandler());
17856 CHECK(!GetPromise("s2")->HasHandler());
17857 CHECK(!GetPromise("s3")->HasHandler());
17858 CHECK_EQ(3, promise_reject_counter); 17807 CHECK_EQ(3, promise_reject_counter);
17859 CHECK_EQ(0, promise_revoke_counter); 17808 CHECK_EQ(0, promise_revoke_counter);
17860 CHECK(RejectValue()->Equals(v8_str("sss"))); 17809 CHECK(RejectValue()->Equals(v8_str("sss")));
17810
17811 ResetPromiseStates();
17812
17813 // Create promise m0, which has three handlers, which will be handled at a
17814 // microtask checkpoint.
17815 CompileRun(
17816 "var m0 = new Promise( \n"
17817 " function(res, rej) { \n"
17818 " reject = rej; \n"
17819 " } \n"
17820 "); \n"
17821 "var m1 = m0.then(function() {}); \n"
17822 "var m2 = m0.then(function() {}); \n"
17823 "var m3 = m0.then(function() {}); \n"
17824 "var m4; \n"
17825 "m0.catch(function() { \n"
17826 " m2.catch(function() { \n"
17827 " m1.catch(function() { \n"
17828 " m4 = m3.then(function() {})\n"
17829 " }); \n"
17830 " }); \n"
17831 "}); \n");
17832 CHECK_EQ(0, promise_reject_counter);
17833 CHECK_EQ(0, promise_revoke_counter);
17834
17835 // Reject m0: m1-m3 promises should be handled at "the end of turn".
17836 CompileRun("reject('mmm')");
17837 CHECK_EQ(1, promise_reject_counter);
17838 CHECK_EQ(0, promise_revoke_counter);
17839 CHECK(GetPromise("rejected")->Equals(GetPromise("m4")));
17840 CHECK(RejectValue()->Equals(v8_str("mmm")));
17861 } 17841 }
17862 17842
17863 17843
17864 void AnalyzeStackOfEvalWithSourceURL( 17844 void AnalyzeStackOfEvalWithSourceURL(
17865 const v8::FunctionCallbackInfo<v8::Value>& args) { 17845 const v8::FunctionCallbackInfo<v8::Value>& args) {
17866 v8::HandleScope scope(args.GetIsolate()); 17846 v8::HandleScope scope(args.GetIsolate());
17867 v8::Handle<v8::StackTrace> stackTrace = v8::StackTrace::CurrentStackTrace( 17847 v8::Handle<v8::StackTrace> stackTrace = v8::StackTrace::CurrentStackTrace(
17868 args.GetIsolate(), 10, v8::StackTrace::kDetailed); 17848 args.GetIsolate(), 10, v8::StackTrace::kDetailed);
17869 CHECK_EQ(5, stackTrace->GetFrameCount()); 17849 CHECK_EQ(5, stackTrace->GetFrameCount());
17870 v8::Handle<v8::String> url = v8_str("eval_url"); 17850 v8::Handle<v8::String> url = v8_str("eval_url");
(...skipping 5818 matching lines...) Expand 10 before | Expand all | Expand 10 after
23689 " var foobXXXXX"; // Too many bytes which look like incomplete chars! 23669 " var foobXXXXX"; // Too many bytes which look like incomplete chars!
23690 char chunk2[] = 23670 char chunk2[] =
23691 "r = 13;\n" 23671 "r = 13;\n"
23692 " return foob\xeb\x91\x80\x80\x80r;\n" 23672 " return foob\xeb\x91\x80\x80\x80r;\n"
23693 "}\n"; 23673 "}\n";
23694 for (int i = 0; i < 5; ++i) chunk1[strlen(chunk1) - 5 + i] = reference[i]; 23674 for (int i = 0; i < 5; ++i) chunk1[strlen(chunk1) - 5 + i] = reference[i];
23695 23675
23696 const char* chunks[] = {chunk1, chunk2, "foo();", NULL}; 23676 const char* chunks[] = {chunk1, chunk2, "foo();", NULL};
23697 RunStreamingTest(chunks, v8::ScriptCompiler::StreamedSource::UTF8, false); 23677 RunStreamingTest(chunks, v8::ScriptCompiler::StreamedSource::UTF8, false);
23698 } 23678 }
OLDNEW
« no previous file with comments | « src/runtime/runtime-observe.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698