1
2
3
4
5
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
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(5, table1.getColumns().size());
77 final Column column1_1 = table1.getColumns().getColumn(0);
78 final Column column1_2 = table1.getColumns().getColumn(1);
79 final Column column1_3 = table1.getColumns().getColumn(2);
80 final Column column1_4 = table1.getColumns().getColumn(3);
81 final Column column1_5 = table1.getColumns().getColumn(4);
82 checkColumn(column1_1, "party_id", "ID", "BIGINT", 0, true, true);
83 checkColumn(column1_2, "name", "氏名", "VARCHAR", 50, true, false);
84 checkColumn(column1_3, "deleted", "削除済", "INTEGER", 0, true, false);
85 checkColumn(column1_4, "created_date", "作成日時", "TIMESTAMP", 0, true, false);
86 checkColumn(column1_5, "updated_date", "更新日時", "TIMESTAMP", 0, true, false);
87
88
89
90
91
92
93
94
95 assertEquals(1, database.getEnumerations().size());
96 final RdbEnumeration enumeration = database.getEnumerations().getEnumeration(0);
97 assertEquals(3, enumeration.size());
98 final EnumerationEntry enumEntry1 = enumeration.getEntry(0);
99 final EnumerationEntry enumEntry2 = enumeration.getEntry(1);
100 final EnumerationEntry enumEntry3 = enumeration.getEntry(2);
101 assertEquals(1, NumberUtils.toInt(enumEntry1.getValue(), 0));
102 assertEquals(2, NumberUtils.toInt(enumEntry2.getValue(), 0));
103 assertEquals(3, NumberUtils.toInt(enumEntry3.getValue(), 0));
104 assertEquals("viewer", enumEntry1.getName());
105 assertEquals("editor", enumEntry2.getName());
106 assertEquals("admin", enumEntry3.getName());
107
108 final Table table2 = database.getTables().getTable(1);
109 assertEquals("member", table2.getName());
110 assertEquals("メンバー", table2.getLabel());
111 assertEquals(5, table2.getColumns().size());
112 final Column column2_1 = table2.getColumns().getColumn(0);
113 final Column column2_2 = table2.getColumns().getColumn(1);
114 final Column column2_3 = table2.getColumns().getColumn(2);
115 final Column column2_4 = table2.getColumns().getColumn(3);
116 final Column column2_5 = table2.getColumns().getColumn(4);
117 checkColumn(column2_1, "member_id", null, "BIGINT", 0, true, true);
118 checkColumn(column2_2, "member_type_id", null, "INTEGER", 0, true, false);
119 checkColumn(column2_3, "party_id", null, "BIGINT", 0, true, false);
120 checkColumn(column2_4, "login_name", null, "VARCHAR", 20, true, false);
121 checkColumn(column2_5, "password", null, "VARCHAR", 20, false, false);
122 assertEquals("MemberType", column2_2.getEnum());
123 assertEquals(enumeration, column2_2.getEnumeration());
124
125 assertEquals(1, table2.getForeignKeys().size());
126 final ForeignKey fk2_1 = table2.getForeignKeys().getForeignKey(0);
127 assertEquals("f_member_party", fk2_1.getName());
128 assertEquals("party", fk2_1.getForeign());
129 assertEquals(table1, fk2_1.getForeignTable());
130 assertEquals(1, fk2_1.size());
131 final ForeignKeyEntry fkEntry2_1_1 = fk2_1.getEntry(0);
132 assertEquals("party_id", fkEntry2_1_1.getLocal());
133 assertEquals("party_id", fkEntry2_1_1.getForeign());
134 assertEquals(column2_3, fkEntry2_1_1.getLocalColumn());
135 assertEquals(column1_1, fkEntry2_1_1.getForeignColumn());
136
137 assertEquals(1, table2.getUniques().size());
138 final Unique unique = (Unique) table2.getUniques().getIndex(0);
139 assertEquals("u_member_login_name", unique.getName());
140 assertEquals(1, unique.size());
141 final IndexEntry entry = unique.getEntry(0);
142 assertEquals("login_name", entry.getName());
143 assertEquals(column2_4, entry.getColumn());
144
145 final Table table3 = database.getTables().getTable(2);
146 assertEquals("special_member", table3.getName());
147 assertEquals("特殊メンバー", table3.getLabel());
148 assertEquals(3, table3.getColumns().size());
149 final Column column3_1 = table3.getColumns().getColumn(0);
150 final Column column3_2 = table3.getColumns().getColumn(1);
151 final Column column3_3 = table3.getColumns().getColumn(2);
152 checkColumn(column3_1, "special_member_id", null, "BIGINT", 0, true, true);
153 checkColumn(column3_2, "nickname", null, "VARCHAR", 10, true, false);
154 checkColumn(column3_3, "member_id", null, "BIGINT", 0, true, false);
155
156 assertEquals(1, table3.getForeignKeys().size());
157 final ForeignKey fk3_1 = table3.getForeignKeys().getForeignKey(0);
158 assertEquals("f_special_member_1", fk3_1.getName());
159 assertEquals("member", fk3_1.getForeign());
160 assertEquals(table2, fk3_1.getForeignTable());
161 assertEquals(1, fk2_1.size());
162 }
163
164 private void checkColumn(Column col, String name, String label, String type, int size, boolean required,
165 boolean primaryKey) {
166 assertEquals(name, col.getName());
167 assertEquals(label, col.getLabel());
168 assertEquals(type, col.getType());
169 assertEquals(size, col.getSizeAsInt());
170 assertEquals(required, col.isRequired());
171 assertEquals(primaryKey, col.isPrimaryKey());
172 }
173
174 }