summaryrefslogtreecommitdiff
path: root/test/systemu_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/systemu_test.rb')
-rw-r--r--test/systemu_test.rb64
1 files changed, 64 insertions, 0 deletions
diff --git a/test/systemu_test.rb b/test/systemu_test.rb
new file mode 100644
index 0000000..19fac1d
--- /dev/null
+++ b/test/systemu_test.rb
@@ -0,0 +1,64 @@
+
+Testing SystemU do
+
+##
+#
+ testing 'that simple usage works' do
+ status, stdout, stderr = assert{ systemu :bin/:ls }
+ assert{ status == 0 }
+ assert{ stdout['lib'] }
+ assert{ stderr.strip.empty? }
+ end
+
+ testing 'program with stdin' do
+ stdin = '42'
+ status, stdout, stderr = assert{ systemu :bin/:cat, :stdin => stdin }
+ assert{ status == 0 }
+ assert{ stdout == stdin }
+ end
+
+end
+
+
+
+
+
+BEGIN {
+
+# silly hax to build commands we can shell out to on any platform. since
+# tests might run on windoze we assume only that 'ruby' is available and build
+# other command-line programs from it.
+#
+ module Kernel
+ private
+ def bin(which, options = {}, &block)
+ case which.to_s
+ when 'ls'
+ %| ruby -e'puts Dir.glob("*").sort' |
+
+ when 'cat'
+ %| ruby -e'STDOUT.write(ARGF.read)' |
+
+ when 'find'
+ %| ruby -e'puts Dir.glob("**/**").sort' |
+ end
+ end
+ end
+
+# just let's us write: :bin/:ls
+#
+ class Symbol
+ def / other, options = {}, &block
+ eval "#{ self }(:#{ other }, options, &block)"
+ end
+ end
+
+ testdir = File.dirname(File.expand_path(__FILE__))
+ rootdir = File.dirname(testdir)
+ libdir = File.join(rootdir, 'lib')
+ require File.join(libdir, 'systemu')
+ require File.join(testdir, 'testing')
+
+
+ Dir.chdir(rootdir)
+}