public void LoadClass()
{
Machine machine = CreateMachine();
Loader loader = new Loader(@"Object.st", new SimpleCompiler());
loader.LoadAndExecute(machine);
loader = new Loader(@"Behavior.st", new SimpleCompiler());
loader.LoadAndExecute(machine);
loader = new Loader(@"Class.st", new SimpleCompiler());
loader.LoadAndExecute(machine);
loader = new Loader(@"ClassTest.st", new SimpleCompiler());
loader.LoadAndExecute(machine);
object obj = machine.GetGlobalObject("MyClass");
Assert.IsNotNull(obj);
Assert.IsInstanceOfType(obj, typeof(IClass));
IClass cls = (IClass)obj;
Assert.AreEqual("MyClass", cls.Name);
Assert.AreEqual("Object", ((IClass)cls.SuperClass).Name);
object obj2 = machine.GetGlobalObject("Rectangle");
Assert.IsNotNull(obj2);
Assert.IsInstanceOfType(obj2, typeof(IClass));
IClass cls2 = (IClass)obj2;
Assert.AreEqual("Rectangle", cls2.Name);
Assert.AreEqual("Object", ((IClass)cls2.SuperClass).Name);
Assert.AreEqual(2, cls2.NoInstanceVariables);
Assert.AreEqual(0, cls2.Behavior.NoInstanceVariables);
Assert.AreEqual(1, cls2.NoClassVariables);
Assert.AreEqual("width height", cls2.GetInstanceVariableNamesAsString());
Assert.AreEqual("Number", cls2.GetClassVariableNamesAsString());
object obj3 = machine.GetGlobalObject("rect");
Assert.IsNotNull(obj3);
Assert.IsInstanceOfType(obj3, typeof(IObject));
IObject rect = (IObject)obj3;
Assert.AreEqual(cls2, rect.Behavior);
Assert.AreEqual(100, rect[0]);
Assert.AreEqual(50, rect[1]);
}