001 package serp.bytecode; 002 003 import junit.framework.*; 004 import junit.textui.*; 005 006 007 /** 008 * Tests the {@link Attributes} type. 009 * 010 * @author Abe White 011 */ 012 public class TestAttributes extends TestCase { 013 private Project _project = new Project(); 014 private Attributes _attrs = _project.loadClass("serp.Attrs"); 015 private Attributes _attrs2 = _project.loadClass("serp.Attrs2"); 016 017 public TestAttributes(String test) { 018 super(test); 019 } 020 021 /** 022 * Test getting attributes. 023 */ 024 public void testGetAttributes() { 025 assertEquals(0, _attrs.getAttributes().length); 026 assertNull(_attrs.getAttribute(Constants.ATTR_SYNTHETIC)); 027 028 Attribute attr1 = _attrs.addAttribute(Constants.ATTR_DEPRECATED); 029 Attribute attr2 = _attrs.addAttribute(Constants.ATTR_SYNTHETIC); 030 031 assertEquals(2, _attrs.getAttributes().length); 032 assertNull(_attrs.getAttribute(Constants.ATTR_CODE)); 033 assertTrue(attr1 == _attrs.getAttribute(Constants.ATTR_DEPRECATED)); 034 assertTrue(attr2 == _attrs.getAttribute(Constants.ATTR_SYNTHETIC)); 035 assertEquals(0, _attrs.getAttributes(Constants.ATTR_CODE).length); 036 assertEquals(1, _attrs.getAttributes(Constants.ATTR_DEPRECATED).length); 037 assertEquals(1, _attrs.getAttributes(Constants.ATTR_SYNTHETIC).length); 038 assertTrue(attr1 == _attrs.getAttributes(Constants.ATTR_DEPRECATED)[0]); 039 assertTrue(attr2 == _attrs.getAttributes(Constants.ATTR_SYNTHETIC)[0]); 040 041 Attribute attr3 = _attrs.addAttribute(Constants.ATTR_DEPRECATED); 042 assertEquals(3, _attrs.getAttributes().length); 043 assertEquals(2, _attrs.getAttributes(Constants.ATTR_DEPRECATED).length); 044 } 045 046 /** 047 * Test setting attributes. 048 */ 049 public void testSetAttributes() { 050 Attribute attr1 = _attrs.addAttribute(Constants.ATTR_DEPRECATED); 051 Attribute attr2 = _attrs.addAttribute(Constants.ATTR_SYNTHETIC); 052 053 _attrs2.setAttributes(_attrs.getAttributes()); 054 assertEquals(2, _attrs2.getAttributes().length); 055 assertEquals(Constants.ATTR_DEPRECATED, 056 _attrs2.getAttribute(Constants.ATTR_DEPRECATED).getName()); 057 assertEquals(Constants.ATTR_SYNTHETIC, 058 _attrs2.getAttribute(Constants.ATTR_SYNTHETIC).getName()); 059 assertTrue(attr1 != _attrs2.getAttribute(Constants.ATTR_DEPRECATED)); 060 assertTrue(attr2 != _attrs2.getAttribute(Constants.ATTR_SYNTHETIC)); 061 062 Attribute attr3 = _attrs.addAttribute(Constants.ATTR_SOURCE); 063 _attrs2.setAttributes(new Attribute[] { attr3 }); 064 assertEquals(1, _attrs2.getAttributes().length); 065 assertEquals(Constants.ATTR_SOURCE, _attrs2.getAttributes()[0]. 066 getName()); 067 } 068 069 /** 070 * Test adding attributs. 071 */ 072 public void testAddAttributes() { 073 SourceFile attr1 = (SourceFile) _attrs.addAttribute 074 (Constants.ATTR_SOURCE); 075 assertEquals(attr1.getName(), Constants.ATTR_SOURCE); 076 assertTrue(attr1 != _attrs.addAttribute(Constants.ATTR_SOURCE)); 077 assertEquals(2, _attrs.getAttributes(Constants.ATTR_SOURCE).length); 078 attr1.setFile("foo"); 079 080 SourceFile attr2 = (SourceFile) _attrs2.addAttribute(attr1); 081 assertTrue(attr1 != attr2); 082 assertEquals("foo", attr2.getFileName()); 083 } 084 085 /** 086 * Test clearing attributes. 087 */ 088 public void testClear() { 089 _attrs.clearAttributes(); 090 091 Attribute attr1 = _attrs.addAttribute(Constants.ATTR_SYNTHETIC); 092 Attribute attr2 = _attrs.addAttribute(Constants.ATTR_DEPRECATED); 093 094 assertTrue(attr1.isValid()); 095 assertTrue(attr2.isValid()); 096 097 assertEquals(2, _attrs.getAttributes().length); 098 _attrs.clearAttributes(); 099 assertEquals(0, _attrs.getAttributes().length); 100 101 // cleared classes should be invalid 102 assertTrue(!attr1.isValid()); 103 assertTrue(!attr2.isValid()); 104 } 105 106 /** 107 * Test removing a class. 108 */ 109 public void testRemoveAttribute() { 110 assertTrue(!_attrs.removeAttribute((String) null)); 111 assertTrue(!_attrs.removeAttribute((Attribute) null)); 112 assertTrue(!_attrs.removeAttribute(Constants.ATTR_SYNTHETIC)); 113 assertTrue(!_attrs.removeAttribute(_attrs2.addAttribute( 114 Constants.ATTR_SYNTHETIC))); 115 116 Attribute attr1 = _attrs.addAttribute(Constants.ATTR_SYNTHETIC); 117 Attribute attr2 = _attrs.addAttribute(Constants.ATTR_DEPRECATED); 118 assertTrue(attr1.isValid()); 119 assertTrue(attr2.isValid()); 120 assertEquals(2, _attrs.getAttributes().length); 121 122 assertTrue(_attrs.removeAttribute(attr1.getName())); 123 assertEquals(1, _attrs.getAttributes().length); 124 125 assertTrue(!_attrs.removeAttribute(_attrs2.addAttribute 126 (attr2.getName()))); 127 assertTrue(_attrs.removeAttribute(attr2)); 128 assertEquals(0, _attrs.getAttributes().length); 129 130 assertTrue(!attr1.isValid()); 131 assertTrue(!attr2.isValid()); 132 } 133 134 public static Test suite() { 135 return new TestSuite(TestAttributes.class); 136 } 137 138 public static void main(String[] args) { 139 TestRunner.run(suite()); 140 } 141 }