1##########################################################################
2# TEPAM - Tcl's Enhanced Procedure and Argument Manager
3##########################################################################
4#
5# proc_namespace.test: 
6# This file is part of the enhanced procedure and argument manager's regression
7# test. It validates the declaration and call of the procedure sub commands.
8#
9# Copyright (C) 2009, 2010 Andreas Drollinger
10# 
11# RCS: @(#) $Id: proc_namespaces.test,v 1.1 2010/02/11 21:50:55 droll Exp $
12##########################################################################
13# See the file "license.terms" for information on usage and redistribution
14# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
15##########################################################################
16
17source [file join \
18   [file dirname [file dirname [file join [pwd] [info script]]]] \
19   devtools testutilities.tcl]
20
21testsNeedTcl     8.3
22testsNeedTcltest 1.0
23
24catch {namespace delete ::tepam}
25catch {namespace delete ns1}
26catch {namespace delete ns2}
27catch {rename Parent1 ""}
28catch {rename Child ""}
29
30testing {
31   useLocal tepam.tcl tepam
32}
33
34######## Main namespace ########
35
36   # Don't use the :: main space prefix
37
38      # Procedure declarations
39      test tepam-ns.main1.dcl.main "tepam, main namespace - parent procedure declaration" \
40               -body {tepam::procedure Parent1 {} {return Parent1-[Child]}} \
41               -result "" -output ""
42
43      test tepam-ns.main1.dcl.chld "tepam, main namespace - child procedure declaration" \
44               -body {tepam::procedure Child {} {return Child}} \
45               -result "" -output ""
46
47      # Execution
48      test tepam-ns.main1.exe1 "tepam, main namespace - parent procedure execution" \
49               -body {Parent1} \
50               -result "Parent1-Child" -output ""
51
52      test tepam-ns.main1.exe2 "tepam, main namespace - parent procedure execution" \
53               -body {::Parent1} \
54               -result "Parent1-Child" -output ""
55
56   # Use the :: main space prefix
57
58      # Procedure declarations
59      test tepam-ns.main2.dcl.main "tepam, main namespace - parent procedure declaration" \
60               -body {tepam::procedure ::Parent1 {} {return ::Parent1-[Child]}} \
61               -result "" -output ""
62
63      test tepam-ns.main2.dcl.chld "tepam, main namespace - child procedure declaration" \
64               -body {tepam::procedure ::Child {} {return ::Child}} \
65               -result "" -output ""
66
67      # Execution
68      test tepam-ns.main2.exe1 "tepam, main namespace - parent procedure execution" \
69               -body {Parent1} \
70               -result "::Parent1-::Child" -output ""
71
72      test tepam-ns.main2.exe2 "tepam, main namespace - parent procedure execution" \
73               -body {::Parent1} \
74               -result "::Parent1-::Child" -output ""
75
76######## Namespace ::ns1 ########
77
78   namespace eval ::ns1 {}
79
80   # Only parent declared in this namespace
81      # Procedure declarations
82      test tepam-ns.ns1.dcl.1 "tepam, ns1 namespace - first parent procedure declaration" \
83               -body {tepam::procedure ::ns1::Parent2 {} {return ::ns1::Parent2-[Child]}} \
84               -result "" -output ""
85
86      test tepam-ns.ns1.dcl.2 "tepam, ns1 namespace - second parent procedure declaration" \
87               -body {tepam::procedure ns1::Parent3 {} {return ns1::Parent3-[Child]}} \
88               -result "" -output ""
89
90      # Execution
91      test tepam-ns.ns1.exe.1 "tepam, ns1 namespace - main parent procedure execution" \
92               -body {Parent1} \
93               -result "::Parent1-::Child" -output ""
94
95      test tepam-ns.ns1.exe.2 "tepam, ns1 namespace - first namespace parent procedure execution" \
96               -body {::ns1::Parent2} \
97               -result "::ns1::Parent2-::Child" -output ""
98
99      test tepam-ns.ns1.exe.3 "tepam, ns1 namespace - second namespace parent procedure execution" \
100               -body {::ns1::Parent3} \
101               -result "ns1::Parent3-::Child" -output ""
102
103
104   # Parent and children declared in this namespace
105      # Procedure declarations
106      test tepam-ns.ns1.dcl.3 "tepam, ns1 namespace - namespace child procedure declaration" \
107               -body {tepam::procedure ::ns1::Child {} {return ::ns1::Child}} \
108               -result "" -output ""
109
110      # Execution
111      test tepam-ns.ns1.exe.4 "tepam, ns1 namespace - main parent procedure execution" \
112               -body {Parent1} \
113               -result "::Parent1-::Child" -output ""
114
115      test tepam-ns.ns1.exe.5 "tepam, ns1 namespace - first namespace parent procedure execution" \
116               -body {::ns1::Parent2} \
117               -result "::ns1::Parent2-::ns1::Child" -output ""
118
119      test tepam-ns.ns1.exe.6 "tepam, ns1 namespace - second namespace parent procedure execution" \
120               -body {::ns1::Parent3} \
121               -result "ns1::Parent3-::ns1::Child" -output ""
122
123######## Namespace ::ns2 ########
124
125   namespace eval ::ns2 {
126
127   # Only parent declared in this namespace
128      # Procedure declarations
129      test tepam-ns.ns2.dcl.1 "tepam, ns2 namespace - parent procedure declaration" \
130               -body {tepam::procedure Parent4 {} {return ::ns2::Parent4-[Child]}} \
131               -result "" -output ""
132
133      # Execution
134      test tepam-ns.ns2.exe.1 "tepam, ns2 namespace - main parent procedure execution" \
135               -body {Parent1} \
136               -result "::Parent1-::Child" -output ""
137
138      test tepam-ns.ns2.exe.2 "tepam, ns2 namespace - first namespace parent procedure execution" \
139               -body {::ns2::Parent4} \
140               -result "::ns2::Parent4-::Child" -output ""
141
142      test tepam-ns.ns2.exe.3 "tepam, ns2 namespace - second namespace parent procedure execution" \
143               -body {Parent4} \
144               -result "::ns2::Parent4-::Child" -output ""
145
146   # Parent and children declared in this namespace
147      # Procedure declarations
148      test tepam-ns.ns2.dcl.2 "tepam, ns2 namespace - child procedure declaration" \
149               -body {tepam::procedure Child {} {return ::ns2::Child}} \
150               -result "" -output ""
151
152      # Execution
153      test tepam-ns.ns2.exe.4 "tepam, ns2 namespace - main parent procedure execution" \
154               -body {Parent1} \
155               -result "::Parent1-::Child" -output ""
156
157      test tepam-ns.ns2.exe.5 "tepam, ns2 namespace - first namespace parent procedure execution" \
158               -body {::ns2::Parent4} \
159               -result "::ns2::Parent4-::ns2::Child" -output ""
160
161      test tepam-ns.ns2.exe.6 "tepam, ns2 namespace - second namespace parent procedure execution" \
162               -body {Parent4} \
163               -result "::ns2::Parent4-::ns2::Child" -output ""
164
165   }; # End  namespace ::ns2
166
167######## That's all ########
168
169::tcltest::cleanupTests
170return
171
172##########################################################################
173# $RCSfile: proc_namespaces.test,v $ - ($Name:  $)
174# $Id: proc_namespaces.test,v 1.1 2010/02/11 21:50:55 droll Exp $
175# Modifications:
176# $Log: proc_namespaces.test,v $
177# Revision 1.1  2010/02/11 21:50:55  droll
178# TEPAM module checkin
179#
180##########################################################################
181
182