1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.commons.digester3.plugins;
20
21 import static org.junit.Assert.*;
22
23 import java.util.List;
24
25 import org.apache.commons.digester3.Digester;
26 import org.apache.commons.digester3.plugins.PluginCreateRule;
27 import org.apache.commons.digester3.plugins.PluginDeclarationRule;
28 import org.apache.commons.digester3.plugins.PluginRules;
29 import org.junit.Test;
30
31
32
33
34
35
36 public class TestRecursion
37 {
38
39
40 @Test
41 public void testRecursiveRules()
42 throws Exception
43 {
44
45
46
47
48 Digester digester = new Digester();
49 PluginRules rc = new PluginRules();
50 digester.setRules( rc );
51
52 PluginDeclarationRule pdr = new PluginDeclarationRule();
53 digester.addRule( "*/plugin", pdr );
54
55 PluginCreateRule pcr = new PluginCreateRule( Widget.class );
56 digester.addRule( "root/widget", pcr );
57 digester.addSetNext( "root/widget", "addChild" );
58
59 Container root = new Container();
60 digester.push( root );
61
62 try
63 {
64 digester.parse( Utils.getInputStream( this, "test6.xml" ) );
65 }
66 catch ( Exception e )
67 {
68 throw e;
69 }
70
71 int nDescendants = countWidgets( root );
72 assertEquals( 10, nDescendants );
73 }
74
75 private int countWidgets( Container c )
76 {
77 List<Widget> l = c.getChildren();
78 int sum = 0;
79 for ( Widget w : l )
80 {
81 ++sum;
82 if ( w instanceof Container )
83 {
84 sum += countWidgets( (Container) w );
85 }
86 }
87 return sum;
88 }
89 }