[macruby-changes] [5161] MacRuby/trunk/spec/macruby

source_changes at macosforge.org source_changes at macosforge.org
Wed Jan 12 19:01:30 PST 2011


Revision: 5161
          http://trac.macosforge.org/projects/ruby/changeset/5161
Author:   lsansonetti at apple.com
Date:     2011-01-12 19:01:23 -0800 (Wed, 12 Jan 2011)
Log Message:
-----------
add specs for variadic methods

Modified Paths:
--------------
    MacRuby/trunk/spec/macruby/fixtures/method.bridgesupport
    MacRuby/trunk/spec/macruby/fixtures/method.m
    MacRuby/trunk/spec/macruby/language/objc_method_spec.rb

Modified: MacRuby/trunk/spec/macruby/fixtures/method.bridgesupport
===================================================================
--- MacRuby/trunk/spec/macruby/fixtures/method.bridgesupport	2011-01-13 02:13:28 UTC (rev 5160)
+++ MacRuby/trunk/spec/macruby/fixtures/method.bridgesupport	2011-01-13 03:01:23 UTC (rev 5161)
@@ -37,6 +37,8 @@
         <retval type='I'/>
       </arg>
     </method>
+    <method selector='methodAcceptingObjects:' variadic='true' sentinel='0'/>
+    <method selector='methodAcceptingObject:and:' variadic='true' sentinel='0'/>
   </class>
   <informal_protocol name='Foo'>
     <method type="i@:i" selector="informalProtocolMethod1:"/>

Modified: MacRuby/trunk/spec/macruby/fixtures/method.m
===================================================================
--- MacRuby/trunk/spec/macruby/fixtures/method.m	2011-01-13 02:13:28 UTC (rev 5160)
+++ MacRuby/trunk/spec/macruby/fixtures/method.m	2011-01-13 03:01:23 UTC (rev 5161)
@@ -808,6 +808,45 @@
     return _my_block(x, y);
 }
 
+- (NSArray *)methodAcceptingObjects:(id)obj1, ...
+{
+    NSMutableArray *ary = [NSMutableArray new];
+    [ary addObject:obj1];
+
+    va_list ar;
+    va_start(ar, obj1);
+    while (true) {
+        id val = va_arg(ar, id);
+	if (val == nil) {
+	    break;
+	}
+	[ary addObject:val];
+    }
+    va_end(ar);
+
+    return ary;
+}
+
+- (NSArray *)methodAcceptingObject:(id)obj1 and:obj2, ...
+{
+    NSMutableArray *ary = [NSMutableArray new];
+    [ary addObject:obj1];
+    [ary addObject:obj2];
+ 
+    va_list ar;
+    va_start(ar, obj2);
+    while (true) {
+        id val = va_arg(ar, id);
+	if (val == nil) {
+	    break;
+	}
+	[ary addObject:val];
+    }
+    va_end(ar);
+
+    return ary;
+}
+
 @end
 
 CFNumberRef functionMultiplicatingByTwoViaFctPtr(CFNumberRef nb, CFNumberRef (*multiplier)(CFNumberRef))

Modified: MacRuby/trunk/spec/macruby/language/objc_method_spec.rb
===================================================================
--- MacRuby/trunk/spec/macruby/language/objc_method_spec.rb	2011-01-13 02:13:28 UTC (rev 5160)
+++ MacRuby/trunk/spec/macruby/language/objc_method_spec.rb	2011-01-13 03:01:23 UTC (rev 5161)
@@ -472,6 +472,13 @@
     o.class.should == Method
     o.should == NSString.method(:hash)
   end
+
+  it "declared as variadic, can be messaged" do
+    @o.methodAcceptingObjects(1, nil).should == [1]
+    @o.methodAcceptingObjects(1, 2, 3, nil).should == [1, 2, 3]
+    @o.methodAcceptingObject(1, and:2, nil).should == [1, 2]
+    @o.methodAcceptingObject(1, and:2, 3, nil).should == [1, 2, 3]
+  end
 end
 
 describe "A pure MacRuby method" do
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20110112/9fa17767/attachment-0001.html>


More information about the macruby-changes mailing list