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 122 123 124 125 126 127 128 129 130 131 132 133 134
|
# -*- Tcl -*-
package prefer latest
package require nx::test
#
# The first test series without the convenience layer
#
nx::test case class-methods-0 {
nx::Class create M1
nx::Class create C {
? {::C public class method foo {} {return foo}} "'class' is not a method defining method"
:public object method f args {next}
}
? {::C class mixins set M1} \
"method 'class' unknown for ::C; in order to create an instance of class ::C, consider using '::C create class ?...?'"
? {::C class filter f} \
"method 'class' unknown for ::C; in order to create an instance of class ::C, consider using '::C create class ?...?'"
? {lsort [::C info object methods]} "f"
? {lsort [::C info]} \
"valid submethods of ::C info: baseclass children class filters has heritage info instances lookup method methods mixinof mixins name object parent precedence slots subclasses superclasses variable variables vars"
}
#
# require the convenience layer
# and make it verbose
#
package require nx::class-method
nx::configure class-method-warning on
nx::test case class-methods-1 {
nx::Class create M1
nx::Class create ::C {
:public class method foo {} {return [:pm1]}
:public class method f args {next}
:protected class method pm1 args {return pm1}
:public class alias a ::C::pm1
:public class forward fwd %self pm1
:private class method priv args {return priv}
:class method pm2 args {return pm2}
:class property -accessor public p
:class variable v1 1
:class variable -incremental v2:integer 1
#
# public, protected, private
# alias, forward
#
}
? {::C info object methods} "v2 p foo fwd a f"
? {lsort [::C info object methods -callprotection protected]} "pm1 pm2"
? {lsort [::C info object methods -callprotection private]} "priv"
? {::C class info methods} "v2 p foo fwd a f"
? {lsort [::C class info methods -callprotection protected]} "pm1 pm2"
? {lsort [::C class info methods -callprotection private]} "priv"
? {::C class info variables} "::C::per-object-slot::v2 ::C::per-object-slot::p"
? {::C info object variables} "::C::per-object-slot::v2 ::C::per-object-slot::p"
? {::C class info slots} "::C::per-object-slot::v2 ::C::per-object-slot::p"
? {::C pm1} \
"method 'pm1' unknown for ::C; in order to create an instance of class ::C, consider using '::C create pm1 ?...?'"
? {::C foo} "pm1"
? {::C a} "pm1"
? {::C fwd} "pm1"
? {::C class mixins set M1} ::M1
? {::C class info mixins} ::M1
? {::C class mixins set ""} ""
? {::C class info mixins} ""
? {::C class filters set f} f
? {::C class info filters} f
? {::C class filters set ""} ""
? {::C class info filters} ""
? {lsort [::C info object methods]} "a f foo fwd p v2"
? {lsort [::C info]} \
"valid submethods of ::C info: baseclass children class filters has heritage info instances lookup method methods mixinof mixins name object parent precedence slots subclasses superclasses variable variables vars"
}
#
# delete class method, class property, class variable
#
nx::test case class-methods-2 {
nx::Class create ::C {
:public class method foo {} {return foo}
:class property -accessor public p
:class variable -incremental v1:integer 1
}
? {C class info methods} "p foo v1"
? {C class info variables} "::C::per-object-slot::p ::C::per-object-slot::v1"
? {C class delete method foo} ""
? {C class info methods} "p v1"
? {C class info variables} "::C::per-object-slot::p ::C::per-object-slot::v1"
? {C class delete property p} ""
? {C class info methods} "v1"
? {C class info variables} "::C::per-object-slot::v1"
? {C class delete variable v1} ""
? {C class info methods} ""
? {C class info variables} ""
}
#
# require method
#
nx::test case class-methods-2 {
nsf::method::provide set {::nsf::method::alias set -frame object ::set}
nx::Class create ::C {
:require class method set
}
? {C class info methods} "set"
? {C info object methods} "set"
}
#
# Local variables:
# mode: tcl
# tcl-indent-level: 2
# indent-tabs-mode: nil
# End:
|