[lldb/test] Use @skipIfWindows for PExpectTest
authorJordan Rupprecht <rupprecht@google.com>
Fri, 28 Aug 2020 18:41:07 +0000 (11:41 -0700)
committerJordan Rupprecht <rupprecht@google.com>
Fri, 28 Aug 2020 18:41:07 +0000 (11:41 -0700)
Annotating `PExpectTest` with `@skipIfWindows` instead of marking it as an empty class will make the test runner recognize it as a test class, which should allow me to reland adb5c23f8c0d60eeec41dcbe21d1b26184e1c97d.

I don't have a windows machine to verify this works, but I did some tests using `@skipIfLinux` and they all worked as expected. In case the `pexpect` import is not at all available on windows, I moved it to within the method where it's used.

Reviewed By: labath

Differential Revision: https://reviews.llvm.org/D86745

lldb/packages/Python/lldbsuite/test/lldbpexpect.py

index 67de73b..12ac4d3 100644 (file)
@@ -13,65 +13,60 @@ from .lldbtest import *
 from . import lldbutil
 from lldbsuite.test.decorators import *
 
-if sys.platform.startswith('win32'):
-    # llvm.org/pr22274: need a pexpect replacement for windows
-    class PExpectTest(object):
-        pass
-else:
-    import pexpect
+@skipIfRemote
+@skipIfWindows  # llvm.org/pr22274: need a pexpect replacement for windows
+class PExpectTest(TestBase):
 
-    @skipIfRemote
-    class PExpectTest(TestBase):
+    NO_DEBUG_INFO_TESTCASE = True
+    PROMPT = "(lldb) "
 
-        NO_DEBUG_INFO_TESTCASE = True
-        PROMPT = "(lldb) "
+    def expect_prompt(self):
+        self.child.expect_exact(self.PROMPT)
 
-        def expect_prompt(self):
-            self.child.expect_exact(self.PROMPT)
+    def launch(self, executable=None, extra_args=None, timeout=30, dimensions=None):
+        logfile = getattr(sys.stdout, 'buffer',
+                            sys.stdout) if self.TraceOn() else None
 
-        def launch(self, executable=None, extra_args=None, timeout=30, dimensions=None):
-            logfile = getattr(sys.stdout, 'buffer',
-                              sys.stdout) if self.TraceOn() else None
+        args = ['--no-lldbinit', '--no-use-colors']
+        for cmd in self.setUpCommands():
+            args += ['-O', cmd]
+        if executable is not None:
+            args += ['--file', executable]
+        if extra_args is not None:
+            args.extend(extra_args)
 
-            args = ['--no-lldbinit', '--no-use-colors']
-            for cmd in self.setUpCommands():
-                args += ['-O', cmd]
-            if executable is not None:
-                args += ['--file', executable]
-            if extra_args is not None:
-                args.extend(extra_args)
+        env = dict(os.environ)
+        env["TERM"]="vt100"
 
-            env = dict(os.environ)
-            env["TERM"]="vt100"
-
-            self.child = pexpect.spawn(
-                    lldbtest_config.lldbExec, args=args, logfile=logfile,
-                    timeout=timeout, dimensions=dimensions, env=env)
+        import pexpect
+        self.child = pexpect.spawn(
+                lldbtest_config.lldbExec, args=args, logfile=logfile,
+                timeout=timeout, dimensions=dimensions, env=env)
+        self.expect_prompt()
+        for cmd in self.setUpCommands():
+            self.child.expect_exact(cmd)
             self.expect_prompt()
-            for cmd in self.setUpCommands():
-                self.child.expect_exact(cmd)
-                self.expect_prompt()
-            if executable is not None:
-                self.child.expect_exact("target create")
-                self.child.expect_exact("Current executable set to")
-                self.expect_prompt()
-
-        def expect(self, cmd, substrs=None):
-            self.assertNotIn('\n', cmd)
-            self.child.sendline(cmd)
-            if substrs is not None:
-                for s in substrs:
-                    self.child.expect_exact(s)
+        if executable is not None:
+            self.child.expect_exact("target create")
+            self.child.expect_exact("Current executable set to")
             self.expect_prompt()
 
-        def quit(self, gracefully=True):
-            self.child.sendeof()
-            self.child.close(force=not gracefully)
-            self.child = None
+    def expect(self, cmd, substrs=None):
+        self.assertNotIn('\n', cmd)
+        self.child.sendline(cmd)
+        if substrs is not None:
+            for s in substrs:
+                self.child.expect_exact(s)
+        self.expect_prompt()
+
+    def quit(self, gracefully=True):
+        self.child.sendeof()
+        self.child.close(force=not gracefully)
+        self.child = None
 
-        def cursor_forward_escape_seq(self, chars_to_move):
-            """
-            Returns the escape sequence to move the cursor forward/right
-            by a certain amount of characters.
-            """
-            return b"\x1b\[" + str(chars_to_move).encode("utf-8") + b"C"
+    def cursor_forward_escape_seq(self, chars_to_move):
+        """
+        Returns the escape sequence to move the cursor forward/right
+        by a certain amount of characters.
+        """
+        return b"\x1b\[" + str(chars_to_move).encode("utf-8") + b"C"