tests/python/vdbtests.py
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 08 Jul 2019 13:31:11 +0100
changeset 178 5d1c3e5fab6b
parent 177 fd154978bab5
permissions -rw-r--r--
Initial support for VDB python-based variable objects Due to a limitation of GDB itself, one cannot create variable object for "synthetic" argument/local created by custom frame decorator. Therefore one cannot "dig deeper" and inspect contents of such a variable in case it is a kind of composite - like an object on a heap referring to another objects. This is a problem when a debugee is does not have debug information and / or it's language is not C - such as when debugging JITed code. This (experimental) commit adds a parallel implementation of variable objects done completely in python. This new varobj MI interface is a super-set of GDB's builtin varobj MI interface.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
177
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
#
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
# jv:vdb - Visual / VM Debugger
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
# Copyright (C) 2015-now Jan Vrany
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
#
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
# This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
#
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
# You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
#
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
"""
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
This script contains tests Pythin vdb support.
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
To run all tests
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
    gdb -q --ex "source vdbtests.py" -ex 'py run()' -ex "quit"
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
To run single test, for example, _instanceTests.test_context_03():
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
    gdb -q --ex "source vdbtests.py" -ex 'py run(parse_and_eval_test("test_01"))' -ex "quit"
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
"""
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
import os
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
import sys
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
import unittest
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
vdb_tests_python_dir = os.path.dirname(__file__)
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
vdb_python_dir = os.path.join(vdb_tests_python_dir, '..' , '..' , 'python')
178
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    28
libgdbs_tests_dir = os.path.join(vdb_python_dir, '..', '..' , 'libgdbs' , 'tests')
177
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
sys.path.append(vdb_python_dir)
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
import gdb
fd154978bab5 Load Python support code upon startup.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
import vdb
178
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    34
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    35
class parse_and_eval_test(unittest.TestCase):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    36
    def setUp(self):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    37
        test_prog_dir = os.path.join(libgdbs_tests_dir, 'c', 'x86_64-pc-linux-gnu')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    38
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    39
        gdb.execute('set startup-with-shell off')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    40
        gdb.execute('set auto-load safe-path /')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    41
        gdb.execute('set python print-stack full')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    42
        gdb.execute('set breakpoint pending on')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    43
        gdb.execute('set confirm off')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    44
        gdb.execute('set pagination off')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    45
        gdb.execute('file "%s"' % os.path.join(test_prog_dir, 'py-varobj'))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    46
        gdb.execute('source %s' % os.path.join(test_prog_dir, '..', 'py-varobj.py'))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    47
        gdb.execute('source %s' % os.path.join(test_prog_dir, '..', 'py-framedecorator.py'))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    48
        gdb.execute('b py-varobj.c : 22')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    49
        gdb.execute('r')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    50
        gdb.execute('frame 0')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    51
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    52
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    53
    def tearDown(self):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    54
        vdb.unregister_evaluators()
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    55
        gdb.execute("del")
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    56
        try:
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    57
            gdb.execute('kill')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    58
        except:
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    59
            pass
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    60
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    61
    def test_01a(self):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    62
        self.assertRaises(vdb.Error, vdb.parse_and_eval, 'foo')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    63
        self.assertEqual(gdb.Value(1), vdb.parse_and_eval('1'))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    64
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    65
    def test_01b(self):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    66
        v = vdb.parse_and_eval('&c1')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    67
        self.assertEqual('struct _cons *', str(v.type))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    68
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    69
    def test_01c(self):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    70
        v = vdb.parse_and_eval('&c1')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    71
        self.assertEqual('struct _cons *', str(v.type))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    72
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    73
    def test_02a(self):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    74
        self.assertEqual(gdb.Value(12), vdb.parse_and_eval('syntheticLocal0'))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    75
        self.assertEqual(gdb.Value(42), vdb.parse_and_eval('syntheticLocal2'))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    76
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    77
    def test_03(self):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    78
        def parse_and_eval(expr):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    79
            if expr == 'a':
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    80
                return gdb.Value(1)
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    81
            elif expr == 'b':
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    82
                return None
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    83
            elif expr == 'c':
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    84
                raise Exception("Bad")
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    85
        vdb.register_evaluator(parse_and_eval)
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    86
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    87
        self.assertEqual(gdb.Value(1), vdb.parse_and_eval('a'))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    88
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    89
        self.assertRaises(vdb.Error, vdb.parse_and_eval, 'b')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    90
        self.assertRaises(Exception, vdb.parse_and_eval, 'c')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    91
        self.assertRaises(vdb.Error, vdb.parse_and_eval, 'd')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    92
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    93
        vdb.unregister_evaluator(parse_and_eval)
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    94
        self.assertRaises(vdb.Error, vdb.parse_and_eval, 'a')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    95
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    96
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    97
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    98
class VarObj_test(unittest.TestCase):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
    99
    def setUp(self):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   100
        test_prog_dir = os.path.join(libgdbs_tests_dir, 'c', 'x86_64-pc-linux-gnu')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   101
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   102
        gdb.execute('set startup-with-shell off')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   103
        gdb.execute('set auto-load safe-path /')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   104
        gdb.execute('set python print-stack full')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   105
        gdb.execute('set breakpoint pending on')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   106
        gdb.execute('set confirm off')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   107
        gdb.execute('set pagination off')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   108
        gdb.execute('file "%s"' % os.path.join(test_prog_dir, 'py-varobj'))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   109
        gdb.execute('source %s' % os.path.join(test_prog_dir, '..', 'py-varobj.py'))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   110
        gdb.execute('source %s' % os.path.join(test_prog_dir, '..', 'py-framedecorator.py'))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   111
        gdb.execute('b py-varobj.c : 22')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   112
        gdb.execute('r')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   113
        gdb.execute('frame 0')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   114
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   115
    def tearDown(self):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   116
        vdb.unregister_evaluators()
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   117
        gdb.execute("del")
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   118
        try:
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   119
            gdb.execute('kill')
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   120
        except:
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   121
            pass
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   122
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   123
    def test_01(self):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   124
        varobj = vdb._VarObj('test_01', '1', gdb.Value(1))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   125
        self.assertEqual({  'name'      : 'test_01' ,
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   126
                            'numchild'  : 0,
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   127
                            'exp'       : '1',
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   128
                            'value'     : '1',
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   129
                            'type'      : 'long long',
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   130
                            'has_more'  : 0,
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   131
                            'dynamic'   : 1,
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   132
                            'frozen'    : 0
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   133
                            },
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   134
                         varobj.to_mi())
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   135
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   136
    def test_02(self):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   137
        varobj = vdb._VarObj('test_02', '&c1', gdb.parse_and_eval('&c1'))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   138
        self.assertEqual({  'name'      : 'test_02' ,
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   139
                            'numchild'  : 0,
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   140
                            'exp'       : '&c1',
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   141
                            'value'     : '(...)',
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   142
                            'type'      : 'struct _cons *',
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   143
                            'has_more'  : 1,
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   144
                            'dynamic'   : 1,
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   145
                            'frozen'    : 0
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   146
                            },
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   147
                         varobj.to_mi())
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   148
        children = list(varobj.children())
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   149
        self.assertEqual(2, len(children))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   150
        self.assertEqual('car', children[0].exp)
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   151
        self.assertEqual('cdr', children[1].exp)
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   152
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   153
        self.assertEqual('test_02.car', children[0].name)
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   154
        self.assertEqual('test_02.cdr', children[1].name)
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   155
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   156
        self.assertEqual(varobj, children[0].parent)
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   157
        self.assertEqual(varobj, children[1].parent)
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   158
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   159
        children2 = list(varobj.children())
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   160
        self.assertEqual(children[0], children2[0])
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   161
        self.assertEqual(children[1], children2[1])
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   162
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   163
    def test_03(self):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   164
        varobj = vdb._VarObj('test_02', '&c1', gdb.parse_and_eval('&c1'))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   165
        children = list(varobj.children())
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   166
        self.assertEqual(2, len(children))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   167
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   168
        varobj.set_visualizer(vdb._DefaultVisualizer(varobj._value))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   169
        children = list(varobj.children())
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   170
        self.assertEqual(0, len(children))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   171
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   172
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   173
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   174
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   175
class MI_test(unittest.TestCase):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   176
    def setUp(self):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   177
        pass
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   178
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   179
    def tearDown(self):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   180
        vdb._VarObjs.unregister_all()
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   181
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   182
    def test_01(self):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   183
        self.assertEqual({  'name'      : 'test_01' ,
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   184
                            'numchild'  : 0,
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   185
                            'exp'       : '1',
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   186
                            'value'     : '1',
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   187
                            'type'      : 'int',
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   188
                            'has_more'  : 0,
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   189
                            'dynamic'   : 1,
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   190
                            'frozen'    : 0
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   191
                            },
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   192
                         vdb._var_create(['test_01', '*' , '1']))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   193
        self.assertEqual(None,
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   194
                         vdb._var_delete(['test_01']))
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   195
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   196
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   197
def run(test = None):
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   198
    if test == None:
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   199
        unittest.main()
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   200
    else:
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   201
        suite = unittest.TestSuite()
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   202
        suite.addTest(test)
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   203
        runner = unittest.TextTestRunner()
5d1c3e5fab6b Initial support for VDB python-based variable objects
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 177
diff changeset
   204
        runner.run(suite)