View Javadoc
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          // unexpected order...
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  }