1c48dc6fc780a31c1c431835e3b74a5474caede81Johnny Chen"""
2c48dc6fc780a31c1c431835e3b74a5474caede81Johnny ChenTest that lldb command "command source" works correctly.
3eefdff0b16eb15f1f03c0a98c92f375e92ae5ac2Johnny Chen
4eefdff0b16eb15f1f03c0a98c92f375e92ae5ac2Johnny ChenSee also http://llvm.org/viewvc/llvm-project?view=rev&revision=109673.
5c48dc6fc780a31c1c431835e3b74a5474caede81Johnny Chen"""
6c48dc6fc780a31c1c431835e3b74a5474caede81Johnny Chen
73f5e90a19881884408003ed01b04b4a29b3bd2fdJohnny Chenimport os, sys
875e28f942c1b9f9c6d5a0d5f2efd037cbbc9fc74Johnny Chenimport unittest2
9c48dc6fc780a31c1c431835e3b74a5474caede81Johnny Chenimport lldb
10d85dae5a089177582aff128c897c78332167fe08Johnny Chenfrom lldbtest import *
11c48dc6fc780a31c1c431835e3b74a5474caede81Johnny Chen
121c42e8684d26e1473f92c799eeae65a3eec991d6Johnny Chenclass CommandSourceTestCase(TestBase):
13c48dc6fc780a31c1c431835e3b74a5474caede81Johnny Chen
143f8dff9568c93f873b95673f2a648434701f85faJohnny Chen    mydir = os.path.join("functionalities", "command_source")
15c48dc6fc780a31c1c431835e3b74a5474caede81Johnny Chen
16c48dc6fc780a31c1c431835e3b74a5474caede81Johnny Chen    def test_command_source(self):
17c48dc6fc780a31c1c431835e3b74a5474caede81Johnny Chen        """Test that lldb command "command source" works correctly."""
18c48dc6fc780a31c1c431835e3b74a5474caede81Johnny Chen
19c48dc6fc780a31c1c431835e3b74a5474caede81Johnny Chen        # Sourcing .lldb in the current working directory, which in turn imports
20c48dc6fc780a31c1c431835e3b74a5474caede81Johnny Chen        # the "my" package that defines the date() function.
2184e8179c4d8c5ce9aa3dbdd875f09d06517e7366Johnny Chen        self.runCmd("command source .lldb")
22c48dc6fc780a31c1c431835e3b74a5474caede81Johnny Chen
2330e40931d2f7177be7d233cd06ed190bda889935Johnny Chen        # Let's temporarily redirect the stdout to our StringIO session object
2430e40931d2f7177be7d233cd06ed190bda889935Johnny Chen        # in order to capture the script evaluation output.
2530e40931d2f7177be7d233cd06ed190bda889935Johnny Chen        old_stdout = sys.stdout
2630e40931d2f7177be7d233cd06ed190bda889935Johnny Chen        session = StringIO.StringIO()
2730e40931d2f7177be7d233cd06ed190bda889935Johnny Chen        sys.stdout = session
2830e40931d2f7177be7d233cd06ed190bda889935Johnny Chen
29eefdff0b16eb15f1f03c0a98c92f375e92ae5ac2Johnny Chen        # Python should evaluate "my.date()" successfully.
30281aed3744d26477929ec0c0108b8ab3a910aec4Johnny Chen        # Pass 'check=False' so that sys.stdout gets restored unconditionally.
31281aed3744d26477929ec0c0108b8ab3a910aec4Johnny Chen        self.runCmd("script my.date()", check=False)
32c48dc6fc780a31c1c431835e3b74a5474caede81Johnny Chen
331ae2c3663ad8152c3d2d72c2146f8c41e7147845Johnny Chen        # Now restore stdout to the way we were. :-)
341ae2c3663ad8152c3d2d72c2146f8c41e7147845Johnny Chen        sys.stdout = old_stdout
351ae2c3663ad8152c3d2d72c2146f8c41e7147845Johnny Chen
3630e40931d2f7177be7d233cd06ed190bda889935Johnny Chen        import datetime
3730e40931d2f7177be7d233cd06ed190bda889935Johnny Chen        self.expect(session.getvalue(), "script my.date() runs successfully",
3830e40931d2f7177be7d233cd06ed190bda889935Johnny Chen                    exe=False,
3930e40931d2f7177be7d233cd06ed190bda889935Johnny Chen            substrs = [str(datetime.date.today())])
4030e40931d2f7177be7d233cd06ed190bda889935Johnny Chen
41c48dc6fc780a31c1c431835e3b74a5474caede81Johnny Chen
42c48dc6fc780a31c1c431835e3b74a5474caede81Johnny Chenif __name__ == '__main__':
4388f8304a5b7864ce3c6966bc0250fa3b7069aef0Johnny Chen    import atexit
44c48dc6fc780a31c1c431835e3b74a5474caede81Johnny Chen    lldb.SBDebugger.Initialize()
4588f8304a5b7864ce3c6966bc0250fa3b7069aef0Johnny Chen    atexit.register(lambda: lldb.SBDebugger.Terminate())
4675e28f942c1b9f9c6d5a0d5f2efd037cbbc9fc74Johnny Chen    unittest2.main()
47