1 // Copyright 2004-2008 Castle Project - http://www.castleproject.org/
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
7 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 namespace Castle
.Components
.Binder
.Tests
18 using System
.Collections
.Specialized
;
20 using NUnit
.Framework
;
23 public class TreeBuilderTestCase
26 public void SimpleEntries()
28 NameValueCollection nameValueColl
= new NameValueCollection();
30 nameValueColl
.Add("name", "hammett");
31 nameValueColl
.Add("age", "27");
32 nameValueColl
.Add("age", "28");
34 TreeBuilder builder
= new TreeBuilder();
35 CompositeNode root
= builder
.BuildSourceNode(nameValueColl
);
37 Assert
.IsNotNull(root
);
38 Assert
.AreEqual(2, root
.ChildrenCount
);
40 LeafNode entry
= (LeafNode
) root
.GetChildNode("name");
41 Assert
.IsNotNull(entry
);
42 Assert
.IsFalse(entry
.IsArray
);
43 Assert
.AreEqual("name", entry
.Name
);
44 Assert
.AreEqual(NodeType
.Leaf
, entry
.NodeType
);
45 Assert
.AreEqual("hammett", entry
.Value
);
47 entry
= (LeafNode
) root
.GetChildNode("age");
48 Assert
.IsNotNull(entry
);
49 Assert
.IsTrue(entry
.IsArray
);
50 Assert
.AreEqual("age", entry
.Name
);
51 Assert
.AreEqual(NodeType
.Leaf
, entry
.NodeType
);
52 Assert
.AreEqual(new String
[] { "27", "28" }
, entry
.Value
);
56 public void EntriesStartingWithDotShouldBeConsideredSimple()
58 NameValueCollection nameValueColl
= new NameValueCollection();
60 nameValueColl
.Add(".name", "hammett");
61 nameValueColl
.Add(".age", "27");
63 TreeBuilder builder
= new TreeBuilder();
64 CompositeNode root
= builder
.BuildSourceNode(nameValueColl
);
66 Assert
.IsNotNull(root
);
67 Assert
.AreEqual(2, root
.ChildrenCount
);
69 LeafNode entry
= (LeafNode
) root
.GetChildNode(".name");
70 Assert
.IsNotNull(entry
);
71 Assert
.IsFalse(entry
.IsArray
);
72 Assert
.AreEqual(".name", entry
.Name
);
73 Assert
.AreEqual(NodeType
.Leaf
, entry
.NodeType
);
74 Assert
.AreEqual("hammett", entry
.Value
);
76 entry
= (LeafNode
) root
.GetChildNode(".age");
77 Assert
.IsNotNull(entry
);
78 Assert
.IsFalse(entry
.IsArray
);
79 Assert
.AreEqual(".age", entry
.Name
);
80 Assert
.AreEqual(NodeType
.Leaf
, entry
.NodeType
);
81 Assert
.AreEqual("27", entry
.Value
);
85 public void CompositeEntries()
87 NameValueCollection nameValueColl
= new NameValueCollection();
89 nameValueColl
.Add("customer.name", "hammett");
90 nameValueColl
.Add("customer.age", "27");
91 nameValueColl
.Add("customer.age", "28");
93 TreeBuilder builder
= new TreeBuilder();
94 CompositeNode root
= builder
.BuildSourceNode(nameValueColl
);
96 Assert
.IsNotNull(root
);
97 Assert
.AreEqual(1, root
.ChildrenCount
);
99 CompositeNode node
= (CompositeNode
) root
.GetChildNode("customer");
100 Assert
.IsNotNull(node
);
101 Assert
.AreEqual("customer", node
.Name
);
102 Assert
.AreEqual(NodeType
.Composite
, node
.NodeType
);
104 LeafNode entry
= (LeafNode
) node
.GetChildNode("name");
105 Assert
.IsNotNull(entry
);
106 Assert
.IsFalse(entry
.IsArray
);
107 Assert
.AreEqual("name", entry
.Name
);
108 Assert
.AreEqual(NodeType
.Leaf
, entry
.NodeType
);
109 Assert
.AreEqual("hammett", entry
.Value
);
111 entry
= (LeafNode
) node
.GetChildNode("age");
112 Assert
.IsNotNull(entry
);
113 Assert
.IsTrue(entry
.IsArray
);
114 Assert
.AreEqual("age", entry
.Name
);
115 Assert
.AreEqual(NodeType
.Leaf
, entry
.NodeType
);
116 Assert
.AreEqual(new String
[] { "27", "28" }
, entry
.Value
);
120 public void IndexedEntries()
122 NameValueCollection nameValueColl
= new NameValueCollection();
124 nameValueColl
.Add("customer[0].name", "hammett");
125 nameValueColl
.Add("customer[0].age", "27");
126 nameValueColl
.Add("customer[0].age", "28");
127 nameValueColl
.Add("customer[1].name", "hamilton");
128 nameValueColl
.Add("customer[1].age", "28");
129 nameValueColl
.Add("customer[1].age", "29");
131 TreeBuilder builder
= new TreeBuilder();
132 CompositeNode root
= builder
.BuildSourceNode(nameValueColl
);
134 Assert
.IsNotNull(root
);
135 Assert
.AreEqual(1, root
.ChildrenCount
);
137 IndexedNode indexNode
= (IndexedNode
) root
.GetChildNode("customer");
138 Assert
.IsNotNull(indexNode
);
139 Assert
.AreEqual(2, indexNode
.ChildrenCount
);
141 CompositeNode node
= (CompositeNode
) indexNode
.GetChildNode("0");
142 Assert
.IsNotNull(node
);
143 Assert
.AreEqual(2, node
.ChildrenCount
);
145 LeafNode entry
= (LeafNode
) node
.GetChildNode("name");
146 Assert
.IsNotNull(entry
);
147 Assert
.IsFalse(entry
.IsArray
);
148 Assert
.AreEqual("name", entry
.Name
);
149 Assert
.AreEqual(NodeType
.Leaf
, entry
.NodeType
);
150 Assert
.AreEqual("hammett", entry
.Value
);
152 node
= (CompositeNode
) indexNode
.GetChildNode("1");
153 Assert
.IsNotNull(node
);
154 Assert
.AreEqual(2, node
.ChildrenCount
);
156 entry
= (LeafNode
) node
.GetChildNode("name");
157 Assert
.IsNotNull(entry
);
158 Assert
.IsFalse(entry
.IsArray
);
159 Assert
.AreEqual("name", entry
.Name
);
160 Assert
.AreEqual(NodeType
.Leaf
, entry
.NodeType
);
161 Assert
.AreEqual("hamilton", entry
.Value
);
165 public void IndexedFlatEntries()
167 NameValueCollection nameValueColl
= new NameValueCollection();
169 nameValueColl
.Add("emails[0]", "hammett@gmail.com");
170 nameValueColl
.Add("emails[1]", "hammett@apache.org");
171 nameValueColl
.Add("emails[2]", "hammett@uol.com.br");
173 TreeBuilder builder
= new TreeBuilder();
174 CompositeNode root
= builder
.BuildSourceNode(nameValueColl
);
176 Assert
.IsNotNull(root
);
177 Assert
.AreEqual(1, root
.ChildrenCount
);
179 IndexedNode indexNode
= (IndexedNode
) root
.GetChildNode("emails");
180 Assert
.IsNotNull(indexNode
);
181 Assert
.AreEqual(3, indexNode
.ChildrenCount
);
183 Node
[] entries
= indexNode
.ChildNodes
;
184 Assert
.IsNotNull(entries
);
185 Assert
.AreEqual(3, entries
.Length
);
187 Assert
.AreEqual("hammett@gmail.com", ((LeafNode
)entries
[0]).Value
);
188 Assert
.AreEqual("hammett@apache.org", ((LeafNode
)entries
[1]).Value
);
189 Assert
.AreEqual("hammett@uol.com.br", ((LeafNode
)entries
[2]).Value
);
192 [Test
, ExpectedException(typeof(BindingException
), ExpectedMessage
= "Attempt to create or obtain a composite node named Process, but a node with the same exists with the type Leaf")]
193 public void RepeatedNamesForNodes()
195 NameValueCollection nameValueColl
= new NameValueCollection();
197 nameValueColl
.Add("profile.Process", "test");
198 nameValueColl
.Add("profile.Process.Id", "1");
200 TreeBuilder builder
= new TreeBuilder();
201 CompositeNode root
= builder
.BuildSourceNode(nameValueColl
);