OLD | NEW |
1 // Copyright 2007-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2008 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 1704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1715 v8::Handle<Value> ThrowFromC(const v8::Arguments& args) { | 1715 v8::Handle<Value> ThrowFromC(const v8::Arguments& args) { |
1716 ApiTestFuzzer::Fuzz(); | 1716 ApiTestFuzzer::Fuzz(); |
1717 return v8::ThrowException(v8_str("konto")); | 1717 return v8::ThrowException(v8_str("konto")); |
1718 } | 1718 } |
1719 | 1719 |
1720 | 1720 |
1721 v8::Handle<Value> CCatcher(const v8::Arguments& args) { | 1721 v8::Handle<Value> CCatcher(const v8::Arguments& args) { |
1722 if (args.Length() < 1) return v8::Boolean::New(false); | 1722 if (args.Length() < 1) return v8::Boolean::New(false); |
1723 v8::HandleScope scope; | 1723 v8::HandleScope scope; |
1724 v8::TryCatch try_catch; | 1724 v8::TryCatch try_catch; |
1725 Local<Value> result = v8::Script::Compile(args[0]->ToString())->Run(); | 1725 v8::Script::Compile(args[0]->ToString())->Run(); |
1726 CHECK(!try_catch.HasCaught() || result.IsEmpty()); | |
1727 return v8::Boolean::New(try_catch.HasCaught()); | 1726 return v8::Boolean::New(try_catch.HasCaught()); |
1728 } | 1727 } |
1729 | 1728 |
1730 | 1729 |
1731 THREADED_TEST(APICatch) { | 1730 THREADED_TEST(APICatch) { |
1732 v8::HandleScope scope; | 1731 v8::HandleScope scope; |
1733 Local<ObjectTemplate> templ = ObjectTemplate::New(); | 1732 Local<ObjectTemplate> templ = ObjectTemplate::New(); |
1734 templ->Set(v8_str("ThrowFromC"), | 1733 templ->Set(v8_str("ThrowFromC"), |
1735 v8::FunctionTemplate::New(ThrowFromC)); | 1734 v8::FunctionTemplate::New(ThrowFromC)); |
1736 LocalContext context(0, templ); | 1735 LocalContext context(0, templ); |
(...skipping 16 matching lines...) Expand all Loading... |
1753 v8::FunctionTemplate::New(ThrowFromC)); | 1752 v8::FunctionTemplate::New(ThrowFromC)); |
1754 LocalContext context(0, templ); | 1753 LocalContext context(0, templ); |
1755 v8::TryCatch try_catch; | 1754 v8::TryCatch try_catch; |
1756 CompileRun("ThrowFromC();"); | 1755 CompileRun("ThrowFromC();"); |
1757 CHECK(try_catch.HasCaught()); | 1756 CHECK(try_catch.HasCaught()); |
1758 } | 1757 } |
1759 | 1758 |
1760 | 1759 |
1761 // Test that a try-finally block doesn't shadow a try-catch block | 1760 // Test that a try-finally block doesn't shadow a try-catch block |
1762 // when setting up an external handler. | 1761 // when setting up an external handler. |
1763 // | 1762 THREADED_TEST(TryCatchInTryFinally) { |
1764 // TODO(271): This should be a threaded test. It was disabled for the | |
1765 // thread tests because it fails on the ARM simulator. Should be made | |
1766 // threadable again when the simulator issue is resolved. | |
1767 TEST(TryCatchInTryFinally) { | |
1768 v8::HandleScope scope; | 1763 v8::HandleScope scope; |
1769 Local<ObjectTemplate> templ = ObjectTemplate::New(); | 1764 Local<ObjectTemplate> templ = ObjectTemplate::New(); |
1770 templ->Set(v8_str("CCatcher"), | 1765 templ->Set(v8_str("CCatcher"), |
1771 v8::FunctionTemplate::New(CCatcher)); | 1766 v8::FunctionTemplate::New(CCatcher)); |
1772 LocalContext context(0, templ); | 1767 LocalContext context(0, templ); |
1773 Local<Value> result = CompileRun("try {" | 1768 Local<Value> result = CompileRun("try {" |
1774 " try {" | 1769 " try {" |
1775 " CCatcher('throw 7;');" | 1770 " CCatcher('throw 7;');" |
1776 " } finally {" | 1771 " } finally {" |
1777 " }" | 1772 " }" |
(...skipping 26 matching lines...) Expand all Loading... |
1804 TEST(APIThrowMessageAndVerboseTryCatch) { | 1799 TEST(APIThrowMessageAndVerboseTryCatch) { |
1805 message_received = false; | 1800 message_received = false; |
1806 v8::HandleScope scope; | 1801 v8::HandleScope scope; |
1807 v8::V8::AddMessageListener(receive_message); | 1802 v8::V8::AddMessageListener(receive_message); |
1808 Local<ObjectTemplate> templ = ObjectTemplate::New(); | 1803 Local<ObjectTemplate> templ = ObjectTemplate::New(); |
1809 templ->Set(v8_str("ThrowFromC"), | 1804 templ->Set(v8_str("ThrowFromC"), |
1810 v8::FunctionTemplate::New(ThrowFromC)); | 1805 v8::FunctionTemplate::New(ThrowFromC)); |
1811 LocalContext context(0, templ); | 1806 LocalContext context(0, templ); |
1812 v8::TryCatch try_catch; | 1807 v8::TryCatch try_catch; |
1813 try_catch.SetVerbose(true); | 1808 try_catch.SetVerbose(true); |
1814 Local<Value> result = CompileRun("ThrowFromC();"); | 1809 CompileRun("ThrowFromC();"); |
1815 CHECK(try_catch.HasCaught()); | 1810 CHECK(try_catch.HasCaught()); |
1816 CHECK(result.IsEmpty()); | |
1817 CHECK(message_received); | 1811 CHECK(message_received); |
1818 v8::V8::RemoveMessageListeners(check_message); | 1812 v8::V8::RemoveMessageListeners(check_message); |
1819 } | 1813 } |
1820 | 1814 |
1821 | 1815 |
1822 THREADED_TEST(ExternalScriptException) { | 1816 THREADED_TEST(ExternalScriptException) { |
1823 v8::HandleScope scope; | 1817 v8::HandleScope scope; |
1824 Local<ObjectTemplate> templ = ObjectTemplate::New(); | 1818 Local<ObjectTemplate> templ = ObjectTemplate::New(); |
1825 templ->Set(v8_str("ThrowFromC"), | 1819 templ->Set(v8_str("ThrowFromC"), |
1826 v8::FunctionTemplate::New(ThrowFromC)); | 1820 v8::FunctionTemplate::New(ThrowFromC)); |
(...skipping 25 matching lines...) Expand all Loading... |
1852 args[1], | 1846 args[1], |
1853 args[2], | 1847 args[2], |
1854 args[3] }; | 1848 args[3] }; |
1855 if (count % cInterval == 0) { | 1849 if (count % cInterval == 0) { |
1856 v8::TryCatch try_catch; | 1850 v8::TryCatch try_catch; |
1857 Local<Value> result = | 1851 Local<Value> result = |
1858 v8::Handle<Function>::Cast(fun)->Call(global, 4, argv); | 1852 v8::Handle<Function>::Cast(fun)->Call(global, 4, argv); |
1859 int expected = args[3]->Int32Value(); | 1853 int expected = args[3]->Int32Value(); |
1860 if (try_catch.HasCaught()) { | 1854 if (try_catch.HasCaught()) { |
1861 CHECK_EQ(expected, count); | 1855 CHECK_EQ(expected, count); |
1862 CHECK(result.IsEmpty()); | |
1863 CHECK(!i::Top::has_scheduled_exception()); | 1856 CHECK(!i::Top::has_scheduled_exception()); |
1864 } else { | 1857 } else { |
1865 CHECK_NE(expected, count); | 1858 CHECK_NE(expected, count); |
1866 } | 1859 } |
1867 return result; | 1860 return result; |
1868 } else { | 1861 } else { |
1869 return v8::Handle<Function>::Cast(fun)->Call(global, 4, argv); | 1862 return v8::Handle<Function>::Cast(fun)->Call(global, 4, argv); |
1870 } | 1863 } |
1871 } | 1864 } |
1872 } | 1865 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1910 // no other activations do. The right activation is always the topmost one with | 1903 // no other activations do. The right activation is always the topmost one with |
1911 // a handler, regardless of whether it is in JavaScript or C. | 1904 // a handler, regardless of whether it is in JavaScript or C. |
1912 // | 1905 // |
1913 // The notation used to describe a test case looks like this: | 1906 // The notation used to describe a test case looks like this: |
1914 // | 1907 // |
1915 // *JS[4] *C[3] @JS[2] C[1] JS[0] | 1908 // *JS[4] *C[3] @JS[2] C[1] JS[0] |
1916 // | 1909 // |
1917 // Each entry is an activation, either JS or C. The index is the count at that | 1910 // Each entry is an activation, either JS or C. The index is the count at that |
1918 // level. Stars identify activations with exception handlers, the @ identifies | 1911 // level. Stars identify activations with exception handlers, the @ identifies |
1919 // the exception handler that should catch the exception. | 1912 // the exception handler that should catch the exception. |
1920 // | 1913 THREADED_TEST(ExceptionOrder) { |
1921 // TODO(271): This should be a threaded test. It was disabled for the | |
1922 // thread tests because it fails on the ARM simulator. Should be made | |
1923 // threadable again when the simulator issue is resolved. | |
1924 TEST(ExceptionOrder) { | |
1925 v8::HandleScope scope; | 1914 v8::HandleScope scope; |
1926 Local<ObjectTemplate> templ = ObjectTemplate::New(); | 1915 Local<ObjectTemplate> templ = ObjectTemplate::New(); |
1927 templ->Set(v8_str("check"), v8::FunctionTemplate::New(JSCheck)); | 1916 templ->Set(v8_str("check"), v8::FunctionTemplate::New(JSCheck)); |
1928 templ->Set(v8_str("CThrowCountDown"), | 1917 templ->Set(v8_str("CThrowCountDown"), |
1929 v8::FunctionTemplate::New(CThrowCountDown)); | 1918 v8::FunctionTemplate::New(CThrowCountDown)); |
1930 LocalContext context(0, templ); | 1919 LocalContext context(0, templ); |
1931 CompileRun( | 1920 CompileRun( |
1932 "function JSThrowCountDown(count, jsInterval, cInterval, expected) {" | 1921 "function JSThrowCountDown(count, jsInterval, cInterval, expected) {" |
1933 " if (count == 0) throw 'FromJS';" | 1922 " if (count == 0) throw 'FromJS';" |
1934 " if (count % jsInterval == 0) {" | 1923 " if (count % jsInterval == 0) {" |
(...skipping 3868 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5803 | 5792 |
5804 // Local context should still be live. | 5793 // Local context should still be live. |
5805 CHECK(!local_env.IsEmpty()); | 5794 CHECK(!local_env.IsEmpty()); |
5806 local_env->Enter(); | 5795 local_env->Enter(); |
5807 | 5796 |
5808 // Should complete without problems. | 5797 // Should complete without problems. |
5809 RegExpInterruptTest().RunTest(); | 5798 RegExpInterruptTest().RunTest(); |
5810 | 5799 |
5811 local_env->Exit(); | 5800 local_env->Exit(); |
5812 } | 5801 } |
OLD | NEW |