Title: [116526] trunk/Tools
Revision
116526
Author
[email protected]
Date
2012-05-09 08:28:01 -0700 (Wed, 09 May 2012)

Log Message

[Chromium-android] Add unit test for Android layout test script (chromium_android.py)
https://bugs.webkit.org/show_bug.cgi?id=80852

Patch by Hao Zheng <[email protected]> on 2012-05-09
Reviewed by Adam Barth.

Add some tests to ensure that chromium android port works to some
extent. Some methods is hard to test, as they rely on the actual
behavior on device, e.g. pushing files to device.

* Scripts/webkitpy/layout_tests/port/chromium_android.py:
(ChromiumAndroidPort.get_last_stacktrace): Check if dir exists.
* Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
(ChromiumAndroidPortTest):
(ChromiumAndroidPortTest.test_attributes):
(ChromiumAndroidPortTest.test_get_last_stacktrace):
(ChromiumAndroidPortTest.test_get_last_stacktrace.mock_run_command_no_dir):
(ChromiumAndroidPortTest.test_get_last_stacktrace.mock_run_command_no_file):
(ChromiumAndroidPortTest.test_get_last_stacktrace.mock_run_command_non_empty):
(ChromiumAndroidDriverTest):
(ChromiumAndroidDriverTest.setUp):
(ChromiumAndroidDriverTest.test_get_drt_return_value):
(ChromiumAndroidDriverTest.test_has_crash_hint):
(ChromiumAndroidDriverTest.test_read_prompt):
(ChromiumAndroidDriverTest.test_test_shell_command):
(ChromiumAndroidDriverTest.test_write_command_and_read_line):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (116525 => 116526)


--- trunk/Tools/ChangeLog	2012-05-09 15:23:20 UTC (rev 116525)
+++ trunk/Tools/ChangeLog	2012-05-09 15:28:01 UTC (rev 116526)
@@ -1,3 +1,31 @@
+2012-05-09  Hao Zheng  <[email protected]>
+
+        [Chromium-android] Add unit test for Android layout test script (chromium_android.py)
+        https://bugs.webkit.org/show_bug.cgi?id=80852
+
+        Reviewed by Adam Barth.
+
+        Add some tests to ensure that chromium android port works to some
+        extent. Some methods is hard to test, as they rely on the actual
+        behavior on device, e.g. pushing files to device.
+
+        * Scripts/webkitpy/layout_tests/port/chromium_android.py:
+        (ChromiumAndroidPort.get_last_stacktrace): Check if dir exists.
+        * Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py:
+        (ChromiumAndroidPortTest):
+        (ChromiumAndroidPortTest.test_attributes):
+        (ChromiumAndroidPortTest.test_get_last_stacktrace):
+        (ChromiumAndroidPortTest.test_get_last_stacktrace.mock_run_command_no_dir):
+        (ChromiumAndroidPortTest.test_get_last_stacktrace.mock_run_command_no_file):
+        (ChromiumAndroidPortTest.test_get_last_stacktrace.mock_run_command_non_empty):
+        (ChromiumAndroidDriverTest):
+        (ChromiumAndroidDriverTest.setUp):
+        (ChromiumAndroidDriverTest.test_get_drt_return_value):
+        (ChromiumAndroidDriverTest.test_has_crash_hint):
+        (ChromiumAndroidDriverTest.test_read_prompt):
+        (ChromiumAndroidDriverTest.test_test_shell_command):
+        (ChromiumAndroidDriverTest.test_write_command_and_read_line):
+
 2012-05-09  Allan Sandfeld Jensen  <[email protected]>
 
         [Qt] ORWT fails with Qt 5 and WK2.

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py (116525 => 116526)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py	2012-05-09 15:23:20 UTC (rev 116525)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_android.py	2012-05-09 15:28:01 UTC (rev 116526)
@@ -357,7 +357,7 @@
 
     def get_last_stacktrace(self):
         tombstones = self._run_adb_command(['shell', 'ls', '-n', '/data/tombstones'])
-        if not tombstones:
+        if not tombstones or tombstones.startswith('/data/tombstones: No such file or directory'):
             _log.error('DRT crashed, but no tombstone found!')
             return ''
         tombstones = tombstones.rstrip().split('\n')

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py (116525 => 116526)


--- trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py	2012-05-09 15:23:20 UTC (rev 116525)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/port/chromium_android_unittest.py	2012-05-09 15:28:01 UTC (rev 116526)
@@ -26,15 +26,96 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+import StringIO
 import unittest
 
 from webkitpy.common.system import executive_mock
+from webkitpy.common.system.executive_mock import MockExecutive2
 from webkitpy.common.system.systemhost_mock import MockSystemHost
+from webkitpy.thirdparty.mock import Mock
 
 from webkitpy.layout_tests.port import chromium_android
 from webkitpy.layout_tests.port import port_testcase
+from webkitpy.layout_tests.port import Port
 
 
 class ChromiumAndroidPortTest(port_testcase.PortTestCase):
     port_name = 'chromium-android'
     port_maker = chromium_android.ChromiumAndroidPort
+
+    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'))
+
+    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(), '')
+
+        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(), '')
+
+        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')
+
+
+class ChromiumAndroidDriverTest(unittest.TestCase):
+    def setUp(self):
+        mock_port = Port(MockSystemHost())
+        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_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:/ # ")
+        self.assertEquals(self.driver._read_prompt(), None)
+        self.driver._proc.stdout = StringIO.StringIO("$ ")
+        self.assertRaises(AssertionError, self.driver._read_prompt)
+
+    def test_test_shell_command(self):
+        uri = 'file://%s/test.html' % self.driver._port.layout_tests_dir()
+        self.assertEquals(uri, 'file:///mock-checkout/LayoutTests/test.html')
+        expected_command = 'file:///data/local/tmp/third_party/WebKit/LayoutTests/test.html 2 checksum\n'
+        self.assertEquals(self.driver._test_shell_command(uri, 2, 'checksum'), expected_command)
+        self.assertEquals(self.driver._test_shell_command('http://test.html', 2, 'checksum'), 'http://test.html 2 checksum\n')
+
+    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.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))
+
+
+if __name__ == '__main__':
+    unittest.main()
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to