mirror of https://github.com/swig/swig.git
45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
from swig_test_utils import swig_check
|
|
import injecting_base_class as m
|
|
|
|
# Each of these names the namespaced base Space::Base (or Space::Base2) without the namespace qualifier,
|
|
# from within a derived class - the C++ injected class name. SWIG must resolve every spelling to the
|
|
# one base type.
|
|
|
|
d = m.Derived()
|
|
b = m.Base("x")
|
|
|
|
# Constructors taking the base.
|
|
swig_check(m.Derived(b).whoami(), "Base:x")
|
|
swig_check(m.MultiDerived(b, m.Base2(5)).whoami(), "Base:x")
|
|
swig_check(m.Derived2(b).whoami(), "Base:x")
|
|
|
|
d.member = m.Base("mm")
|
|
swig_check(d.member.whoami(), "Base:mm")
|
|
swig_check(d.sharedvar.whoami(), "Base:sharedvar")
|
|
|
|
swig_check(d.by_value(b).whoami(), "Base:x")
|
|
swig_check(d.by_pointer(b).whoami(), "Base:x")
|
|
swig_check(d.by_cref(b).whoami(), "Base:x")
|
|
|
|
swig_check(m.Derived.make("y").whoami(), "Base:y")
|
|
swig_check(m.Derived.static_id(b).whoami(), "Base:x")
|
|
|
|
# Named through the derived class (Derived::Base) at namespace scope.
|
|
swig_check(m.through_derived(b).whoami(), "Base:x")
|
|
|
|
# Multiple inheritance
|
|
md = m.MultiDerived()
|
|
swig_check(md.first(b).whoami(), "Base:x")
|
|
swig_check(md.second(m.Base2(42)).id, 42)
|
|
|
|
# Multi level inheritance: the indirect base named unqualified and through the derived class.
|
|
d2 = m.Derived2()
|
|
swig_check(d2.from_grandbase(b).whoami(), "Base:x")
|
|
swig_check(d2.from_grandbase_qualified(b).whoami(), "Base:x")
|
|
|
|
# Type unification: a value produced through any of the derived spellings is accepted by the function
|
|
# taking the fully qualified Space::Base / Space::Base2.
|
|
swig_check(m.canonical(m.Derived.make("z")).whoami(), "Base:z")
|
|
swig_check(m.canonical(d.by_value(b)).whoami(), "Base:x")
|
|
swig_check(m.canonical2(md.second(m.Base2(7))), 7)
|