File: class-method.test

package info (click to toggle)
nsf 2.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 13,208 kB
  • sloc: ansic: 32,687; tcl: 10,723; sh: 660; pascal: 176; javascript: 135; lisp: 41; makefile: 24
file content (134 lines) | stat: -rw-r--r-- 4,126 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
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: