   (let [result (interpret (parse "isla is a person")
                           (library/get-initial-env extra-types))]
     (is (= (get (:ctx result) "isla")
-           (new isla.test.interpreter.Person 0 "" :undefined #{})))))
-
-(deftest test-unknown-type-causes-exception
-  (try
-    (interpret (parse "isla is a giraffe")
-               (library/get-initial-env extra-types))
-    (is false) ;; should not get called
-    (catch Exception e
-      (is (= (.getMessage e) "I do not know what a giraffe is.")))))
+           (new-person)))))
+
+(deftest test-type-assignment-of-a-generic-type
+  (let [result (interpret (parse "isla is a giraffe")
+                          (library/get-initial-env extra-types))]
+    (is (= (get (:ctx result) "isla")
+           {}))))
 
 ;; slot assignment
 

  (let [env (interpret (parse "isla is a person\nfriend is isla\nisla age is 1")
                       (library/get-initial-env extra-types))]
    (is (= (resolve- {:ref "friend"} env)
           (new isla.test.interpreter.Person 1 "" :undefined #{})))))

(deftest test-lookup-resolves-object-slot-to-object-reference-with-updated-data
  (let [env (interpret (parse "isla is a person

(def extra-types
  {"person" (fn [] (new isla.test.interpreter.Person 0 "" :undefined #{}))})

(defn new-person
  ([] (new-person 0))
  ([age] (new-person age ""))
  ([age name] (new-person age name :undefined))
  ([age name friend] (new-person age name friend #{}))
  ([age name friend items]
     (map->Person {:age age :name name :friend friend :items items})))

;; non-slot assignment

(deftest integer-assignment
