File path: /apache-ant-1.7.0/src/tests/junit/org/apache/tools/ant/IntrospectionHelperTest.java | File path: /apache-ant-1.7.0/src/tests/junit/org/apache/tools/ant/IntrospectionHelperTest.java | |||
Method name: void testGetAttributeMap()
|
Method name: void testGetNestedElementMap()
|
|||
Number of AST nodes: 13 | Number of AST nodes: 12 | |||
1 | Map attrMap = getExpectedAttributes();↵ | 1 | Map elemMap = getExpectedNestedElements();↵ | |
2 | Map actualMap = ih.getAttributeMap();↵ | 2 | Map actualMap = ih.getNestedElementMap();↵ | |
3 | for (Iterator i = actualMap.entrySet().iterator(); i.hasNext();) {↵ | 3 | for (Iterator i = actualMap.entrySet().iterator(); i.hasNext();) {↵ | |
4 | Map.Entry entry = (Map.Entry) i.next();↵ | 4 | Map.Entry entry = (Map.Entry) i.next();↵ | |
5 | String attrName = (String) entry.getKey();↵ | 5 | String elemName = (String) entry.getKey();↵ | |
6 | Class attrClass = (Class) attrMap.get(attrName);↵ | 6 | Class elemClass = (Class) elemMap.get(elemName);↵ | |
7 | assertNotNull("Support for " + attrName +↵ | 7 | assertNotNull("Support for " + elemName +↵ | |
8 | " in IntrospectionHelperTest?", attrClass);↵ | 8 | " in IntrospectionHelperTest?", elemClass);↵ | |
9 | assertEquals("Type of " + attrName, attrClass, entry.getValue());↵ | 9 | assertEquals("Type of " + elemName, elemClass, entry.getValue());↵ | |
10 | attrMap.remove(attrName);↵ | 10 | elemMap.remove(elemName);↵ | |
11 | }↵ | 11 | }↵ | |
12 | attrMap.remove("name");↵ | |||
13 | assertTrue("Found all", attrMap.isEmpty());↵ | 12 | assertTrue("Found all", elemMap.isEmpty());↵ | |
14 | // Check it's a read-only map.↵ | 13 | // Check it's a read-only map.↵ | |
15 | try {↵ | 14 | try {↵ | |
16 | actualMap.clear();↵ | 15 | actualMap.clear();↵ | |
17 | } catch (UnsupportedOperationException e) {} | 16 |
| |
See real code fragment | See real code fragment |
Number of common nesting structure subtrees | 1 |
Number of refactorable cases | 0 |
Number of non-refactorable cases | 1 |
Time elapsed for finding largest common nesting structure subtrees (ms) | 0.4 |
Clones location | Clones are declared in the same class |
Number of node comparisons | 76 |
Number of mapped statements | 12 |
Number of unmapped statements in the first code fragment | 1 |
Number of unmapped statements in the second code fragment | 0 |
Time elapsed for statement mapping (ms) | 23.4 |
Clone type | Type 3 |
ID | Statement | ID | Statement | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | Map attrMap = getExpectedAttributes(); |
| 1 | Map elemMap = getExpectedNestedElements(); | ||||||||||||||||
2 | Map actualMap = ih.getAttributeMap(); |
| 2 | Map actualMap = ih.getNestedElementMap(); | ||||||||||||||||
3 | for (Iterator i = actualMap.entrySet().iterator(); i.hasNext(); ) | 3 | for (Iterator i = actualMap.entrySet().iterator(); i.hasNext(); ) | |||||||||||||||||
4 | Map.Entry entry = (Map.Entry)i.next(); | 4 | Map.Entry entry = (Map.Entry)i.next(); | |||||||||||||||||
5 | String attrName = (String)entry.getKey(); |
| 5 | String elemName = (String)entry.getKey(); | ||||||||||||||||
6 | Class attrClass = (Class)attrMap.get(attrName); |
| 6 | Class elemClass = (Class)elemMap.get(elemName); | ||||||||||||||||
7 | assertNotNull("Support for " + attrName + " in IntrospectionHelperTest?", attrClass); |
| 7 | assertNotNull("Support for " + elemName + " in IntrospectionHelperTest?", elemClass); | ||||||||||||||||
8 | assertEquals("Type of " + attrName, attrClass, entry.getValue()); |
| 8 | assertEquals("Type of " + elemName, elemClass, entry.getValue()); | ||||||||||||||||
9 | attrMap.remove(attrName); |
| 9 | elemMap.remove(elemName); | ||||||||||||||||
10 | attrMap.remove("name"); |
| | |||||||||||||||||
11 | assertTrue("Found all", attrMap.isEmpty()); |
| 10 | assertTrue("Found all", elemMap.isEmpty()); | ||||||||||||||||
12 | try | 11 | try | |||||||||||||||||
13 | actualMap.clear(); | 12 | actualMap.clear(); |
Row | Violation |
---|---|
1 | Unmatched statement attrMap.remove("name"); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
2 | Clone fragment #1 returns variables attrMap , while Clone fragment #2 returns variables |