Revision: 794 http://trac.macosforge.org/projects/ruby/changeset/794 Author: eloy.de.enige@gmail.com Date: 2009-01-20 06:41:34 -0800 (Tue, 20 Jan 2009) Log Message: ----------- Tests for HotCocoa::Mapper and HotCocoa::Mappings Added Paths: ----------- MacRuby/trunk/test/hotcocoa/test_mapper.rb MacRuby/trunk/test/hotcocoa/test_mappings.rb Added: MacRuby/trunk/test/hotcocoa/test_mapper.rb =================================================================== --- MacRuby/trunk/test/hotcocoa/test_mapper.rb (rev 0) +++ MacRuby/trunk/test/hotcocoa/test_mapper.rb 2009-01-20 14:41:34 UTC (rev 794) @@ -0,0 +1,63 @@ +require 'hotcocoa' +require File.join(File.dirname(__FILE__), '..', 'test_helper') + +class SampleClass +end + +class TestMapper < Test::Unit::TestCase + + include HotCocoa::Mappings + + it "should have two hash attributes named #bindings and #delegate" do + assert Mapper.bindings_modules.is_a?(Hash) + assert Mapper.delegate_modules.is_a?(Hash) + end + + [ :control_class, :builder_method, :control_module, + :map_bindings, :map_bindings= ].each do |method| + + it "should have a #{method} attribute" do + assert_respond_to(sample_mapper, method) + end + + end + + it "should set it's control class on initialization" do + assert_equal(sample_mapper(true).control_class, SampleClass) + end + + it "should convert from camelcase to underscore" do + assert sample_mapper.underscore("SampleCamelCasedWord"), 'sample_camel_cased_word' + end + + def test_include_in_class + + m = sample_mapper(true) + m.include_in_class + + assert_equal m.instance_variable_get('@extension_method'), :include + + flunk 'Pending.' + + end + + def test_each_control_ancestor + flunk 'Pending.' + end + + def test_map_class + flunk 'Pending.' + end + + def test_map_instances_of + flunk 'Pending.' + end + + private + + def sample_mapper(flush = false) + @mapper = nil if flush + @mapper || Mapper.new(SampleClass) + end + +end Added: MacRuby/trunk/test/hotcocoa/test_mappings.rb =================================================================== --- MacRuby/trunk/test/hotcocoa/test_mappings.rb (rev 0) +++ MacRuby/trunk/test/hotcocoa/test_mappings.rb 2009-01-20 14:41:34 UTC (rev 794) @@ -0,0 +1,82 @@ +require 'hotcocoa' +require File.join(File.dirname(__FILE__), '..', 'test_helper') + +class SampleClass + def self.val; @val || false; end + def self.val= (v); @val = v; end +end + +class TestMappings < Test::Unit::TestCase + + include HotCocoa + + it "should have two Hash attributes named #mappings and #frameworks" do + assert Mappings.mappings.is_a?(Hash) + assert Mappings.frameworks.is_a?(Hash) + end + + it "should register callbacks for the point of time when a framework is loaded with #on_framework" do + p = Proc.new {} + Mappings.on_framework(:Foo, &p) + assert_equal(Mappings.frameworks['foo'].last, p) + end + + it "should create a mapping to a class with #map" do + + block = Proc.new do + def alloc_with_options(options); options; end + end + + HotCocoa::Mappings.map({:foo => :SampleClass}, &block) + + m = HotCocoa::Mappings.mappings[:foo] + + assert_equal(m.control_class, SampleClass) + assert_equal(m.builder_method, :foo) + assert(m.control_module.instance_methods.include?(:alloc_with_options)) + + end + + it "should create a mapping to a class for a framework with #map" do + + p = Proc.new {} + + HotCocoa::Mappings.map({:foo => :SampleClass, :framework => :Anonymous}, &p) + + require 'pp'; pp HotCocoa::Mappings + + # FIXME: This is not really nice. We test that the result exists, but not what it is. + assert_equal Mappings.frameworks["anonymous"].size, 1 + + end + + it "should call the framework's callbacks if it's passed to #framework_loaded" do + + p = Proc.new { SampleClass.val = true } + + Mappings.on_framework(:Foo, &p) + Mappings.framework_loaded(:Foo) + + assert_equal SampleClass.val, true + + end + + it "should raise nothing if there's no entry for the framework passed to #framework_loaded" do + + assert_nothing_raised do + Mappings.framework_loaded(:FrameworkDoesNotExist) + end + + end + + def test_reload + flunk 'Pending.' + end + + private + + # Helper methods for test_framework_loaded + def self.foo_loaded; @foo_loaded; end + def self.foo_loaded=(val); @foo_loaded = val; end + +end \ No newline at end of file