More working tests.
[castle.git] / Components / Binder / Castle.Components.Binder.Tests / TreeBuilderTestCase.cs
blob077aae68969f99659ef983f7f31e1c49c736bcfc
1 // Copyright 2004-2008 Castle Project - http://www.castleproject.org/
2 //
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
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
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
17 using System;
18 using System.Collections.Specialized;
20 using NUnit.Framework;
22 [TestFixture]
23 public class TreeBuilderTestCase
25 [Test]
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);
55 [Test]
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);
84 [Test]
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);
119 [Test]
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);
164 [Test]
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);