1 package org.codehaus.modello.plugins.xml;
2
3 import java.util.List;
4
5 import org.codehaus.modello.model.Model;
6 import org.codehaus.modello.model.ModelClass;
7 import org.codehaus.modello.model.ModelField;
8 import org.codehaus.modello.model.Version;
9 import org.codehaus.modello.plugins.xml.metadata.XmlFieldMetadata;
10 import org.junit.Test;
11
12 import static org.hamcrest.CoreMatchers.is;
13 import static org.hamcrest.MatcherAssert.assertThat;
14
15 public class XmlModelHelpersTest {
16 @Test
17 public void getFieldsForXml_defaultOrder() {
18 Model model = new Model();
19
20 ModelClass entityClass = new ModelClass(model, "Entity");
21 ModelField id = new ModelField(new ModelClass(null, "String"), "id");
22 id.addMetadata(new XmlFieldMetadata());
23 entityClass.addField(id);
24 model.addClass(entityClass);
25
26 ModelClass vehicleClass = new ModelClass(model, "Vehicle");
27 vehicleClass.setSuperClass("Entity");
28 ModelField brand = new ModelField(new ModelClass(null, "String"), "brand");
29 XmlFieldMetadata brandMetadata = new XmlFieldMetadata();
30 brandMetadata.setInsertParentFieldsUpTo("id");
31 brand.addMetadata(brandMetadata);
32 vehicleClass.addField(brand);
33 model.addClass(vehicleClass);
34
35 ModelClass carClass = new ModelClass(model, "Car");
36 carClass.setSuperClass("Vehicle");
37 ModelField modelName = new ModelField(new ModelClass(null, "String"), "modelName");
38 XmlFieldMetadata modeNameMetaData = new XmlFieldMetadata();
39 modeNameMetaData.setInsertParentFieldsUpTo("brand");
40 modelName.addMetadata(modeNameMetaData);
41
42 carClass.addField(modelName);
43 model.addClass(carClass);
44
45 List<ModelField> orderedFields = XmlModelHelpers.getFieldsForXml(carClass, new Version("0"));
46
47 assertThat(orderedFields.get(2).getName(), is("modelName"));
48 assertThat(orderedFields.get(1).getName(), is("brand"));
49 assertThat(orderedFields.get(0).getName(), is("id"));
50 }
51
52 @Test
53 public void getFieldsForXml_insertParentFieldsUpTo() {
54 Model model = new Model();
55
56 ModelClass entityClass = new ModelClass(model, "Entity");
57 ModelField id = new ModelField(new ModelClass(null, "String"), "id");
58 id.addMetadata(new XmlFieldMetadata());
59 entityClass.addField(id);
60 model.addClass(entityClass);
61
62 ModelClass vehicleClass = new ModelClass(model, "Vehicle");
63 vehicleClass.setSuperClass("Entity");
64 ModelField brand = new ModelField(new ModelClass(null, "String"), "brand");
65 XmlFieldMetadata brandMetadata = new XmlFieldMetadata();
66 brandMetadata.setInsertParentFieldsUpTo("id");
67 brand.addMetadata(brandMetadata);
68 vehicleClass.addField(brand);
69 model.addClass(vehicleClass);
70
71 ModelClass carClass = new ModelClass(model, "Car");
72 carClass.setSuperClass("Vehicle");
73 ModelField modelName = new ModelField(new ModelClass(null, "String"), "modelName");
74 XmlFieldMetadata modeNameMetaData = new XmlFieldMetadata();
75 modeNameMetaData.setInsertParentFieldsUpTo("brand");
76 modelName.addMetadata(modeNameMetaData);
77
78 carClass.addField(modelName);
79 model.addClass(carClass);
80
81 List<ModelField> orderedFields = XmlModelHelpers.getFieldsForXml(carClass, new Version("0"));
82 assertThat(orderedFields.get(0).getName(), is("id"));
83 assertThat(orderedFields.get(1).getName(), is("brand"));
84 assertThat(orderedFields.get(2).getName(), is("modelName"));
85 }
86 }