From 439e5d3cc6c8a34e876704354b6abc7039ef8629 Mon Sep 17 00:00:00 2001
From: Ary Borenszweig <aborenszweig@manas.com.ar>
Date: Wed, 4 Dec 2013 07:30:47 -0300
Subject: [PATCH] Added some specs for class hierarchy and class methods

---
 spec/compiler/codegen/class_spec.cr     | 22 ++++++++-
 spec/compiler/codegen/hierarchy_spec.cr | 59 ++++++++++++++++++++++++-
 2 files changed, 79 insertions(+), 2 deletions(-)
 mode change 100644 => 100755 spec/compiler/codegen/hierarchy_spec.cr

diff --git a/spec/compiler/codegen/class_spec.cr b/spec/compiler/codegen/class_spec.cr
index 7276f7bcce..e9770cc61a 100755
--- a/spec/compiler/codegen/class_spec.cr
+++ b/spec/compiler/codegen/class_spec.cr
@@ -1,4 +1,4 @@
-#!/usr/bin/env bin/crystal -run
+#!/usr/bin/env bin/crystal --run
 require "../../spec_helper"
 
 describe "Code gen: class" do
@@ -167,4 +167,24 @@ describe "Code gen: class" do
       foo.foo
       ").to_i.should eq(2)
   end
+
+  it "gets object_id of class" do
+    program = Program.new
+    program.run("Reference.object_id").to_i.should eq(program.reference.type_id)
+  end
+
+  it "calls method on Class class" do
+    run("
+      class Class
+        def foo
+          1
+        end
+      end
+
+      class Foo
+      end
+
+      Foo.foo
+    ").to_i.should eq(1)
+  end
 end
diff --git a/spec/compiler/codegen/hierarchy_spec.cr b/spec/compiler/codegen/hierarchy_spec.cr
old mode 100644
new mode 100755
index e19e4ead75..2473d68e38
--- a/spec/compiler/codegen/hierarchy_spec.cr
+++ b/spec/compiler/codegen/hierarchy_spec.cr
@@ -1,4 +1,4 @@
-#!/usr/bin/env bin/crystal -run
+#!/usr/bin/env bin/crystal --run
 require "../../spec_helper"
 
 describe "Code gen: hierarchy type" do
@@ -359,4 +359,61 @@ describe "Code gen: hierarchy type" do
       foo(x)
     ").to_i.should eq(1)
   end
+
+  it "calls class method 1" do
+    run("
+      class Foo
+        def self.foo
+          1
+        end
+      end
+
+      class Bar < Foo
+        def self.foo
+          2
+        end
+      end
+
+      (Foo.new || Bar.new).class.foo
+      ").to_i.should eq(1)
+  end
+
+  it "calls class method 2" do
+    run("
+      class Foo
+        def self.foo
+          1
+        end
+      end
+
+      class Bar < Foo
+        def self.foo
+          2
+        end
+      end
+
+      (Bar.new || Foo.new).class.foo
+      ").to_i.should eq(2)
+  end
+
+  it "calls class method 3" do
+    run("
+      class Base
+        def self.foo
+          1
+        end
+      end
+
+      class Foo < Base
+      end
+
+      class Bar < Foo
+        def self.foo
+          2
+        end
+      end
+
+      (Foo.new || Base.new).class.foo
+      ").to_i.should eq(1)
+  end
 end
-- 
GitLab