1 30 package org.jruby.test; 31 32 import java.util.ArrayList ; 33 import java.util.Iterator ; 34 import java.util.List ; 35 36 import junit.framework.TestCase; 37 38 import org.jruby.Ruby; 39 import org.jruby.RubyString; 40 import org.jruby.runtime.ObjectSpace; 41 import org.jruby.runtime.builtin.IRubyObject; 42 43 46 public class TestObjectSpace extends TestCase { 47 48 private Ruby runtime; 49 private ObjectSpace target; 50 51 public TestObjectSpace(String name) { 52 super(name); 53 } 54 55 public void setUp() throws Exception { 56 super.setUp(); 57 runtime = Ruby.getDefaultInstance(); 58 target = new ObjectSpace(); 59 } 60 61 public void testIdentities() { 62 RubyString o1 = runtime.newString("hey"); 63 RubyString o2 = runtime.newString("ho"); 64 65 long id1 = target.idOf(o1); 66 long id2 = target.idOf(o2); 67 68 assertEquals("id of normal objects must be even", 0, id1 % 2); 69 assertEquals("id of normal objects must be even", 0, id2 % 2); 70 assertTrue("normal ids must be bigger than reserved values", id1 > 4); 71 assertTrue("normal ids must be bigger than reserved values", id2 > 4); 72 73 assertSame(o1, target.id2ref(id1)); 74 assertSame(o2, target.id2ref(id2)); 75 assertNull(target.id2ref(4711)); 76 } 77 78 public void testObjectSpace() { 79 IRubyObject o1 = runtime.newFixnum(10); 80 IRubyObject o2 = runtime.newFixnum(20); 81 IRubyObject o3 = runtime.newFixnum(30); 82 IRubyObject o4 = runtime.newString("hello"); 83 84 target.add(o1); 85 target.add(o2); 86 target.add(o3); 87 target.add(o4); 88 89 List storedFixnums = new ArrayList (3); 90 storedFixnums.add(o1); 91 storedFixnums.add(o2); 92 storedFixnums.add(o3); 93 94 Iterator strings = target.iterator(runtime.getString()); 95 assertSame(o4, strings.next()); 96 assertNull(strings.next()); 97 98 Iterator numerics = target.iterator(runtime.getClass("Numeric")); 99 for (int i = 0; i < 3; i++) { 100 Object item = numerics.next(); 101 assertTrue(storedFixnums.contains(item)); 102 } 103 assertNull(numerics.next()); 104 } 105 } 106 | Popular Tags |