;; test_interface.nu
;;  tests for the Nu public interface.
;;
;;  Copyright (c) 2007 Tim Burks, Neon Design Technology, Inc.

(class TestInterface is NuTestCase
     
     ;; all of these calls could be made from Objective-C 
     ;; using methods that are declared in Nu/Nu.h
     (imethod (id) testParser is
          ;; create a parser
          (set parser (Nu parser))
          ;; set a variable in the top-level context using KVC
          (parser setValue:2 forKey:"x")
          ;; parse text into an evaluatable object
          (set code (parser parse:"(set x (+ x x))"))
          ;; evaluate the parsed code
          (set result (parser eval:code))
          (assert_equal 4 result)
          ;; parsed code objects can be evaluated any number of times
          (set result (parser eval:code))
          (assert_equal 8 result)
          ;; KVC is broadly interpreted to allow any Nu expression as a key
          (assert_equal 16 (parser valueForKey:"(+ x x)"))
          ;; But for setting, the key must be a symbol name
          (parser setValue:"hello" forKey:"y")
          ;; Symbol values can also be looked up using parse: and eval:
          (assert_equal "hello" (parser eval:(parser parse:"y")))))

