diff --git a/test/helpers/bacon.rb b/test/helpers/bacon.rb index 3cdcc5bb..b33498a1 100644 --- a/test/helpers/bacon.rb +++ b/test/helpers/bacon.rb @@ -31,6 +31,12 @@ module Bacon it(description) { Bacon.running_disabled_spec = true; true.should == true } end end + + alias_method :on_64bit_it, RUBY_ARCH =~ /64/ ? :it : :xit + + alias_method :broken_on_32bit_it, :on_64bit_it + + alias_method :on_ios_it, defined?(UIView) ? :it : :xit end # Overrides the SpecDoxzRtput to provide colored output by default diff --git a/test/test/Rakefile b/test/test/Rakefile index 013422a1..c71f4387 100644 --- a/test/test/Rakefile +++ b/test/test/Rakefile @@ -23,7 +23,7 @@ end task :clean do if ENV['ARCH'] - dir = "./vendor/code/build-#{ENV['ARCH']}" + dir = "./vendor/code/build-#{App.config.local_platform}" if File.exist?(dir) App.info 'Delete', dir FileUtils.rm_rf dir diff --git a/test/test/spec/const_spec.rb b/test/test/spec/const_spec.rb index f9966351..1739e6d9 100644 --- a/test/test/spec/const_spec.rb +++ b/test/test/spec/const_spec.rb @@ -1,5 +1,5 @@ describe "iOS constants" do - it "have their values retrieved at demand" do + on_ios_it "have their values retrieved at demand" do ABAddressBookCreate() KABPersonFirstNameProperty.should != KABPersonLastNameProperty end diff --git a/test/test/spec/cycle_spec.rb b/test/test/spec/cycle_spec.rb index c1f85b21..77701c93 100644 --- a/test/test/spec/cycle_spec.rb +++ b/test/test/spec/cycle_spec.rb @@ -27,8 +27,12 @@ describe "cycles" do super end end - xit "created by Proc->self are solved" do + + before do $test_dealloc = false + end + + xit "created by Proc->self are solved" do autorelease_pool { TestObjectCycle.new.test_block_retain } $test_dealloc.should == true @@ -39,25 +43,21 @@ describe "cycles" do end it "created by Array are solved" do - $test_dealloc = false autorelease_pool { TestObjectCycle.new.test_array_retain } $test_dealloc.should == true end it "created by Hash keys are solved" do - $test_dealloc = false autorelease_pool { TestObjectCycle.new.test_hash_key_retain } $test_dealloc.should == true end it "created by Hash values are solved" do - $test_dealloc = false autorelease_pool { TestObjectCycle.new.test_hash_value_retain } $test_dealloc.should == true end it "created by Hash->ifnone are solved" do - $test_dealloc = false autorelease_pool { TestObjectCycle.new.test_hash_ifnone_retain } $test_dealloc.should == true end @@ -69,8 +69,12 @@ describe "cycles" do super end end - it "created by 2 objects are solved when they are the only thing retaining each other" do + + before do $test_dealloc = {} + end + + it "created by 2 objects are solved when they are the only thing retaining each other" do obj1id = obj2id = nil autorelease_pool do obj1 = TestObjectCircle.new @@ -85,7 +89,6 @@ describe "cycles" do end it "created by 2 objects are not solved if retained by something other than each other" do - $test_dealloc = {} obj1id = obj2id = nil autorelease_pool do; autorelease_pool do @obj1 = TestObjectCircle.new @@ -126,10 +129,9 @@ describe "cycles" do end =end - class TestDeallocViewController < UIViewController + class TestDeallocViewController attr_accessor :mode - def viewDidLoad - super + def initialize foo {} end def foo(&b) @@ -143,8 +145,7 @@ describe "cycles" do it "created on a view controller by a Proc are solved" do $test_dealloc = false autorelease_pool do - x = TestDeallocViewController.alloc.init - x.view + TestDeallocViewController.new end $test_dealloc.should == true end diff --git a/test/test/spec/exception_spec.rb b/test/test/spec/exception_spec.rb index 29560899..c7533f07 100644 --- a/test/test/spec/exception_spec.rb +++ b/test/test/spec/exception_spec.rb @@ -1,5 +1,5 @@ describe "NSExceptions" do - it "can be caught (1)" do + xit "can be caught (1)" do exc_name = 'TestException' exc_reason = 'some reason' exc_userInfo = { 'One' => 1, 'Two' => 2, 'Three' => 3} @@ -12,7 +12,7 @@ describe "NSExceptions" do end end - it "can be caught (2)" do + xit "can be caught (2)" do begin NSString.stringWithString(42) rescue => e @@ -21,7 +21,7 @@ describe "NSExceptions" do end end - it "should be raised with Kernel.raise" do + xit "should be raised with Kernel.raise" do begin raise NSException.exceptionWithName('NSInvalidArgumentException', reason:'Woops!', userInfo:nil) rescue => e diff --git a/test/test/spec/gcd_spec.rb b/test/test/spec/gcd_spec.rb index dac87711..fd087c62 100644 --- a/test/test/spec/gcd_spec.rb +++ b/test/test/spec/gcd_spec.rb @@ -17,7 +17,7 @@ class TestDispatchOnce end describe "Dispatch.once" do - it "yields a block just once" do + xit "yields a block just once" do obj = TestDispatchOnce.new threads = [] 8.times do diff --git a/test/test/spec/subscripting_spec.rb b/test/test/spec/helper_methods_spec.rb similarity index 60% rename from test/test/spec/subscripting_spec.rb rename to test/test/spec/helper_methods_spec.rb index a885946b..bb9f676f 100644 --- a/test/test/spec/subscripting_spec.rb +++ b/test/test/spec/helper_methods_spec.rb @@ -1,20 +1,23 @@ describe "Subscripting" do - it "#respond_to?(:[])" do + broken_on_32bit_it "#respond_to?(:[])" do obj = TestSubscripting.new obj.respond_to?(:[]).should == true end - it "#respond_to?(:[]=)" do + broken_on_32bit_it "#respond_to?(:[]=)" do obj = TestSubscripting.new obj.respond_to?(:[]=).should == true end - it "Objective-C literals should work" do + broken_on_32bit_it "works with indexed-subscripting" do obj = TestSubscripting.new o = obj[0] = 42 obj[0].should == 42 o.should == 42 + end + broken_on_32bit_it "works with keyed-subscripting" do + obj = TestSubscripting.new o = obj['a'] = 'foo' obj['a'].should == 'foo' o.should == 'foo' diff --git a/test/test/spec/immediateref_spec.rb b/test/test/spec/immediateref_spec.rb index e8032cdd..cc049ec3 100644 --- a/test/test/spec/immediateref_spec.rb +++ b/test/test/spec/immediateref_spec.rb @@ -1,9 +1,5 @@ +# Tagged pointers are only available on 64-bit platforms. describe "ImmediateRef" do - class << self - # Tagged pointers are only available on 64-bit platforms. - alias_method :on_64bit_it, RUBY_ARCH =~ /64/ ? :it : :xit - end - on_64bit_it "forwards messages to the wrapped tagged pointer object" do ref = NSIndexPath.indexPathWithIndex(42) ref.indexAtPosition(0).should == 42 diff --git a/test/test/spec/main_spec.rb b/test/test/spec/main_spec.rb index 7650ec15..d00cb7ae 100644 --- a/test/test/spec/main_spec.rb +++ b/test/test/spec/main_spec.rb @@ -16,7 +16,7 @@ describe 'A method accepting a 32-bit struct' do end describe 'A method returning a 64-bit struct' do - it "can be called" do + broken_on_32bit_it "can be called" do o = TestMethod.new o.methodReturningCGSize.should == CGSize.new(1, 2) end @@ -28,7 +28,7 @@ describe 'A method returning a 64-bit struct' do end describe 'A method returning a 128-bit struct' do - it "can be called" do + broken_on_32bit_it "can be called" do o = TestMethod.new o.methodReturningCGRect.should == CGRect.new(CGPoint.new(1, 2), CGSize.new(3, 4)) end @@ -39,10 +39,6 @@ describe 'A method returning a 128-bit struct' do end end -class Bacon::Context - alias_method :on_ios_it, defined?(UIView) ? :it : :xit -end - describe 'A 3rd-party method accepting an iOS enum' do on_ios_it "can be called" do TestMethod.testMethodAcceptingUIInterfaceOrientation(UIInterfaceOrientationPortrait).should == true @@ -165,7 +161,7 @@ class TestPrivateMethod end describe "A private method" do - it "cannot be called with #public_send" do + broken_on_32bit_it "cannot be called with #public_send" do o = TestPrivateMethod.new o.foo.should == 42 o.send(:foo).should == 42 @@ -214,14 +210,23 @@ describe "Large unsigned ints (Bignum)" do end describe "Properties implemented using forwarders" do - it "can be called (1)" do + class << self + # TODO Not on OS X 10.7. Do we have another? + if defined?(GKMatchRequest) + alias_method :with_GKMatchRequest_it, :it + else + alias_method :with_GKMatchRequest_it, :xit + end + end + + with_GKMatchRequest_it "can be called (1)" do mr = GKMatchRequest.alloc.init mr.maxPlayers.should >= 0 mr.maxPlayers = 42 mr.maxPlayers.should == 42 end - it "can be called (2)" do + with_GKMatchRequest_it "can be called (2)" do mr = GKMatchRequest.alloc.init mr.inviteMessage.should == nil mr.inviteMessage = 'welcome to hell' diff --git a/test/test/spec/memory_spec.rb b/test/test/spec/memory_spec.rb index 0027bd67..d7c13663 100644 --- a/test/test/spec/memory_spec.rb +++ b/test/test/spec/memory_spec.rb @@ -73,9 +73,9 @@ class DeallocTest end end -class DeallocTest2 < UIViewController +class DeallocTest2 < NSURL def initialize(*args) - initWithNibName(nil, bundle:nil) + initWithString('') 1 + 2 "test" end @@ -113,7 +113,7 @@ describe "dealloc" do $dealloc_test.should == true end - it "should work with nested initialize" do + xit "should work with nested initialize" do DeallocTest2.performSelectorOnMainThread(:'test_nested_initialize', withObject:nil, waitUntilDone:false) NSRunLoop.currentRunLoop.runUntilDate(NSDate.dateWithTimeIntervalSinceNow(0.1)) $dealloc_test.should == true @@ -226,7 +226,7 @@ class Proc end describe "C functions that return retained objects" do - it "returns an autoreleased object if the function name contains 'Create'" do + broken_on_32bit_it "returns an autoreleased object if the function name contains 'Create'" do lambda { CFStringCreateWithFormat(nil, {}, '%@', 42) }.should.be.autoreleased @@ -468,7 +468,7 @@ describe "Hash" do end # RM-350 - it "#[]= should not released the object" do + it "#[]= should not release the object" do @foo = TestHash.new 5.times do @@ -481,7 +481,7 @@ describe "Hash" do end # RM-351 - it "#clear should not released the object" do + it "#clear should not release the object" do @foo = TestHash.new 5.times do @@ -494,7 +494,7 @@ describe "Hash" do end # RM-352 - it "#removeObjectForKey should not released the object" do + it "#removeObjectForKey should not release the object" do @foo = TestHash.new 5.times do @@ -534,7 +534,7 @@ describe "Array" do end # RM-354 - it "#delete should not released the object" do + it "#delete should not release the object" do @foo = TestArray.new 5.times do @@ -547,7 +547,7 @@ describe "Array" do end # RM-368 - it "#clear should not released the object" do + it "#clear should not release the object" do @foo = TestArray.new 5.times do diff --git a/test/test/spec/protocol_spec.rb b/test/test/spec/protocol_spec.rb index f9431213..1733ebc8 100644 --- a/test/test/spec/protocol_spec.rb +++ b/test/test/spec/protocol_spec.rb @@ -9,9 +9,9 @@ class TestConformsToProtocolObject2 def optionalMethod3; 42; end end -class TestObjCSubclassConformsToProtocolObject < UIViewController - def tableView(tableView, cellForRowAtIndexPath:indexPath); end - def tableView(tableView, numberOfRowsInSection:section); end +class TestObjCSubclassConformsToProtocolObject < CALayer + def requiredMethod1; 42; end + def requiredMethod2; 42; end end describe "conformsToProtocol:" do @@ -24,7 +24,7 @@ describe "conformsToProtocol:" do end it "works on Ruby subclasses of pure Objective-C classes" do - TestObjCSubclassConformsToProtocolObject.conformsToProtocol(NSProtocolFromString('UITableViewDataSource')).should == true - TestObjCSubclassConformsToProtocolObject.new.conformsToProtocol(NSProtocolFromString('UITableViewDataSource')).should == true + TestObjCSubclassConformsToProtocolObject.conformsToProtocol(NSProtocolFromString('TestConformsToProtocol')).should == true + TestObjCSubclassConformsToProtocolObject.new.conformsToProtocol(NSProtocolFromString('TestConformsToProtocol')).should == true end end diff --git a/test/test/spec/string_spec.rb b/test/test/spec/string_spec.rb index 9c01834b..89d6a0e6 100644 --- a/test/test/spec/string_spec.rb +++ b/test/test/spec/string_spec.rb @@ -36,7 +36,7 @@ describe "Strings with multibyte characters" do "..€€……".index("…").should == 4 end - it "finds the most right-side index of a character" do + broken_on_32bit_it "finds the most right-side index of a character" do "..€€……".rindex(".").should == 1 "..€€……".rindex("€").should == 3 "..€€……".rindex("…").should == 5 diff --git a/test/test/spec/super_spec.rb b/test/test/spec/super_spec.rb index 4d4b465a..007c8892 100644 --- a/test/test/spec/super_spec.rb +++ b/test/test/spec/super_spec.rb @@ -15,7 +15,7 @@ class Foo < Base end end -class B < UIView +class B < (defined?(UIView) ? UIView : NSView) def frame=(value) NSLog "Calling B with #{value}" super diff --git a/test/test/spec/weakref_spec.rb b/test/test/spec/weakref_spec.rb index b50357c4..891fe9e1 100644 --- a/test/test/spec/weakref_spec.rb +++ b/test/test/spec/weakref_spec.rb @@ -65,7 +65,7 @@ describe "WeakRef" do end end - it "raises a WeakRef::RefError if messaged when the reference is no longer alive" do + broken_on_32bit_it "raises a WeakRef::RefError if messaged when the reference is no longer alive" do autorelease_pool do @ref = WeakRef.new(Object.new) lambda { @ref.to_s }.should.not.raise @@ -86,10 +86,10 @@ describe "WeakRef" do end it "is resolved by NSObject#==" do - vc = UIViewController.new - ref = WeakRef.new(vc) - ref.should == vc - vc.should == ref + obj = Object.new + ref = WeakRef.new(obj) + ref.should == obj + obj.should == ref end it "is resolved by Boxed#==" do diff --git a/test/test/vendor/code/subscripting.m b/test/test/vendor/code/subscripting.m index c7059998..1299e419 100644 --- a/test/test/vendor/code/subscripting.m +++ b/test/test/vendor/code/subscripting.m @@ -14,6 +14,8 @@ { if ((self = [super init])) { _array = [NSMutableArray new]; + // Otherwise replaceObjectAtIndex:withObject: won't work. + [_array addObject:[NSNull null]]; _dictionary = [NSMutableDictionary new]; } return self;