File: TestSessionSave.py

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (121 lines) | stat: -rw-r--r-- 4,167 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
"""
Test the session save feature
"""
import os
import tempfile

import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil


class SessionSaveTestCase(TestBase):
    def raw_transcript_builder(self, cmd, res):
        raw = "(lldb) " + cmd + "\n"
        if res.GetOutputSize():
            raw += res.GetOutput()
        if res.GetErrorSize():
            raw += res.GetError()
        return raw

    @skipIfWindows
    @no_debug_info_test
    def test_session_save(self):
        raw = ""
        interpreter = self.dbg.GetCommandInterpreter()

        settings = [
            "settings set interpreter.echo-commands true",
            "settings set interpreter.echo-comment-commands true",
            "settings set interpreter.stop-command-source-on-error false",
            "settings set interpreter.open-transcript-in-editor false",
        ]

        for setting in settings:
            interpreter.HandleCommand(setting, lldb.SBCommandReturnObject())

        inputs = [
            "# This is a comment",  # Comment
            "help session",  # Valid command
            "Lorem ipsum",  # Invalid command
        ]

        for cmd in inputs:
            res = lldb.SBCommandReturnObject()
            interpreter.HandleCommand(cmd, res)
            raw += self.raw_transcript_builder(cmd, res)

        self.assertTrue(interpreter.HasCommands())
        self.assertTrue(len(raw) != 0)

        # Check for error
        cmd = "session save /root/file"
        interpreter.HandleCommand(cmd, res)
        self.assertFalse(res.Succeeded())
        raw += self.raw_transcript_builder(cmd, res)

        tf = tempfile.NamedTemporaryFile()
        output_file = tf.name

        res = lldb.SBCommandReturnObject()
        interpreter.HandleCommand("session save " + output_file, res)
        self.assertTrue(res.Succeeded())
        raw += self.raw_transcript_builder(cmd, res)

        with open(output_file, "r") as file:
            content = file.read()
            # Exclude last line, since session won't record it's own output
            lines = raw.splitlines()[:-1]
            for line in lines:
                self.assertIn(line, content)

        td = tempfile.TemporaryDirectory()
        res = lldb.SBCommandReturnObject()
        interpreter.HandleCommand(
            "settings set interpreter.save-session-directory " + td.name, res
        )
        self.assertTrue(res.Succeeded())

        res = lldb.SBCommandReturnObject()
        interpreter.HandleCommand("session save", res)
        self.assertTrue(res.Succeeded())
        raw += self.raw_transcript_builder(cmd, res)

        with open(os.path.join(td.name, os.listdir(td.name)[0]), "r") as file:
            content = file.read()
            # Exclude last line, since session won't record it's own output
            lines = raw.splitlines()[:-1]
            for line in lines:
                self.assertIn(line, content)

    @skipIfWindows
    @no_debug_info_test
    def test_session_save_on_quit(self):
        raw = ""
        interpreter = self.dbg.GetCommandInterpreter()

        td = tempfile.TemporaryDirectory()

        settings = [
            "settings set interpreter.echo-commands true",
            "settings set interpreter.echo-comment-commands true",
            "settings set interpreter.stop-command-source-on-error false",
            "settings set interpreter.save-session-on-quit true",
            "settings set interpreter.save-session-directory " + td.name,
            "settings set interpreter.open-transcript-in-editor false",
        ]

        for setting in settings:
            res = lldb.SBCommandReturnObject()
            interpreter.HandleCommand(setting, res)
            raw += self.raw_transcript_builder(setting, res)

        self.dbg.Destroy(self.dbg)

        with open(os.path.join(td.name, os.listdir(td.name)[0]), "r") as file:
            content = file.read()
            # Exclude last line, since session won't record it's own output
            lines = raw.splitlines()[:-1]
            for line in lines:
                self.assertIn(line, content)