OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [itcl/] [itcl/] [tests/] [old/] [uplevel.test] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 578 markom
#
2
# Tests for "uplevel" across interpreter boundaries
3
# ----------------------------------------------------------------------
4
#   AUTHOR:  Michael J. McLennan
5
#            Bell Labs Innovations for Lucent Technologies
6
#            mmclennan@lucent.com
7
#            http://www.tcltk.com/itcl
8
#
9
#      RCS:  $Id: uplevel.test,v 1.1.1.1 2002-01-16 10:24:47 markom Exp $
10
# ----------------------------------------------------------------------
11
#            Copyright (c) 1993-1998  Lucent Technologies, Inc.
12
# ======================================================================
13
# See the file "license.terms" for information on usage and
14
# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
15
 
16
# ----------------------------------------------------------------------
17
#  DEFINE SOME USEFUL ROUTINES
18
# ----------------------------------------------------------------------
19
proc uplevelTest_show_var {level var} {
20
        return "$var>>[uplevel $level set $var]"
21
}
22
 
23
proc uplevelTest_do {cmd} {
24
        eval $cmd
25
}
26
 
27
# ----------------------------------------------------------------------
28
#  CREATE SOME OBJECTS
29
# ----------------------------------------------------------------------
30
Foo foo
31
Baz baz
32
 
33
# ----------------------------------------------------------------------
34
#  UPLEVEL TESTS (main interp)
35
# ----------------------------------------------------------------------
36
test {"uplevel" can access global variables (via relative level)} {
37
        set globalvar "global value"
38
        uplevelTest_show_var 1 globalvar
39
} {
40
        $result == "globalvar>>global value"
41
}
42
 
43
test {"uplevel" can access global variables (via "#0")} {
44
        set globalvar "global value"
45
        uplevelTest_show_var #0 globalvar
46
} {
47
        $result == "globalvar>>global value"
48
}
49
 
50
test {"uplevel" can access local variables (via relative level)} {
51
        uplevelTest_do {
52
                set localvar "local value"
53
                uplevelTest_show_var 1 localvar
54
        }
55
} {
56
        $result == "localvar>>local value"
57
}
58
 
59
test {"uplevel" can access local variables (via relative level)} {
60
        uplevelTest_do {
61
                set localvar "proper value"
62
                uplevelTest_do {
63
                        set localvar "not this one"
64
                        uplevelTest_show_var 2 localvar
65
                }
66
        }
67
} {
68
        $result == "localvar>>proper value"
69
}
70
 
71
test {"uplevel" can access local variables (via explicit level)} {
72
        uplevelTest_do {
73
                set localvar "local value"
74
                uplevelTest_show_var #1 localvar
75
        }
76
} {
77
        $result == "localvar>>local value"
78
}
79
 
80
# ----------------------------------------------------------------------
81
#  UPLEVEL TESTS (across class interps)
82
# ----------------------------------------------------------------------
83
test {"uplevel" can cross class interps to access global variables} {
84
        set globalvar "global value"
85
        foo do {
86
                uplevel #0 uplevelTest_show_var 1 globalvar
87
        }
88
} {
89
        $result == "Foo says 'globalvar>>global value'"
90
}
91
 
92
test {"uplevel" can cross several class interps to access global variables} {
93
        set globalvar "global value"
94
        baz do {
95
                foo do {
96
                        uplevel 2 uplevelTest_show_var #0 globalvar
97
                }
98
        }
99
} {
100
        $result == "Baz says 'Foo says 'globalvar>>global value''"
101
}
102
 
103
test {"uplevel" finds proper scope for execution} {
104
        baz do {
105
                foo do {
106
                        uplevel do {{info class}}
107
                }
108
        }
109
} {
110
        $result == "Baz says 'Foo says 'Baz says '::Baz'''"
111
}
112
 
113
test {"uplevel" finds proper scope for execution,
114
and works in conjunction with "unknown" to access
115
commands at the global scope with local call frames} {
116
        baz do {
117
                set bazvar "value in Baz"
118
                foo do {
119
                        uplevel ::info locals
120
                }
121
        }
122
} {
123
        $result == "Baz says 'Foo says 'bazvar cmds''"
124
}
125
 
126
# ----------------------------------------------------------------------
127
#  LEVEL TESTS (across class scopes)
128
# ----------------------------------------------------------------------
129
test {"info level" works across scope boundaries} {
130
        baz do {
131
                foo do {
132
                        info level
133
                }
134
        }
135
} {
136
        $result == "Baz says 'Foo says '2''"
137
}
138
 
139
test {"info level" works across scope boundaries} {
140
        baz do {
141
                foo do {
142
                        info level 0
143
                }
144
        }
145
} {
146
        $result == "Baz says 'Foo says 'do {
147
                        info level 0
148
                }''"
149
}
150
 
151
# ----------------------------------------------------------------------
152
#  CLEAN UP
153
# ----------------------------------------------------------------------
154
foo delete
155
baz delete

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.