1   /*
2    * joey-gen and its relative products are published under the terms
3    * of the Apache Software License.
4    * 
5    * Created on 2004/08/16 17:59:04
6    */
7   package test.org.asyrinx.joey.gen.model.rdb.xml;
8   
9   import java.io.IOException;
10  
11  import junit.framework.TestCase;
12  
13  import org.asyrinx.brownie.core.io.sf.StreamFactory;
14  import org.asyrinx.brownie.core.io.sf.StreamFactoryFacade;
15  import org.asyrinx.brownie.core.lang.NumberUtils;
16  import org.asyrinx.joey.gen.command.rdb.StandardCommands;
17  import org.asyrinx.joey.gen.model.EnumerationEntry;
18  import org.asyrinx.joey.gen.model.command.ValidationError;
19  import org.asyrinx.joey.gen.model.rdb.Column;
20  import org.asyrinx.joey.gen.model.rdb.Database;
21  import org.asyrinx.joey.gen.model.rdb.Databases;
22  import org.asyrinx.joey.gen.model.rdb.RdbEnumeration;
23  import org.asyrinx.joey.gen.model.rdb.ForeignKey;
24  import org.asyrinx.joey.gen.model.rdb.ForeignKeyEntry;
25  import org.asyrinx.joey.gen.model.rdb.Index;
26  import org.asyrinx.joey.gen.model.rdb.IndexEntry;
27  import org.asyrinx.joey.gen.model.rdb.Table;
28  import org.asyrinx.joey.gen.model.rdb.Unique;
29  import org.asyrinx.joey.gen.model.rdb.xml.XmlToRdbImpl;
30  import org.xml.sax.SAXException;
31  
32  /***
33   * @author akima
34   */
35  public class XmlToRdbTest extends TestCase {
36  
37      public static void main(String[] args) {
38          junit.swingui.TestRunner.run(XmlToRdbTest.class);
39      }
40  
41      /*
42       * Class under test for Database load(InputStream)
43       */
44      public void testLoadInputStream() {
45          final StreamFactory sf = StreamFactoryFacade.newFacade().addRelativeClassResourceSF();
46          Databases databases;
47          try {
48              final XmlToRdbImpl xmlToRdb = new XmlToRdbImpl();
49              xmlToRdb.setDebug(true);
50              databases = xmlToRdb.load(sf.newInput("chiffon-schema.xml"));
51          } catch (IOException e) {
52              e.printStackTrace();
53              fail();
54              return;
55          } catch (SAXException e) {
56              e.printStackTrace();
57              fail();
58              return;
59          }
60          try {
61              new StandardCommands().execute(databases);
62          } catch (ValidationError e) {
63              e.printStackTrace();
64              fail();
65              return;
66          }
67          assertEquals(1, databases.getDatabases().size());
68          final Database database = databases.getDatabases().getDatabase(0);
69          //
70          assertEquals("sample1", database.getName());
71          assertEquals(3, database.getTables().size());
72          final Table table1 = database.getTables().getTable(0);
73          assertEquals("party", table1.getName());
74          assertEquals("パーティ", table1.getLabel());
75          assertEquals("パーティはグループ・個人などを表します。 詳しくはMartin Fowlerの「アナリシスパターン」を参照してください。", table1.getDescription());
76          assertEquals(2, table1.getColumns().size());
77          final Column column1_1 = table1.getColumns().getColumn(0);
78          final Column column1_2 = table1.getColumns().getColumn(1);
79          checkColumn(column1_1, "party_id", "ID", "BIGINT", 0, true, true);
80          checkColumn(column1_2, "name", "氏名", "VARCHAR", 50, true, false);
81          //assertEquals(1, table1.getIndexes().size());
82          //final Index index1_1 = table1.getIndexes().getIndex(0);
83          //assertEquals("i_party_name", index1_1.getName());
84          //assertEquals(1, index1_1.size());
85          //final IndexEntry entry1_1_1 = index1_1.getEntry(0);
86          //assertEquals("name", entry1_1_1.getName());
87          //assertEquals(column1_2, entry1_1_1.getColumn());
88          //
89          assertEquals(1, database.getEnumerations().size());
90          final RdbEnumeration enumeration = database.getEnumerations().getEnumeration(0);
91          assertEquals(3, enumeration.size());
92          final EnumerationEntry enumEntry1 = enumeration.getEntry(0);
93          final EnumerationEntry enumEntry2 = enumeration.getEntry(1);
94          final EnumerationEntry enumEntry3 = enumeration.getEntry(2);
95          assertEquals(1, NumberUtils.toInt(enumEntry1.getValue(), 0));
96          assertEquals(2, NumberUtils.toInt(enumEntry2.getValue(), 0));
97          assertEquals(3, NumberUtils.toInt(enumEntry3.getValue(), 0));
98          assertEquals("viewer", enumEntry1.getName());
99          assertEquals("editor", enumEntry2.getName());
100         assertEquals("admin", enumEntry3.getName());
101         //
102         final Table table2 = database.getTables().getTable(1);
103         assertEquals("member", table2.getName());
104         assertEquals("メンバー", table2.getLabel());
105         assertEquals(5, table2.getColumns().size());
106         final Column column2_1 = table2.getColumns().getColumn(0);
107         final Column column2_2 = table2.getColumns().getColumn(1);
108         final Column column2_3 = table2.getColumns().getColumn(2);
109         final Column column2_4 = table2.getColumns().getColumn(3);
110         final Column column2_5 = table2.getColumns().getColumn(4);
111         checkColumn(column2_1, "member_id", null, "BIGINT", 0, true, true);
112         checkColumn(column2_2, "member_type_id", null, "INTEGER", 0, true, false);
113         checkColumn(column2_3, "party_id", null, "BIGINT", 0, true, false);
114         checkColumn(column2_4, "login_name", null, "VARCHAR", 20, true, false);
115         checkColumn(column2_5, "password", null, "VARCHAR", 20, false, false);
116         assertEquals("MemberType", column2_2.getEnum());
117         assertEquals(enumeration, column2_2.getEnumeration());
118         //
119         assertEquals(1, table2.getForeignKeys().size());
120         final ForeignKey fk2_1 = table2.getForeignKeys().getForeignKey(0);
121         assertEquals("f_member_party", fk2_1.getName());
122         assertEquals("party", fk2_1.getForeign());
123         assertEquals(table1, fk2_1.getForeignTable());
124         assertEquals(1, fk2_1.size());
125         final ForeignKeyEntry fkEntry2_1_1 = fk2_1.getEntry(0);
126         assertEquals("party_id", fkEntry2_1_1.getLocal());
127         assertEquals("party_id", fkEntry2_1_1.getForeign());
128         assertEquals(column2_3, fkEntry2_1_1.getLocalColumn());
129         assertEquals(column1_1, fkEntry2_1_1.getForeignColumn());
130         //
131         assertEquals(1, table2.getUniques().size());
132         final Unique unique = (Unique) table2.getUniques().getIndex(0);
133         assertEquals("u_member_login_name", unique.getName());
134         assertEquals(1, unique.size());
135         final IndexEntry entry = unique.getEntry(0);
136         assertEquals("login_name", entry.getName());
137         assertEquals(column2_4, entry.getColumn());
138         //
139         final Table table3 = database.getTables().getTable(2);
140         assertEquals("special_member", table3.getName());
141         assertEquals("特殊メンバー", table3.getLabel());
142         assertEquals(3, table3.getColumns().size());
143         final Column column3_1 = table3.getColumns().getColumn(0);
144         final Column column3_2 = table3.getColumns().getColumn(1);
145         final Column column3_3 = table3.getColumns().getColumn(2);
146         checkColumn(column3_1, "special_member_id", null, "BIGINT", 0, true, true);
147         checkColumn(column3_2, "nickname", null, "VARCHAR", 10, true, false);
148         checkColumn(column3_3, "member_id", null, "BIGINT", 0, true, false);
149         //
150         assertEquals(1, table3.getForeignKeys().size());
151         final ForeignKey fk3_1 = table3.getForeignKeys().getForeignKey(0);
152         assertEquals("f_special_member_1", fk3_1.getName());
153         assertEquals("member", fk3_1.getForeign());
154         assertEquals(table2, fk3_1.getForeignTable());
155         assertEquals(1, fk2_1.size());
156     }
157 
158     private void checkColumn(Column col, String name, String label, String type, int size, boolean required,
159             boolean primaryKey) {
160         assertEquals(name, col.getName());
161         assertEquals(label, col.getLabel());
162         assertEquals(type, col.getType());
163         assertEquals(size, col.getSizeAsInt());
164         assertEquals(required, col.isRequired());
165         assertEquals(primaryKey, col.isPrimaryKey());
166     }
167 
168 }