summaryrefslogtreecommitdiffstats
path: root/tcllib/modules/oometa/oometa.test
diff options
context:
space:
mode:
Diffstat (limited to 'tcllib/modules/oometa/oometa.test')
-rw-r--r--tcllib/modules/oometa/oometa.test176
1 files changed, 176 insertions, 0 deletions
diff --git a/tcllib/modules/oometa/oometa.test b/tcllib/modules/oometa/oometa.test
new file mode 100644
index 0000000..ea9671a
--- /dev/null
+++ b/tcllib/modules/oometa/oometa.test
@@ -0,0 +1,176 @@
+# ooutil.test - Copyright (c) 2014-2015 Andreas Kupries
+
+# -------------------------------------------------------------------------
+
+source [file join \
+ [file dirname [file dirname [file join [pwd] [info script]]]] \
+ devtools testutilities.tcl]
+
+testsNeedTcl 8.5
+testsNeedTcltest 2
+
+testsNeed TclOO 1
+
+testing {
+ useLocal oometa.tcl oo::meta
+ useLocal oooption.tcl oo::option
+}
+
+# -------------------------------------------------------------------------
+# Test properties
+
+oo::class create foo {
+ property color blue
+
+ constructor args {
+ my _staticInit
+ my configure {*}$args
+ }
+}
+
+oo::class create bar {
+ superclass ::foo
+ property shape oval
+ option color {
+ label Color
+ default green
+ }
+}
+
+test oo-class-meta-001 {Test accessing properties} {
+ foo meta get const color:
+} blue
+
+test oo-class-meta-002 {Test accessing properties} {
+ bar meta get const color:
+} blue
+
+test oo-class-meta-003 {Test accessing properties} {
+ bar meta get const shape:
+} oval
+
+bar create cheers color pink
+# Pulling the meta data from const will return
+# the value specified in the class
+test oo-object-meta-001 {Test accessing properties} {
+ cheers meta get const color:
+} blue
+
+# Accessing the data via cget pulls from the local
+# definition
+test oo-object-meta-001a {Test accessing properties} {
+ cheers meta cget color
+} pink
+# With or without the trailing :
+test oo-object-meta-001b {Test accessing properties} {
+ cheers meta cget color:
+} pink
+# And using the local cget
+test oo-object-meta-001c {Test accessing properties} {
+ cheers cget color
+} pink
+
+test oo-object-meta-002 {Test accessing properties} {
+ cheers meta get const shape:
+} oval
+
+test oo-object-meta-003 {Test accessing properties} {
+ cheers cget color
+} pink
+
+bar create moes
+test oo-object-meta-004 {Test accessing properties} {
+ moes meta get const color:
+} blue
+
+test oo-object-meta-004a {Test accessing properties} {
+ moes cget color
+} green
+
+test oo-object-meta-004a {Test accessing properties} {
+ moes cget color:
+} green
+
+test oo-object-meta-005 {Test accessing properties} {
+ moes meta get const shape:
+} oval
+
+test oo-object-meta-006 {Test accessing properties} {
+ moes cget color
+} green
+
+test oo-object-meta-007 {Test the CGET retrieves a property if an option doesn't exist} {
+ moes cget shape
+} oval
+
+###
+# Test altering a property
+###
+
+oo::define ::foo property woozle whoop
+
+test oo-modclass-meta-001 {Test accessing properties of an altered class} {
+ foo meta get const woozle:
+} whoop
+
+test oo-modclass-meta-002 {Test accessing properties of the descendent of an altered class} {
+ bar meta get const woozle:
+} whoop
+
+test oo-modobject-meta-001 {Test the accessing of properties of an instance of an altered class} {
+ moes meta get const woozle:
+} whoop
+
+test obj-meta-for-001 {Test object meta for} {
+ set result {}
+ moes meta for {key value} option {
+ lappend result $key $value
+ }
+ set result
+} {color {label: Color default: green}}
+
+test obj-meta-with-001 {Test object meta with} {
+ set result {}
+ moes meta with option {}
+ set color
+} {label: Color default: green}
+
+test obj-meta-for-001 {Test class meta for} {
+ set result {}
+ bar meta for {key value} option {
+ lappend result $key $value
+ }
+ set result
+} {color {label: Color default: green}}
+
+test obj-meta-with-001 {Test class meta with} {
+ set result {}
+ bar meta with option {}
+ set color
+} {label: Color default: green}
+
+# -------------------------------------------------------------------------
+
+# Test of recursive dicts
+
+oo::class create baz {
+ superclass ::bar
+ meta set option color default: purple
+}
+
+test obj-meta-recursive-1 {Test that meta set works with recursive dicts} {
+ set result {}
+ baz meta get option color default:
+} {purple}
+
+test obj-meta-recursive-2 {Test that meta set works with recursive dicts} {
+ set result {}
+ baz meta get option color label:
+} {Color}
+
+testsuiteCleanup
+
+# Local variables:
+# mode: tcl
+# indent-tabs-mode: nil
+# End: