Modified: trunk/Tools/ChangeLog (118243 => 118244)
--- trunk/Tools/ChangeLog 2012-05-23 21:13:28 UTC (rev 118243)
+++ trunk/Tools/ChangeLog 2012-05-23 21:13:51 UTC (rev 118244)
@@ -1,3 +1,23 @@
+2012-05-23 Xianzhu Wang <[email protected]>
+
+ [Chromium-Android] Fix chromium_android_unittest
+ https://bugs.webkit.org/show_bug.cgi?id=87196
+
+ Reviewed by Tony Chang.
+
+ Update unit tests after ChromiumAndroidPort supported apk based
+ DumpRenderTree.
+
+ * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
+ (ChromiumAndroidPortTest):
+ (ChromiumAndroidPortTest.mock_run_command_fn): Moved out from test_get_last_stacktrace so that other tests can use it as a common command line handler.
+ (ChromiumAndroidPortTest.test_get_last_stacktrace):
+ (ChromiumAndroidPortTest.test_get_crash_log): Added to test our overridden _get_crash_log()
+ (ChromiumAndroidDriverTest):
+ (ChromiumAndroidDriverTest.setUp):
+ (ChromiumAndroidDriverTest.test_cmd_line): Added to test our overridden cmd_line()
+ (ChromiumAndroidDriverTest.test_write_command_and_read_line): Added test of unexpected EOF (indicating crash on Android)
+
2012-05-23 Caio Marcelo de Oliveira Filho <[email protected]>
[watchlist] Add myself and create a watch rule to catch Attribute related patches
Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py (118243 => 118244)
--- trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py 2012-05-23 21:13:28 UTC (rev 118243)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py 2012-05-23 21:13:51 UTC (rev 118244)
@@ -39,64 +39,94 @@
from webkitpy.layout_tests.port import Port
-# FIXME: Temporarily disabled. https://bugs.webkit.org/show_bug.cgi?id=87196
-
-class ChromiumAndroidPortTest: # (port_testcase.PortTestCase):
+class ChromiumAndroidPortTest(port_testcase.PortTestCase):
port_name = 'chromium-android'
port_maker = chromium_android.ChromiumAndroidPort
+ mock_logcat = ''
def test_attributes(self):
port = self.make_port()
self.assertTrue(port.get_option('enable_hardware_gpu'))
self.assertEquals(port.baseline_path(), port._webkit_baseline_path('chromium-android'))
+ @staticmethod
+ def mock_run_command_fn(args):
+ if args[1] == 'shell':
+ if args[2:] == ['ls', '-n', '/data/tombstones']:
+ # For 'adb shell ls -n /data/tombstones'
+ return ('-rw------- 1000 1000 218643 2012-04-26 18:15 tombstone_00\n'
+ '-rw------- 1000 1000 241695 2012-04-26 18:15 tombstone_01\n'
+ '-rw------- 1000 1000 219472 2012-04-26 18:16 tombstone_02\n'
+ '-rw------- 1000 1000 45316 2012-04-27 16:33 tombstone_03\n'
+ '-rw------- 1000 1000 82022 2012-04-23 16:57 tombstone_04\n'
+ '-rw------- 1000 1000 82015 2012-04-23 16:57 tombstone_05\n'
+ '-rw------- 1000 1000 81974 2012-04-23 16:58 tombstone_06\n'
+ '-rw------- 1000 1000 237409 2012-04-26 17:41 tombstone_07\n'
+ '-rw------- 1000 1000 276089 2012-04-26 18:15 tombstone_08\n'
+ '-rw------- 1000 1000 219618 2012-04-26 18:15 tombstone_09\n')
+ elif args[2] == 'cat':
+ return args[3] + '\nmock_contents\n'
+ elif args[1] == 'logcat':
+ return ChromiumAndroidPortTest.mock_logcat
+ else:
+ return ''
+
def test_get_last_stacktrace(self):
port = self.make_port()
def mock_run_command_no_dir(args):
return '/data/tombstones: No such file or directory'
port._executive = MockExecutive2(run_command_fn=mock_run_command_no_dir)
- self.assertEquals(port.get_last_stacktrace(), '')
+ self.assertEquals(port._get_last_stacktrace(), '')
def mock_run_command_no_file(args):
return ''
port._executive = MockExecutive2(run_command_fn=mock_run_command_no_file)
- self.assertEquals(port.get_last_stacktrace(), '')
+ self.assertEquals(port._get_last_stacktrace(), '')
- def mock_run_command_non_empty(args):
- if args[2] == 'ls':
- # For 'adb shell ls -n /data/tombstones'
- return '''-rw------- 1000 1000 218643 2012-04-26 18:15 tombstone_00
--rw------- 1000 1000 241695 2012-04-26 18:15 tombstone_01
--rw------- 1000 1000 219472 2012-04-26 18:16 tombstone_02
--rw------- 1000 1000 45316 2012-04-27 16:33 tombstone_03
--rw------- 1000 1000 82022 2012-04-23 16:57 tombstone_04
--rw------- 1000 1000 82015 2012-04-23 16:57 tombstone_05
--rw------- 1000 1000 81974 2012-04-23 16:58 tombstone_06
--rw------- 1000 1000 237409 2012-04-26 17:41 tombstone_07
--rw------- 1000 1000 276089 2012-04-26 18:15 tombstone_08
--rw------- 1000 1000 219618 2012-04-26 18:15 tombstone_09
-'''
- else:
- # For 'adb shell cat {tombstone}'
- return args[3]
- port._executive = MockExecutive2(run_command_fn=mock_run_command_non_empty)
- self.assertEquals(port.get_last_stacktrace(), '/data/tombstones/tombstone_03')
+ port._executive = MockExecutive2(run_command_fn=ChromiumAndroidPortTest.mock_run_command_fn)
+ self.assertEquals(port._get_last_stacktrace(),
+ '-rw------- 1000 1000 45316 2012-04-27 16:33 tombstone_03\n'
+ '/data/tombstones/tombstone_03\nmock_contents\n')
+ def test_get_crash_log(self):
+ port = self.make_port()
+ port._executive = MockExecutive2(run_command_fn=ChromiumAndroidPortTest.mock_run_command_fn)
+ ChromiumAndroidPortTest.mock_logcat = 'logcat contents\n'
+ self.assertEquals(port._get_crash_log('foo', 1234, 'out bar\nout baz\n', 'err bar\nerr baz\n', newer_than=None),
+ (u'crash log for foo (pid 1234):\n'
+ u'STDOUT: out bar\n'
+ u'STDOUT: out baz\n'
+ u'STDOUT: ********* Logcat:\n'
+ u'STDOUT: logcat contents\n'
+ u'STDERR: err bar\n'
+ u'STDERR: err baz\n'
+ u'STDERR: ********* Tombstone file:\n'
+ u'STDERR: -rw------- 1000 1000 45316 2012-04-27 16:33 tombstone_03\n'
+ u'STDERR: /data/tombstones/tombstone_03\n'
+ u'STDERR: mock_contents\n'))
+ self.assertEquals(port._get_crash_log(None, None, None, None, newer_than=None),
+ (u'crash log for <unknown process name> (pid <unknown>):\n'
+ u'STDOUT: ********* Logcat:\n'
+ u'STDOUT: logcat contents\n'
+ u'STDERR: ********* Tombstone file:\n'
+ u'STDERR: -rw------- 1000 1000 45316 2012-04-27 16:33 tombstone_03\n'
+ u'STDERR: /data/tombstones/tombstone_03\n'
+ u'STDERR: mock_contents\n'))
-class ChromiumAndroidDriverTest: # (unittest.TestCase):
+
+class ChromiumAndroidDriverTest(unittest.TestCase):
def setUp(self):
- mock_port = Port(MockSystemHost())
+ mock_port = chromium_android.ChromiumAndroidPort(MockSystemHost(), 'chromium-android')
self.driver = chromium_android.ChromiumAndroidDriver(mock_port, worker_number=0, pixel_tests=True)
- def test_get_drt_return_value(self):
- self.assertEquals(self.driver._get_drt_return_value('#DRT_RETURN 0'), 0)
- self.assertEquals(self.driver._get_drt_return_value(''), None)
+ def test_cmd_line(self):
+ cmd_line = self.driver.cmd_line(True, ['--a'])
+ self.assertTrue('--a' in cmd_line)
+ self.assertTrue('--in-fifo=' + chromium_android.DRT_APP_FILE_DIR + 'DumpRenderTree.in' in cmd_line)
+ self.assertTrue('--out-fifo=' + chromium_android.DRT_APP_FILE_DIR + 'DumpRenderTree.out' in cmd_line)
+ self.assertTrue('--err-file=' + chromium_android.DRT_APP_FILE_DIR + 'DumpRenderTree.err' in cmd_line)
- def test_has_crash_hint(self):
- self.assertTrue(self.driver._has_crash_hint('[1] + Stopped (signal)'))
- self.assertFalse(self.driver._has_crash_hint(''))
-
def test_read_prompt(self):
self.driver._proc = Mock() # FIXME: This should use a tighter mock.
self.driver._proc.stdout = StringIO.StringIO("root@android:/ # ")
@@ -113,10 +143,12 @@
def test_write_command_and_read_line(self):
self.driver._proc = Mock() # FIXME: This should use a tighter mock.
- self.driver._proc.stdout = StringIO.StringIO("#URL:file:///data/local/tmp/third_party/WebKit/LayoutTests/test.html\noutput\n[1] + Stopped (signal)\n")
+ self.driver._proc.stdout = StringIO.StringIO("#URL:file:///data/local/tmp/third_party/WebKit/LayoutTests/test.html\noutput\n\n")
self.assertEquals(self.driver._write_command_and_read_line(), ('#URL:file:///mock-checkout/LayoutTests/test.html\n', False))
self.assertEquals(self.driver._write_command_and_read_line(), ('output\n', False))
- self.assertEquals(self.driver._write_command_and_read_line(), ('[1] + Stopped (signal)\n', True))
+ self.assertEquals(self.driver._write_command_and_read_line(), ('\n', False))
+ # Unexpected EOF is treated as crash.
+ self.assertEquals(self.driver._write_command_and_read_line(), ('', True))
if __name__ == '__main__':