[macruby-changes] [801] MacRuby/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Tue Jan 20 16:21:56 PST 2009
Revision: 801
http://trac.macosforge.org/projects/ruby/changeset/801
Author: eloy.de.enige at gmail.com
Date: 2009-01-20 16:21:56 -0800 (Tue, 20 Jan 2009)
Log Message:
-----------
Applied patch from #212 by Vincent Isambart and added test coverage. Also improved the other test descriptions and code and refactored the #map code.
Modified Paths:
--------------
MacRuby/trunk/lib/hotcocoa/mappings.rb
MacRuby/trunk/test-macruby/cases/hotcocoa/mappings_test.rb
MacRuby/trunk/test-macruby/cases/objc_test.rb
Modified: MacRuby/trunk/lib/hotcocoa/mappings.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa/mappings.rb 2009-01-20 20:09:22 UTC (rev 800)
+++ MacRuby/trunk/lib/hotcocoa/mappings.rb 2009-01-21 00:21:56 UTC (rev 801)
@@ -1,6 +1,6 @@
module HotCocoa
module Mappings
-
+
def self.reload
Dir.glob(File.join(File.dirname(__FILE__), "mappings", "*.rb")).each do |mapping|
load mapping
@@ -8,7 +8,7 @@
end
DefaultEmptyRect = [0,0,0,0]
-
+
module TargetActionConvenience
def on_action=(behavior)
object = Object.new
@@ -25,38 +25,45 @@
self
end
end
-
+
def self.map(options, &block)
framework = options.delete(:framework)
mapped_name = options.keys.first
mapped_value = options.values.first
- const = Object.full_const_get(mapped_value)
+
if mapped_value.kind_of?(Class)
- m = Mapper.map_instances_of(mapped_value, mapped_name, &block)
- mappings[m.builder_method] = m
- elsif framework.nil? || const
- m = Mapper.map_instances_of(const, mapped_name, &block)
- mappings[m.builder_method] = m
+ add_mapping(mapped_name, mapped_value, &block)
else
- on_framework(framework) do
- m = Mapper.map_instances_of(const, mapped_name, &block)
- mappings[m.builder_method] = m
+ constant = Object.full_const_get(mapped_value)
+ if framework.nil? || constant
+ add_mapping(mapped_name, constant, &block)
+ else
+ on_framework(framework) do
+ add_mapping(mapped_name, constant, &block)
+ end
end
end
end
-
+
+ # Registers +mapped_name+ as a Mapper#builder_method for the given
+ # +mapped_value+. The +block+ is used as the Mapper#builder_method's body.
+ def self.add_mapping(mapped_name, mapped_value, &block)
+ m = Mapper.map_instances_of(mapped_value, mapped_name, &block)
+ mappings[m.builder_method] = m
+ end
+
def self.mappings
@mappings ||= {}
end
-
+
def self.on_framework(name, &block)
(frameworks[name.to_s.downcase] ||= []) << block
end
-
+
def self.frameworks
@frameworks ||= {}
end
-
+
def self.framework_loaded(name)
if frameworks[name.to_s.downcase]
frameworks[name.to_s.downcase].each do |mapper|
Modified: MacRuby/trunk/test-macruby/cases/hotcocoa/mappings_test.rb
===================================================================
--- MacRuby/trunk/test-macruby/cases/hotcocoa/mappings_test.rb 2009-01-20 20:09:22 UTC (rev 800)
+++ MacRuby/trunk/test-macruby/cases/hotcocoa/mappings_test.rb 2009-01-21 00:21:56 UTC (rev 801)
@@ -17,48 +17,60 @@
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)
+ it "should create a mapping to a class with a Class instance given to #map" do
+ Mappings.map(:klass => SampleClass) {}
+ assert_equal SampleClass, Mappings.mappings[:klass].control_class
end
- it "should create a mapping to a class with #map" do
-
- block = Proc.new do
- def alloc_with_options(options); options; end
+ it "should create a mapping to a class with a string name of the class given to #map" do
+ Mappings.map(:klass => 'SampleClass') {}
+ assert_equal SampleClass, Mappings.mappings[:klass].control_class
+ end
+
+ it "should create a mapping to a class with a symbol name of the class given to #map" do
+ Mappings.map(:klass => 'SampleClass') {}
+ assert_equal SampleClass, Mappings.mappings[:klass].control_class
+ end
+
+ it "should register the key, in the options given to #map, as the builder_method" do
+ Mappings.map(:klass => SampleClass) {}
+ assert_equal Mappings.mappings[:klass].builder_method, :klass
+ end
+
+ it "should use the block given to #map as the control_module body" do
+ Mappings.map(:klass => SampleClass) do
+ def a_control_module_instance_method; 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))
-
+ assert Mappings.mappings[:klass].control_module.
+ instance_methods.include?(:a_control_module_instance_method)
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
+ it "should create a mapping to a class in a framework with #map" do
+ mock = mocked_object
- # FIXME: This is not really nice. We test that the result exists, but not what it is.
- assert_equal Mappings.frameworks["anonymous"].size, 1
+ Mappings.map(:klass => 'ClassInTheFrameWork', :framework => 'TheFramework') do
+ mock.call!
+ end
+ Mappings.frameworks["theframework"].last.call
+
+ assert mock.called?
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)
+ it "should execute the framework's callbacks when #framework_loaded is called" do
+ mock1, mock2 = mocked_object, mocked_object
- assert_equal SampleClass.val, true
+ [mock1, mock2].each do |mock|
+ Mappings.on_framework('TheFramework') { mock.call! }
+ end
+ Mappings.framework_loaded('TheFramework')
+
+ [mock1, mock2].each { |mock| assert mock.called? }
end
- it "should raise nothing if there's no entry for the framework passed to #framework_loaded" do
+ it "should do nothing if the framework passed to #framework_loaded isn't registered" do
assert_nothing_raised do
- Mappings.framework_loaded(:FrameworkDoesNotExist)
+ Mappings.framework_loaded('FrameworkDoesNotExist')
end
end
@@ -66,4 +78,16 @@
flunk 'Pending.'
end
+ private
+
+ def mocked_object
+ mock = Object.new
+ def mock.call!
+ @called = true
+ end
+ def mock.called?
+ @called
+ end
+ mock
+ end
end
\ No newline at end of file
Modified: MacRuby/trunk/test-macruby/cases/objc_test.rb
===================================================================
--- MacRuby/trunk/test-macruby/cases/objc_test.rb 2009-01-20 20:09:22 UTC (rev 800)
+++ MacRuby/trunk/test-macruby/cases/objc_test.rb 2009-01-21 00:21:56 UTC (rev 801)
@@ -174,4 +174,4 @@
it "should instantiate with klass::alloc.init" do
assert_kind_of NSObject, NSObject.alloc.init
end
-end
+end
\ No newline at end of file
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090120/31dea321/attachment-0001.html>
More information about the macruby-changes
mailing list