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    }