File: TestClassConstrainedProtocol.py

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: 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 (67 lines) | stat: -rw-r--r-- 2,633 bytes parent folder | download
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
"""
Test expression operations in class constrained protocols
"""

from __future__ import print_function


import os
import time
import re
import lldb
import lldbsuite.test.lldbutil as lldbutil
from lldbsuite.test.lldbtest import *
from lldbsuite.test.decorators import *

class TestClassConstrainedProtocol(TestBase):
    @swiftTest
    def test_extension_weak_self(self):
        """Test that we can reconstruct weak self captured in a class constrained protocol."""
        self.build()
        self.do_self_test("Break here for weak self", needs_dynamic=False)

    @swiftTest
    def test_extension_self (self):
        """Test that we can reconstruct self in method of a class constrained protocol."""
        self.build()
        self.do_self_test("Break here in class protocol", needs_dynamic=False)

    @swiftTest
    def test_method_weak_self(self):
        """Test that we can reconstruct weak self capture in method of a class conforming to a class constrained protocol."""
        self.build()
        self.do_self_test("Break here for method weak self", needs_dynamic=False)

    @swiftTest
    def test_method_self(self):
        """Test that we can reconstruct self in method of a class conforming to a class constrained protocol."""
        self.build()
        self.do_self_test("Break here in method", needs_dynamic=False)

    def setUp(self):
        # Call super's setUp().
        TestBase.setUp(self)

    def check_self(self, bkpt_pattern, needs_dynamic):
        opts = lldb.SBExpressionOptions()
        if needs_dynamic:
            opts.SetFetchDynamicValue(lldb.eNoDynamicValues)
            result = self.frame().EvaluateExpression("self", opts)
            error = result.GetError()
            self.assertTrue("self" in error.GetCString())
            self.assertTrue("run-target" in error.GetCString())
        opts.SetFetchDynamicValue(lldb.eDynamicCanRunTarget)
        result = self.frame().EvaluateExpression("self", opts)
        error = result.GetError()
        self.assertSuccess(error,
                           "'self' expression failed at '%s'" % bkpt_pattern)
        f_ivar = result.GetChildMemberWithName("f")
        self.assertTrue(f_ivar.IsValid(),
                        "Could not find 'f' in self at '%s'"%(bkpt_pattern))
        self.assertTrue(f_ivar.GetValueAsSigned() == 12345,
                        "Wrong value for f: %d"%(f_ivar.GetValueAsSigned()))

    def do_self_test(self, bkpt_pattern, needs_dynamic):
        lldbutil.run_to_source_breakpoint(
            self, bkpt_pattern, lldb.SBFileSpec('main.swift'))
        self.check_self(bkpt_pattern, needs_dynamic)