diff options
Diffstat (limited to 'Examples/test-suite/assign_reference.i')
-rw-r--r-- | Examples/test-suite/assign_reference.i | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/Examples/test-suite/assign_reference.i b/Examples/test-suite/assign_reference.i new file mode 100644 index 000000000..1dbccd496 --- /dev/null +++ b/Examples/test-suite/assign_reference.i @@ -0,0 +1,130 @@ +%module assign_reference + +// Copy of cpp11_assign_delete.i testcase with deleted assignment operators replaced by reference member variables + +%rename(Assign) *::operator=; + +// (1) Test directly non-assignable member variables +%inline %{ +int GlobalInt = 0; +int& getGlobalIntRef() { return GlobalInt; } +struct AssignPublic { + AssignPublic() : PublicMember(GlobalInt) {} + int &PublicMember; +}; + +struct AssignProtected { + AssignProtected() : ProtectedMember(GlobalInt) {} +protected: + int &ProtectedMember; +}; + +typedef const int& ConstIntRef; // also check typedef resolution +struct AssignPrivate { + AssignPrivate() : PrivateMember(GlobalInt) {} +private: + ConstIntRef PrivateMember; +}; + +struct MemberVars { + // These will only have getters + AssignPublic MemberPublic; + AssignProtected MemberProtected; + AssignPrivate MemberPrivate; +}; + +// (2) Test indirectly non-assignable member variables via inheritance +struct AssignPublicDerived : AssignPublic {}; +struct AssignProtectedDerived : AssignProtected {}; +struct AssignPrivateDerived : AssignPrivate {}; +struct AssignPublicDerivedSettable : AssignPublic { + AssignPublicDerivedSettable& operator=(const AssignPublicDerivedSettable &) { return *this; } +}; +struct AssignProtectedDerivedSettable : AssignProtected { + AssignProtectedDerivedSettable& operator=(const AssignProtectedDerivedSettable &) { return *this; } +}; +struct AssignPrivateDerivedSettable : AssignPrivate { + AssignPrivateDerivedSettable& operator=(const AssignPrivateDerivedSettable &) { return *this; } +}; + +struct InheritedMemberVars { + // These will only have getters + AssignPublicDerived MemberPublicDerived; + AssignProtectedDerived MemberProtectedDerived; + AssignPrivateDerived MemberPrivateDerived; + + static AssignPublicDerived StaticMemberPublicDerived; + static AssignProtectedDerived StaticMemberProtectedDerived; + static AssignPrivateDerived StaticMemberPrivateDerived; + + // These will have getters and setters + AssignPublicDerivedSettable MemberPublicDerivedSettable; + AssignProtectedDerivedSettable MemberProtectedDerivedSettable; + AssignPrivateDerivedSettable MemberPrivateDerivedSettable; + + static AssignPublicDerivedSettable StaticMemberPublicDerivedSettable; + static AssignProtectedDerivedSettable StaticMemberProtectedDerivedSettable; + static AssignPrivateDerivedSettable StaticMemberPrivateDerivedSettable; +}; + +AssignPublicDerived InheritedMemberVars::StaticMemberPublicDerived; +AssignProtectedDerived InheritedMemberVars::StaticMemberProtectedDerived; +AssignPrivateDerived InheritedMemberVars::StaticMemberPrivateDerived; + +AssignPublicDerivedSettable InheritedMemberVars::StaticMemberPublicDerivedSettable; +AssignProtectedDerivedSettable InheritedMemberVars::StaticMemberProtectedDerivedSettable; +AssignPrivateDerivedSettable InheritedMemberVars::StaticMemberPrivateDerivedSettable; + +// These will only have getters +AssignPublicDerived GlobalPublicDerived; +AssignProtectedDerived GlobalProtectedDerived; +AssignPrivateDerived GlobalPrivateDerived; + +// These will have getters and setters +AssignPublicDerivedSettable GlobalPublicDerivedSettable; +AssignProtectedDerivedSettable GlobalProtectedDerivedSettable; +AssignPrivateDerivedSettable GlobalPrivateDerivedSettable; +%} + +// (3) Test indirectly non-assignable member variables via classes that themselves have non-assignable member variables +%inline %{ +struct MemberPublicVar { + AssignPublic MemberPublic; +}; + +struct MemberProtectedVar { +protected: + AssignProtected MemberProtected; +}; + +struct MemberPrivateVar { +private: + AssignPrivate MemberPrivate; +}; + +struct MembersMemberVars { + // These will only have getters + MemberPublicVar MemberPublic; + MemberProtectedVar MemberProtected; + MemberPrivateVar MemberPrivate; +}; + +struct StaticMembersMemberVars { + static MemberPublicVar StaticMemberPublic; + static MemberProtectedVar StaticMemberProtected; + static MemberPrivateVar StaticMemberPrivate; +}; +MemberPublicVar StaticMembersMemberVars::StaticMemberPublic; +MemberProtectedVar StaticMembersMemberVars::StaticMemberProtected; +MemberPrivateVar StaticMembersMemberVars::StaticMemberPrivate; + +MemberPublicVar GlobalMemberPublic; +MemberProtectedVar GlobalMemberProtected; +MemberPrivateVar GlobalMemberPrivate; + +// Setters and getters available +struct StaticMembersMemberVarsHolder { + StaticMembersMemberVars Member; +}; +StaticMembersMemberVars GlobalStaticMembersMemberVars; +%} |