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