1- using NUnit . Framework ;
1+ using System . Collections . Generic ;
2+ using System . Dynamic ;
3+ using NUnit . Framework ;
24using SolidifyProject . Engine . Infrastructure . Models ;
35
46namespace SolidifyProject . Engine . Test . Unit . Infrastructure . Models
@@ -49,8 +51,8 @@ public void ParseCustomAttributesTest()
4951 } ;
5052
5153 var actualModel = new PageModel { ContentRaw = @"
52- custom .image: logo.png
53- custom .description: this is description
54+ Custom .image: logo.png
55+ Custom .description: this is description
5456 custom.root.SomeThing: bla-bla-bla
5557 custom.l1.l2.l3.l4: hello
5658 ---
@@ -63,5 +65,167 @@ public void ParseCustomAttributesTest()
6365 Assert . AreEqual ( expectedModel . Custom . root . SomeThing , actualModel . Custom . root . SomeThing ) ;
6466 Assert . AreEqual ( expectedModel . Custom . l1 . l2 . l3 . l4 , actualModel . Custom . l1 . l2 . l3 . l4 ) ;
6567 }
68+
69+ [ Test ]
70+ public void ParseModelSimpleTest ( )
71+ {
72+ ICollection < KeyValuePair < string , object > > data = new ExpandoObject ( ) ;
73+ data . Add ( new KeyValuePair < string , object > ( "goods" , new List < string >
74+ {
75+ "apple" ,
76+ "peach" ,
77+ "mango"
78+ } ) ) ;
79+ data . Add ( new KeyValuePair < string , object > ( "banner" , new
80+ {
81+ url = "http://mydomain.com/banner.png"
82+ } ) ) ;
83+ data . Add ( new KeyValuePair < string , object > ( "other" , new { } ) ) ;
84+
85+ var actualModel = new PageModel { ContentRaw = @"
86+ Model: Data
87+ ---
88+ " } ;
89+
90+ actualModel . Parse ( ) ;
91+ actualModel . MapDataToModel ( ( ExpandoObject ) data ) ;
92+
93+ Assert . AreEqual ( ( ( dynamic ) data ) . goods . Count , actualModel . Model . goods . Count ) ;
94+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 0 ] , actualModel . Model . goods [ 0 ] ) ;
95+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 1 ] , actualModel . Model . goods [ 1 ] ) ;
96+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 2 ] , actualModel . Model . goods [ 2 ] ) ;
97+
98+ Assert . AreEqual ( ( ( dynamic ) data ) . banner . url , actualModel . Model . banner . url ) ;
99+ }
100+
101+ [ Test ]
102+ public void ParseModelSingleItemTest ( )
103+ {
104+ ICollection < KeyValuePair < string , object > > data = new ExpandoObject ( ) ;
105+ data . Add ( new KeyValuePair < string , object > ( "goods" , new List < string >
106+ {
107+ "apple" ,
108+ "peach" ,
109+ "mango"
110+ } ) ) ;
111+ data . Add ( new KeyValuePair < string , object > ( "banner" , new
112+ {
113+ url = "http://mydomain.com/banner.png"
114+ } ) ) ;
115+ data . Add ( new KeyValuePair < string , object > ( "other" , new { } ) ) ;
116+
117+ var actualModel = new PageModel { ContentRaw = @"
118+ Model.goods: Data.goods
119+ ---
120+ " } ;
121+
122+ actualModel . Parse ( ) ;
123+ actualModel . MapDataToModel ( ( ExpandoObject ) data ) ;
124+
125+ Assert . AreEqual ( ( ( dynamic ) data ) . goods . Count , actualModel . Model . goods . Count ) ;
126+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 0 ] , actualModel . Model . goods [ 0 ] ) ;
127+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 1 ] , actualModel . Model . goods [ 1 ] ) ;
128+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 2 ] , actualModel . Model . goods [ 2 ] ) ;
129+ }
130+
131+ [ Test ]
132+ public void ParseModelMultipleItemsTest ( )
133+ {
134+ ICollection < KeyValuePair < string , object > > data = new ExpandoObject ( ) ;
135+ data . Add ( new KeyValuePair < string , object > ( "goods" , new List < string >
136+ {
137+ "apple" ,
138+ "peach" ,
139+ "mango"
140+ } ) ) ;
141+ data . Add ( new KeyValuePair < string , object > ( "banner" , new
142+ {
143+ url = "http://mydomain.com/banner.png"
144+ } ) ) ;
145+ data . Add ( new KeyValuePair < string , object > ( "other" , new { } ) ) ;
146+
147+ var actualModel = new PageModel { ContentRaw = @"
148+ Model.goods: Data.goods
149+ model.bannerUrl: Data.banner.url
150+ ---
151+ " } ;
152+
153+ actualModel . Parse ( ) ;
154+ actualModel . MapDataToModel ( ( ExpandoObject ) data ) ;
155+
156+ Assert . AreEqual ( ( ( dynamic ) data ) . goods . Count , actualModel . Model . goods . Count ) ;
157+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 0 ] , actualModel . Model . goods [ 0 ] ) ;
158+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 1 ] , actualModel . Model . goods [ 1 ] ) ;
159+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 2 ] , actualModel . Model . goods [ 2 ] ) ;
160+ Assert . AreEqual ( ( ( dynamic ) data ) . banner . url , actualModel . Model . bannerUrl ) ;
161+ }
162+
163+ [ Test ]
164+ public void ParseModelMultipleDuplicateItemsTest ( )
165+ {
166+ ICollection < KeyValuePair < string , object > > data = new ExpandoObject ( ) ;
167+ data . Add ( new KeyValuePair < string , object > ( "goods" , new List < string >
168+ {
169+ "apple" ,
170+ "peach" ,
171+ "mango"
172+ } ) ) ;
173+ data . Add ( new KeyValuePair < string , object > ( "banner" , new
174+ {
175+ url = "http://mydomain.com/banner.png"
176+ } ) ) ;
177+ data . Add ( new KeyValuePair < string , object > ( "other" , new { } ) ) ;
178+
179+ var actualModel = new PageModel { ContentRaw = @"
180+ Model.goods1: Data.goods
181+ model.goods2: Data.goods
182+ ---
183+ " } ;
184+
185+ actualModel . Parse ( ) ;
186+ actualModel . MapDataToModel ( ( ExpandoObject ) data ) ;
187+
188+ Assert . AreEqual ( ( ( dynamic ) data ) . goods . Count , actualModel . Model . goods1 . Count ) ;
189+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 0 ] , actualModel . Model . goods1 [ 0 ] ) ;
190+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 1 ] , actualModel . Model . goods1 [ 1 ] ) ;
191+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 2 ] , actualModel . Model . goods1 [ 2 ] ) ;
192+
193+ Assert . AreEqual ( ( ( dynamic ) data ) . goods . Count , actualModel . Model . goods2 . Count ) ;
194+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 0 ] , actualModel . Model . goods2 [ 0 ] ) ;
195+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 1 ] , actualModel . Model . goods2 [ 1 ] ) ;
196+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 2 ] , actualModel . Model . goods2 [ 2 ] ) ;
197+ }
198+
199+ [ Test ]
200+ public void ParseModelComplexMultipleItemsTest ( )
201+ {
202+ ICollection < KeyValuePair < string , object > > data = new ExpandoObject ( ) ;
203+ data . Add ( new KeyValuePair < string , object > ( "goods" , new List < string >
204+ {
205+ "apple" ,
206+ "peach" ,
207+ "mango"
208+ } ) ) ;
209+ data . Add ( new KeyValuePair < string , object > ( "banner" , new
210+ {
211+ url = "http://mydomain.com/banner.png"
212+ } ) ) ;
213+ data . Add ( new KeyValuePair < string , object > ( "other" , new { } ) ) ;
214+
215+ var actualModel = new PageModel { ContentRaw = @"
216+ Model.category.goods: Data.goods
217+ model.bannerUrl: Data.banner.url
218+ ---
219+ " } ;
220+
221+ actualModel . Parse ( ) ;
222+ actualModel . MapDataToModel ( ( ExpandoObject ) data ) ;
223+
224+ Assert . AreEqual ( ( ( dynamic ) data ) . goods . Count , actualModel . Model . category . goods . Count ) ;
225+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 0 ] , actualModel . Model . category . goods [ 0 ] ) ;
226+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 1 ] , actualModel . Model . category . goods [ 1 ] ) ;
227+ Assert . AreEqual ( ( ( dynamic ) data ) . goods [ 2 ] , actualModel . Model . category . goods [ 2 ] ) ;
228+ Assert . AreEqual ( ( ( dynamic ) data ) . banner . url , actualModel . Model . bannerUrl ) ;
229+ }
66230 }
67231}
0 commit comments