home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / TCL / ITCL / _ITCL.TAR / usr / lib / itcl / tests / uplevel.test < prev    next >
Encoding:
Text File  |  1994-03-21  |  4.9 KB  |  169 lines

  1. #
  2. # Tests for "uplevel" across interpreter boundaries
  3. # ----------------------------------------------------------------------
  4. #   AUTHOR:  Michael J. McLennan       Phone: (610)712-2842
  5. #            AT&T Bell Laboratories   E-mail: michael.mclennan@att.com
  6. #
  7. #      RCS:  uplevel.test,v 1.1.1.1 1994/03/21 22:09:52 mmc Exp
  8. # ----------------------------------------------------------------------
  9. #               Copyright (c) 1993  AT&T Bell Laboratories
  10. # ======================================================================
  11. # Permission to use, copy, modify, and distribute this software and its
  12. # documentation for any purpose and without fee is hereby granted,
  13. # provided that the above copyright notice appear in all copies and that
  14. # both that the copyright notice and warranty disclaimer appear in
  15. # supporting documentation, and that the names of AT&T Bell Laboratories
  16. # any of their entities not be used in advertising or publicity
  17. # pertaining to distribution of the software without specific, written
  18. # prior permission.
  19. #
  20. # AT&T disclaims all warranties with regard to this software, including
  21. # all implied warranties of merchantability and fitness.  In no event
  22. # shall AT&T be liable for any special, indirect or consequential
  23. # damages or any damages whatsoever resulting from loss of use, data or
  24. # profits, whether in an action of contract, negligence or other
  25. # tortuous action, arising out of or in connection with the use or
  26. # performance of this software.
  27. # ======================================================================
  28.  
  29. # ----------------------------------------------------------------------
  30. #  DEFINE SOME USEFUL ROUTINES
  31. # ----------------------------------------------------------------------
  32. proc uplevelTest_show_var {level var} {
  33.     return "$var>>[uplevel $level set $var]"
  34. }
  35.  
  36. proc uplevelTest_do {cmd} {
  37.     eval $cmd
  38. }
  39.  
  40. # ----------------------------------------------------------------------
  41. #  CREATE SOME OBJECTS
  42. # ----------------------------------------------------------------------
  43. Foo foo
  44. Baz baz
  45.  
  46. # ----------------------------------------------------------------------
  47. #  UPLEVEL TESTS (main interp)
  48. # ----------------------------------------------------------------------
  49. test {"uplevel" can access global variables (via relative level)} {
  50.     set globalvar "global value"
  51.     uplevelTest_show_var 1 globalvar
  52. } {
  53.     $result == "globalvar>>global value"
  54. }
  55.  
  56. test {"uplevel" can access global variables (via "#0")} {
  57.     set globalvar "global value"
  58.     uplevelTest_show_var #0 globalvar
  59. } {
  60.     $result == "globalvar>>global value"
  61. }
  62.  
  63. test {"uplevel" can access local variables (via relative level)} {
  64.     uplevelTest_do {
  65.         set localvar "local value"
  66.         uplevelTest_show_var 1 localvar
  67.     }
  68. } {
  69.     $result == "localvar>>local value"
  70. }
  71.  
  72. test {"uplevel" can access local variables (via relative level)} {
  73.     uplevelTest_do {
  74.         set localvar "proper value"
  75.         uplevelTest_do {
  76.             set localvar "not this one"
  77.             uplevelTest_show_var 2 localvar
  78.         }
  79.     }
  80. } {
  81.     $result == "localvar>>proper value"
  82. }
  83.  
  84. test {"uplevel" can access local variables (via explicit level)} {
  85.     uplevelTest_do {
  86.         set localvar "local value"
  87.         uplevelTest_show_var #1 localvar
  88.     }
  89. } {
  90.     $result == "localvar>>local value"
  91. }
  92.  
  93. # ----------------------------------------------------------------------
  94. #  UPLEVEL TESTS (across class interps)
  95. # ----------------------------------------------------------------------
  96. test {"uplevel" can cross class interps to access global variables} {
  97.     set globalvar "global value"
  98.     foo do {
  99.         uplevel #0 uplevelTest_show_var 1 globalvar
  100.     }
  101. } {
  102.     $result == "Foo says 'globalvar>>global value'"
  103. }
  104.  
  105. test {"uplevel" can cross several class interps to access global variables} {
  106.     set globalvar "global value"
  107.     baz do {
  108.         foo do {
  109.             uplevel 2 uplevelTest_show_var #0 globalvar
  110.         }
  111.     }
  112. } {
  113.     $result == "Baz says 'Foo says 'globalvar>>global value''"
  114. }
  115.  
  116. test {"uplevel" finds proper interp for execution} {
  117.     baz do {
  118.         foo do {
  119.             uplevel do {{info class}}
  120.         }
  121.     }
  122. } {
  123.     $result == "Baz says 'Foo says 'Baz says 'Baz'''"
  124. }
  125.  
  126. test {"uplevel" finds proper interp for execution,
  127. and works in conjunction with "unknown" to access
  128. commands at the global scope with local call frames} {
  129.     baz do {
  130.         set bazvar "value in Baz"
  131.         foo do {
  132.             uplevel ::info locals
  133.         }
  134.     }
  135. } {
  136.     $result == "Baz says 'Foo says 'bazvar cmds''"
  137. }
  138.  
  139. # ----------------------------------------------------------------------
  140. #  LEVEL TESTS (across class interps)
  141. # ----------------------------------------------------------------------
  142. test {"info level" works across interp boundaries} {
  143.     baz do {
  144.         foo do {
  145.             info level
  146.         }
  147.     }
  148. } {
  149.     $result == "Baz says 'Foo says '2''"
  150. }
  151.  
  152. test {"info level" works across interp boundaries} {
  153.     baz do {
  154.         foo do {
  155.             info level 0
  156.         }
  157.     }
  158. } {
  159.     $result == "Baz says 'Foo says 'do {
  160.             info level 0
  161.         }''"
  162. }
  163.  
  164. # ----------------------------------------------------------------------
  165. #  CLEAN UP
  166. # ----------------------------------------------------------------------
  167. foo delete
  168. baz delete
  169.