# JAVA test JRoom, JDoor, JThing, etc
[hear] (define s (? x / String new int-init / x));

[hear] (define room1 (COS_JRoom new <init>));

[hear] (define room2 (COS_JRoom new <init>));

[hear] (define door12 (COS_JDoor new <init>
                     (room1) (s "south") (room2) (s "north")));

[hear] (define jworld (COS_JWorld new <init>));

[hear] (define thing1 (COS_JThing new <init>));

[hear] (define robo1 (COS_JRobo new <init>));

[hear] (act / jworld add (thing1) / s "bus");

[hear] (act / jworld add (robo1) / s "autobus");

[hear] (act / jworld add (room1) / s "boston");

[hear] (act / jworld add (room2) / s "newyork");

[hear] (begin (room1 get add (room1))
              (= 1 / room1 get size));

[hear] (= 1 / room1 get size);

[hear] (= 0 / room2 get size);

[hear] (act / thing1 setRoom (room1));

[hear] (= 2 / room1 get size);

[hear] (= 0 / room2 get size);

[hear] (act / thing1 setRoom (room2));

[hear] (room1 get size);

[hear] (room2 get size);

[hear] (thing1 equals (thing1));

[hear] (room1 equals (room1));

[hear] (not / thing1 equals (room1));

[hear] (demo / door12 apply (room1) (s "south") getName intValue);
   evaluates to: "newyork"

[hear] (demo / door12 apply (room2) (s "north") getName intValue);
   evaluates to: "boston"

[hear] (define o
         (? x / jworld get / s / x));

[hear] (= "newyork" / (o "bus") getRoom getName intValue);

[hear] (act / robo1 setRoom (room1));

[hear] (demo / (o "autobus") getRoom getName intValue);
   evaluates to: "boston"

[hear] (act / jworld update);

[hear] (demo / (o "autobus") getRoom getName intValue);
   evaluates to: "newyork"