1b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# Copyright (c) 2014 The Chromium Authors. All rights reserved. 2b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# Use of this source code is governed by a BSD-style license that can be 3b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# found in the LICENSE file. 4b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 5b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikimport os 6b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikimport re 7b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikimport sys 8b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikimport shutil 9b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikimport tempfile 10b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikimport unittest 11b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 12b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikfrom vinn import d8_runner 13b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 14b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 15b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik@unittest.skipIf(sys.platform.startswith('win'), 16b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'd8 not yet supported on Windows.') 17b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikclass D8RunnerUnittest(unittest.TestCase): 18b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 19b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik @classmethod 20b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def setUpClass(cls): 21b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik cls.test_data_dir = os.path.abspath( 22b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik os.path.join(os.path.dirname(__file__), 'test_data')) 23b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 24b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def GetTestFilePath(self, file_name): 25b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return os.path.join(self.test_data_dir, file_name) 26b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 27b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def AssertHasNamedFrame(self, func_name, file_and_linum, exception_message): 28b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik m = re.search('at %s.+\(.*%s.*\)' % (func_name, file_and_linum), 29b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik exception_message) 30b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if not m: 31b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik sys.stderr.write('\n=============================================\n') 32b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik msg = "Expected to find %s and %s" % (func_name, file_and_linum) 33b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik sys.stderr.write('%s\n' % msg) 34b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik sys.stderr.write('=========== Begin Exception Message =========\n') 35b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik sys.stderr.write(exception_message) 36b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik sys.stderr.write('=========== End Exception Message =========\n\n') 37b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.fail(msg) 38b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 39b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def AssertHasFrame(self, file_and_linum, exception_message): 40b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik m = re.search('at .*%s.*' % file_and_linum, exception_message) 41b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if not m: 42b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik sys.stderr.write('\n=============================================\n') 43b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik msg = "Expected to find %s" % file_and_linum 44b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik sys.stderr.write('%s\n' % msg) 45b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik sys.stderr.write('=========== Begin Exception Message =========\n') 46b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik sys.stderr.write(exception_message) 47b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik sys.stderr.write('=========== End Exception Message =========\n\n') 48b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.fail(msg) 49b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 50b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testExecuteJsStringStdoutPiping(self): 51b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik tmp_dir = tempfile.mkdtemp() 52b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik try: 53b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik temp_file_name = os.path.join(tmp_dir, 'out_file') 54b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik with open(temp_file_name, 'w') as f: 55b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik d8_runner.ExcecuteJsString( 56b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'print("Hello w0rld");\n', stdout=f) 57b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik with open(temp_file_name, 'r') as f: 58b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertEquals(f.read(), 'Hello w0rld\n') 59b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik finally: 60b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik shutil.rmtree(tmp_dir) 61b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 62b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testRunJsStringStdoutPiping(self): 63b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik tmp_dir = tempfile.mkdtemp() 64b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik try: 65b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik temp_file_name = os.path.join(tmp_dir, 'out_file') 66b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik with open(temp_file_name, 'w') as f: 67b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik d8_runner.RunJsString( 68b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'print("Hello w0rld");\n', stdout=f) 69b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik with open(temp_file_name, 'r') as f: 70b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertEquals(f.read(), 'Hello w0rld\n') 71b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik finally: 72b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik shutil.rmtree(tmp_dir) 73b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 74b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testExecuteFileStdoutPiping(self): 75b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik file_path = self.GetTestFilePath('simple.js') 76b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik tmp_dir = tempfile.mkdtemp() 77b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik try: 78b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik temp_file_name = os.path.join(tmp_dir, 'out_file') 79b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik with open(temp_file_name, 'w') as f: 80b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik d8_runner.ExecuteFile(file_path, stdout=f) 81b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik with open(temp_file_name, 'r') as f: 82b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertEquals(f.read(), 'Hello W0rld from simple.js\n') 83b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik finally: 84b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik shutil.rmtree(tmp_dir) 85b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 86b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testRunFileStdoutPiping(self): 87b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik file_path = self.GetTestFilePath('simple.js') 88b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik tmp_dir = tempfile.mkdtemp() 89b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik try: 90b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik temp_file_name = os.path.join(tmp_dir, 'out_file') 91b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik with open(temp_file_name, 'w') as f: 92b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik d8_runner.RunFile(file_path, stdout=f) 93b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik with open(temp_file_name, 'r') as f: 94b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertEquals(f.read(), 'Hello W0rld from simple.js\n') 95b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik finally: 96b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik shutil.rmtree(tmp_dir) 97b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 98b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testSimpleJsExecution(self): 99b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik file_path = self.GetTestFilePath('print_file_content.js') 100b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik dummy_test_path = self.GetTestFilePath('dummy_test_file') 101b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik output = d8_runner.ExecuteFile(file_path, source_paths=[self.test_data_dir], 102b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik js_args=[dummy_test_path]) 103b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertIn( 104b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'This is file contains only data for testing.\n1 2 3 4', output) 105b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 106b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testJsFileLoadHtmlFile(self): 107b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik file_path = self.GetTestFilePath('load_simple_html.js') 108b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik output = d8_runner.ExecuteFile(file_path, source_paths=[self.test_data_dir]) 109b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_output = ('File foo.html is loaded\n' 110b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'x = 1\n' 111b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik "File foo.html's second script is loaded\n" 112b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'x = 2\n' 113b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'load_simple_html.js is loaded\n') 114b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertEquals(output, expected_output) 115b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 116b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testJsFileLoadJsFile(self): 117b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik file_path = self.GetTestFilePath('load_simple_js.js') 118b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik output = d8_runner.ExecuteFile(file_path, source_paths=[self.test_data_dir]) 119b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_output = ('bar.js is loaded\n' 120b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'load_simple_js.js is loaded\n') 121b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertEquals(output, expected_output) 122b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 123b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testHTMLFileLoadHTMLFile(self): 124b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik file_path = self.GetTestFilePath('load_simple_html.html') 125b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik output = d8_runner.ExecuteFile( 126b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik file_path, source_paths=[self.test_data_dir]) 127b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_output = ('File foo.html is loaded\n' 128b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'x = 1\n' 129b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik "File foo.html's second script is loaded\n" 130b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'x = 2\n' 131b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'bar.js is loaded\n' 132b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'File load_simple_html.html is loaded\n') 133b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertEquals(output, expected_output) 134b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 135b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testQuit0Handling(self): 136b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik file_path = self.GetTestFilePath('quit_0_test.js') 137b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik res = d8_runner.RunFile(file_path, source_paths=[self.test_data_dir]) 138b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertEquals(res.returncode, 0) 139b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 140b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testQuit1Handling(self): 141b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik file_path = self.GetTestFilePath('quit_1_test.js') 142b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik res = d8_runner.RunFile(file_path, source_paths=[self.test_data_dir]) 143b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertEquals(res.returncode, 1) 144b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 145b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testQuit42Handling(self): 146b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik file_path = self.GetTestFilePath('quit_42_test.js') 147b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik res = d8_runner.RunFile(file_path, source_paths=[self.test_data_dir]) 148b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertEquals(res.returncode, 42) 149b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 150b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testQuit274Handling(self): 151b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik file_path = self.GetTestFilePath('quit_274_test.js') 152b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik res = d8_runner.RunFile(file_path, source_paths=[self.test_data_dir]) 153b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertEquals(res.returncode, 238) 154b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 155b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testErrorStackTraceJs(self): 156b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik file_path = self.GetTestFilePath('error_stack_test.js') 157b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # error_stack_test.js imports load_simple_html.html 158b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # load_simple_html.html imports foo.html 159b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # foo.html imports error.js 160b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # error.js defines maybeRaiseException() method that can raise exception 161b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # foo.html defines maybeRaiseExceptionInFoo() method that calls 162b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # maybeRaiseException() 163b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # Finally, we call maybeRaiseExceptionInFoo() error_stack_test.js 164b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # Exception log should capture these method calls' stack trace. 165b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik with self.assertRaises(RuntimeError) as context: 166b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik d8_runner.ExecuteFile(file_path, source_paths=[self.test_data_dir]) 167b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 168b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # Assert error stack trace contain src files' info. 169b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik exception_message = context.exception.message 170b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertIn( 171b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik ('error.js:7: Error: Throw ERROR\n' 172b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik " throw new Error('Throw ERROR');"), exception_message) 173b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertHasNamedFrame('maybeRaiseException', 'error.js:7', 174b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik exception_message) 175b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertHasNamedFrame('global.maybeRaiseExceptionInFoo', 'foo.html:34', 176b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik exception_message) 177b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertHasFrame('error_stack_test.js:14', exception_message) 178b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 179b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testErrorStackTraceHTML(self): 180b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik file_path = self.GetTestFilePath('error_stack_test.html') 181b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # error_stack_test.html imports error_stack_test.js 182b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # error_stack_test.js imports load_simple_html.html 183b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # load_simple_html.html imports foo.html 184b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # foo.html imports error.js 185b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # error.js defines maybeRaiseException() method that can raise exception 186b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # foo.html defines maybeRaiseExceptionInFoo() method that calls 187b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # maybeRaiseException() 188b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # Finally, we call maybeRaiseExceptionInFoo() error_stack_test.js 189b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # Exception log should capture these method calls' stack trace. 190b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik with self.assertRaises(RuntimeError) as context: 191b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik d8_runner.ExecuteFile(file_path, source_paths=[self.test_data_dir]) 192b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 193b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # Assert error stack trace contain src files' info. 194b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik exception_message = context.exception.message 195b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertIn( 196b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik ('error.js:7: Error: Throw ERROR\n' 197b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik " throw new Error('Throw ERROR');"), exception_message) 198b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 199b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertHasNamedFrame('maybeRaiseException', 'error.js:7', 200b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik exception_message) 201b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertHasNamedFrame('global.maybeRaiseExceptionInFoo', 'foo.html:34', 202b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik exception_message) 203b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertHasFrame('error_stack_test.js:14', exception_message) 204b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertHasNamedFrame('eval', 'error_stack_test.html:22', 205b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik exception_message) 206b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 207b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testStackTraceOfErroWhenLoadingHTML(self): 208b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik file_path = self.GetTestFilePath('load_error.html') 209b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik with self.assertRaises(RuntimeError) as context: 210b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik d8_runner.ExecuteFile(file_path, source_paths=[self.test_data_dir]) 211b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 212b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # Assert error stack trace contain src files' info. 213b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik exception_message = context.exception.message 214b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 215b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertIn('Error: /does_not_exist.html not found', exception_message) 216b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertHasNamedFrame('eval', 'load_error_2.html:21', exception_message) 217b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertHasNamedFrame('eval', 'load_error.html:23', exception_message) 218b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 219b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testStackTraceOfErroWhenLoadingJS(self): 220b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik file_path = self.GetTestFilePath('load_js_error.html') 221b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik with self.assertRaises(RuntimeError) as context: 222b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik d8_runner.ExecuteFile(file_path, source_paths=[self.test_data_dir]) 223b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 224b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik # Assert error stack trace contain src files' info. 225b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik exception_message = context.exception.message 226b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 227b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertIn('Error: /does_not_exist.js not found', exception_message) 228b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertHasNamedFrame('eval', 'load_js_error_2.html:20', 229b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik exception_message) 230b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertHasNamedFrame('eval', 'load_js_error.html:22', 231b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik exception_message) 232b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 233b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testConsolePolyfill(self): 234b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertEquals( 235b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik d8_runner.ExcecuteJsString('console.log("hello", "world");'), 236b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'hello world\n') 237b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertEquals( 238b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik d8_runner.ExcecuteJsString('console.info("hello", "world");'), 239b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'Info: hello world\n') 240b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertEquals( 241b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik d8_runner.ExcecuteJsString('console.warn("hello", "world");'), 242b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'Warning: hello world\n') 243b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertEquals( 244b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik d8_runner.ExcecuteJsString('console.error("hello", "world");'), 245b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'Error: hello world\n') 246b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 247b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 248b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik@unittest.skipIf(sys.platform.startswith('win'), 249b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'd8 not yet supported on Windows.') 250b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikclass PathUtilUnittest(unittest.TestCase): 251b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testPathUtil(self): 252b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik path_util_js_test = os.path.abspath(os.path.join( 253b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik os.path.dirname(__file__), 'path_utils_test.js')) 254b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik test_loading_js = """ 255b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik load('%s'); 256b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik load('%s'); 257b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik runTests(); 258b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ % (d8_runner._PATH_UTILS_JS_DIR, path_util_js_test) 259b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 260b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik res = d8_runner.RunJsString(test_loading_js) 261b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.assertEquals(res.returncode, 0) 262b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 263b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 264b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef _GetLineNumberOfSubstring(content, substring): 265b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ Return the line number of |substring| in |content|.""" 266b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik index = content.index(substring) 267b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return content[:index].count('\n') + 1 268b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 269b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 270b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef _GenerateLineByLineDiff(actual, expected): 271b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik results = [] 272b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_lines = expected.split('\n') 273b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik actual_lines = actual.split('\n') 274b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik max_num_lines = max(len(expected_lines), len(actual_lines)) 275b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik results.append('**Actual : num lines = %i' % len(actual_lines)) 276b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik results.append('**Expected : num lines = %i' % len(expected_lines)) 277b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 278b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik for i in xrange(0, max_num_lines): 279b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_current_line = expected_lines[i] if i < len(expected_lines) else '' 280b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik actual_current_line = actual_lines[i] if i < len(actual_lines) else '' 281b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if actual_current_line == expected_current_line: 282b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik continue 283b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik results.append('================= Line %s ======================' % (i + 1)) 284b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik results.append('**Actual : %s' % repr(actual_current_line)) 285b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik results.append('**Expected : %s' % repr(expected_current_line)) 286b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return '\n'.join(results) 287b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 288b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 289b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik@unittest.skipIf(sys.platform.startswith('win'), 290b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'd8 not yet supported on Windows.') 291b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikclass HTMLGeneratorTest(unittest.TestCase): 292b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 293b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def AssertStringEquals(self, actual, expected): 294b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if actual != expected: 295b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik message = 'Expected %s but got %s.\n' % (repr(expected), repr(actual)) 296b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik message += _GenerateLineByLineDiff(actual, expected) 297b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.fail(message) 298b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 299b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def GetGeneratedJs(self, html_text): 300b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik tmp_dir = tempfile.mkdtemp() 301b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik try: 302b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik temp_file_name = os.path.join(tmp_dir, 'test.html') 303b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik with open(temp_file_name, 'w') as f: 304b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik f.write(html_text) 305b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return d8_runner.ExcecuteJsString( 306b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'write(generateJsFromHTML(read("%s")));' % temp_file_name) 307b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik finally: 308b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik shutil.rmtree(tmp_dir) 309b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 310b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testGenerateJsForD8RunnerSimpleHTMLImport(self): 311b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik html = '<link rel="import" href="/base/math.html">' 312b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_js = "loadHTML('/base/math.html');" 313b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertStringEquals(self.GetGeneratedJs(html), expected_js) 314b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 315b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testGenerateJSForD8RunnerImportMultilineHTMLImport(self): 316b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik html = """ 317b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik <link rel="import" 318b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik href="/base/math.html">""" 319b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_js = "\nloadHTML('/base/math.html');" 320b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertStringEquals(self.GetGeneratedJs(html), 321b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_js) 322b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 323b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testGenerateJsForD8RunnerImportSimpleScriptWithSrc(self): 324b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik html = '<script src="/base/math.js"></script>' 325b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_js = "loadScript('/base/math.js');" 326b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertStringEquals(self.GetGeneratedJs(html), 327b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_js) 328b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 329b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testGenerateJsForD8RunnerImportMultilineScriptWithSrc(self): 330b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik html = """<script 331b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik type="text/javascript" 332b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik src="/base/math.js"> 333b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik </script>""" 334b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_js = """loadScript('/base/math.js'); 335b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 336b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 337b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ 338b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertStringEquals(self.GetGeneratedJs(html), 339b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_js) 340b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 341b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testGenerateJsForD8RunnerWithMixedMultipleImport(self): 342b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik html = """ 343b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik<link rel="import" href="/base.html"><link rel="import" href="/base64.html"> 344b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik<link rel="import" 345b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik href="/base/math.html"><script 346b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik type="text/javascript" 347b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 348b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik src="/base/3d.js"> 349b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik </script> 350b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 351b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik<script src="/base/math.js"></script> 352b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 353b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik <link rel="import" 354b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik href="/base/random.html"> 355b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik""" 356b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_js = (""" 357b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikloadHTML('/base.html');loadHTML('/base64.html'); 358b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikloadHTML('/base/math.html'); 359b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikloadScript('/base/3d.js'); 360b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 361b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 362b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 363b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ + """ 364b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 365b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikloadScript('/base/math.js'); 366b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 367b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikloadHTML('/base/random.html');""") 368b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertStringEquals(self.GetGeneratedJs(html), 369b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_js) 370b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 371b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testGenerateJsForD8RunnerImportWithSimpleContent(self): 372b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik html = """<script> 373b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik var html_lines = [ 374b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik '<script>', 375b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik '< /script>', 376b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik ]; 377b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik </script> 378b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ 379b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_js = """ 380b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik var html_lines = [ 381b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik '<script>', 382b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik '< /script>', 383b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik ]; 384b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ 385b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertStringEquals(self.GetGeneratedJs(html), 386b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_js) 387b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 388b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testGenerateJsForD8RunnerImportWithEscapedScriptTag(self): 389b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik html = """<script> 390b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikvar s = ("<") + "<\/script>"; 391b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikvar x = 100; 392b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik </script> 393b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ 394b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_js = """ 395b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikvar s = ("<") + "<\/script>"; 396b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikvar x = 100; 397b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ 398b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertStringEquals(self.GetGeneratedJs(html), 399b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_js) 400b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 401b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testGenerateJsForD8RunnerImportWithSrcAndSimpleContent(self): 402b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik html = """<script 403b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik src="/base.js">var html_lines = [ 404b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik '<script>', 405b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik '< /script>', 406b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik ]; 407b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik </script> 408b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ 409b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_js = """loadScript('/base.js'); 410b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikvar html_lines = [ 411b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik '<script>', 412b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik '< /script>', 413b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik ]; 414b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ 415b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertStringEquals(self.GetGeneratedJs(html), 416b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_js) 417b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 418b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def testGenerateJsForD8RunnerImportComplex(self): 419b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik html = """<!DOCTYPE html> 420b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik<!-- 421b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikCopyright (c) 2014 The Chromium Authors. All rights reserved. 422b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikUse of this source code is governed by a BSD-style license that can be 423b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikfound in the LICENSE file. 424b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik--> 425b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik <link rel="import" href="/base/math.html"><script>var x = 1;</script> 426b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik <script src="/base/computer.js"> 427b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik var linux = os.system; // line number of this is 9 428b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik </script> 429b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik <link rel="import" href="/base/physics.html"> 430b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 431b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik <script> 432b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik var html_lines = [ 433b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik '<script>', 434b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik '< /script>', 435b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik ]; 436b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik function foo() { 437b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik var y = [ 438b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 1, 439b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 2, // line number of this is 21 440b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 3, 441b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 4 442b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik ]; 443b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik } 444b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik </script> 445b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 446b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik <link rel="import" href="/base/this_is_line_28.html"> 447b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik <script> 448b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik var i = '<link rel="import" href="/base/math.html">'; 449b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik </script> 450b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ 451b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik expected_js = """ 452b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 453b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 454b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 455b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 456b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 457b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikloadHTML('/base/math.html');var x = 1; 458b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikloadScript('/base/computer.js'); 459b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik var linux = os.system; // line number of this is 9 460b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ + """ 461b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikloadHTML('/base/physics.html'); 462b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 463b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 464b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik var html_lines = [ 465b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik '<script>', 466b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik '< /script>', 467b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik ]; 468b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik function foo() { 469b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik var y = [ 470b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 1, 471b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 2, // line number of this is 21 472b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 3, 473b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 4 474b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik ]; 475b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik } 476b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ + """ 477b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 478b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikloadHTML('/base/this_is_line_28.html'); 479b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 480b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik var i = '<link rel="import" href="/base/math.html">'; 481b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik """ 482b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 483b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik generated_js = self.GetGeneratedJs(html) 484b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertStringEquals( 485b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _GetLineNumberOfSubstring(generated_js, '// line number of this is 9'), 486b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 9) 487b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertStringEquals( 488b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _GetLineNumberOfSubstring(generated_js, '// line number of this is 21'), 489b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 21) 490b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertStringEquals( 491b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik _GetLineNumberOfSubstring(generated_js, 'this_is_line_28.html'), 492b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 28) 493b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.AssertStringEquals(generated_js, expected_js) 494