svnno****@sourc*****
svnno****@sourc*****
2008年 11月 13日 (木) 00:51:33 JST
Revision: 2136 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=jiemamy&view=rev&rev=2136 Author: daisuke_m Date: 2008-11-13 00:51:32 +0900 (Thu, 13 Nov 2008) Log Message: ----------- [CORE-81] RootModelImplTest拡充。 Modified Paths: -------------- artemis/trunk/org.jiemamy.core/.classpath artemis/trunk/org.jiemamy.core/pom.xml artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/AbstractModel.java artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/connection/AbstractConnectionModelImpl.java artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/connection/AbstractRelationModelImpl.java artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/connection/ForeignKeyModelImpl.java artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/utils/processor/root/GetConnectionsProcessor.java artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/core/model/RootModelImplTest.java Added Paths: ----------- artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/core/model/EmptyProxyModel.java -------------- next part -------------- Modified: artemis/trunk/org.jiemamy.core/.classpath =================================================================== --- artemis/trunk/org.jiemamy.core/.classpath 2008-11-11 13:45:38 UTC (rev 2135) +++ artemis/trunk/org.jiemamy.core/.classpath 2008-11-12 15:51:32 UTC (rev 2136) @@ -24,6 +24,7 @@ <classpathentry exported="true" kind="lib" path="lib/commons-beanutils-1.7.0.jar" sourcepath="lib/sources/commons-beanutils-1.7.0-sources.jar"/> <classpathentry exported="true" kind="lib" path="lib/collections-generic-4.01.jar" sourcepath="lib/sources/collections-generic-4.01-sources.jar"/> <classpathentry exported="true" kind="lib" path="lib/aopalliance-1.0.jar" sourcepath="lib/sources/aopalliance-1.0-sources.jar"/> + <classpathentry kind="lib" path="lib/jmockit-0.94.jar"/> <classpathentry combineaccessrules="false" kind="src" path="/org.jiemamy.irenka"/> <classpathentry kind="output" path="target/classes"/> </classpath> Modified: artemis/trunk/org.jiemamy.core/pom.xml =================================================================== --- artemis/trunk/org.jiemamy.core/pom.xml 2008-11-11 13:45:38 UTC (rev 2135) +++ artemis/trunk/org.jiemamy.core/pom.xml 2008-11-12 15:51:32 UTC (rev 2136) @@ -166,6 +166,18 @@ </plugin> </plugins> </build> + <repositories> + <repository> + <id>coderepos</id> + <name>CodeRepos Maven2 Repository</name> + <url>http://svn.coderepos.org/share/lang/java/misc/maven2repo</url> + </repository> + <repository> + <id>maven.seasar.org</id> + <name>The Seasar Foundation Maven2 Repository</name> + <url>http://maven.seasar.org/maven2</url> + </repository> + </repositories> <dependencies> <dependency> <groupId>junit</groupId> @@ -179,6 +191,12 @@ <version>1.4</version> <scope>test</scope> </dependency> + <dependency> + <groupId>net.java.dev.jmockit</groupId> + <artifactId>jmockit</artifactId> + <version>0.94</version> + <scope>test</scope> + </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> Modified: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/AbstractModel.java =================================================================== --- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/AbstractModel.java 2008-11-11 13:45:38 UTC (rev 2135) +++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/AbstractModel.java 2008-11-12 15:51:32 UTC (rev 2136) @@ -17,6 +17,7 @@ import java.util.List; import java.util.UUID; +import org.apache.commons.collections15.list.UnmodifiableList; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import org.seasar.framework.container.annotation.tiger.Binding; @@ -107,7 +108,7 @@ * {@inheritDoc} */ public List<Object> getAdapters() { - return adapters; + return UnmodifiableList.decorate(adapters); } /** Modified: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/connection/AbstractConnectionModelImpl.java =================================================================== --- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/connection/AbstractConnectionModelImpl.java 2008-11-11 13:45:38 UTC (rev 2135) +++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/connection/AbstractConnectionModelImpl.java 2008-11-12 15:51:32 UTC (rev 2136) @@ -19,6 +19,7 @@ package org.jiemamy.core.model.connection; import org.jiemamy.core.model.AbstractModel; +import org.jiemamy.core.utils.ValueCheckUtil; import org.jiemamy.core.utils.processor.connection.IsCyclicProcessor; import org.jiemamy.spec.accessor.connection.ConnectionModelAccessor; import org.jiemamy.spec.model.connection.AbstractConnectionModel; @@ -40,17 +41,6 @@ /** - * コンストラクタ。 - * @param source 接続元ノード - * @param target 接続先ノード - * @category instance creation - */ - public AbstractConnectionModelImpl(AbstractNodeModel source, AbstractNodeModel target) { - this.source = source; - this.target = target; - } - - /** * {@inheritDoc} */ public AbstractNodeModel getSource() { @@ -75,6 +65,8 @@ * {@inheritDoc} */ public void setSource(AbstractNodeModel source) { + ValueCheckUtil.assertNotNull(source); + ValueCheckUtil.assertInitialized(source); this.source = source; } @@ -82,6 +74,8 @@ * {@inheritDoc} */ public void setTarget(AbstractNodeModel target) { + ValueCheckUtil.assertNotNull(target); + ValueCheckUtil.assertInitialized(target); this.target = target; } Modified: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/connection/AbstractRelationModelImpl.java =================================================================== --- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/connection/AbstractRelationModelImpl.java 2008-11-11 13:45:38 UTC (rev 2135) +++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/connection/AbstractRelationModelImpl.java 2008-11-12 15:51:32 UTC (rev 2136) @@ -20,7 +20,6 @@ import org.jiemamy.spec.accessor.connection.RelationModelAccessor; import org.jiemamy.spec.model.connection.AbstractRelationModel; -import org.jiemamy.spec.model.node.AbstractEntityModel; /** * コネクション(FKと継承)のAbstractモデル。 @@ -34,16 +33,6 @@ /** - * コンストラクタ。 - * @param source 接続元モデル - * @param target 接続先モデル - * @category instance creation - */ - public AbstractRelationModelImpl(AbstractEntityModel source, AbstractEntityModel target) { - super(source, target); - } - - /** * {@inheritDoc} */ public boolean isDisabled() { Modified: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/connection/ForeignKeyModelImpl.java =================================================================== --- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/connection/ForeignKeyModelImpl.java 2008-11-11 13:45:38 UTC (rev 2135) +++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/model/connection/ForeignKeyModelImpl.java 2008-11-12 15:51:32 UTC (rev 2136) @@ -29,7 +29,6 @@ import org.jiemamy.spec.model.RootModel; import org.jiemamy.spec.model.connection.ForeignKeyMapping; import org.jiemamy.spec.model.connection.ForeignKeyModel; -import org.jiemamy.spec.model.node.AbstractEntityModel; import org.jiemamy.spec.model.node.TableModel; /** @@ -83,29 +82,6 @@ /** - * コンストラクタ。 - * @category instance creation - */ - public ForeignKeyModelImpl() { - super(null, null); - } - - /** - * コンストラクタ。 - * @param rootModel {@link RootModel} - * @param source 接続元(被制約)テーブル - * @param target 接続先(参照)テーブル - * @param createColumn 参照先カラムと同名のカラムを生成して、そのカラムにマッピングする場合は<tt>true</tt> - * 既存のカラムにマッピングする場合は<tt>false</tt>を渡す。 - * @category instance creation - */ - public ForeignKeyModelImpl(RootModel rootModel, AbstractEntityModel source, AbstractEntityModel target, - boolean createColumn) { - super(source, target); - createMappings(rootModel, createColumn); - } - - /** * {@inheritDoc} */ public void createMappings(RootModel rootModel, boolean createColumn) { Modified: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/utils/processor/root/GetConnectionsProcessor.java =================================================================== --- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/utils/processor/root/GetConnectionsProcessor.java 2008-11-11 13:45:38 UTC (rev 2135) +++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/core/utils/processor/root/GetConnectionsProcessor.java 2008-11-12 15:51:32 UTC (rev 2136) @@ -16,6 +16,7 @@ import java.util.List; +import org.apache.commons.collections15.list.UnmodifiableList; import org.seasar.framework.util.tiger.CollectionsUtil; import org.jiemamy.spec.Processor; @@ -65,7 +66,7 @@ } } } - return connections; + return UnmodifiableList.decorate(connections); } } Added: artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/core/model/EmptyProxyModel.java =================================================================== --- artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/core/model/EmptyProxyModel.java (rev 0) +++ artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/core/model/EmptyProxyModel.java 2008-11-12 15:51:32 UTC (rev 2136) @@ -0,0 +1,44 @@ +/* + * Copyright 2007-2008 MIYAMOTO Daisuke, jiemamy.org and the Others. + * Created on 2008/11/13 + * + * This file is part of Jiemamy. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ +package org.jiemamy.core.model; + +import mockit.Mockit; + +import org.jiemamy.spec.model.DomainModel; +import org.jiemamy.spec.model.connection.AbstractConnectionModel; +import org.jiemamy.spec.model.dataset.InsertDataSetModel; +import org.jiemamy.spec.model.datatype.DataType; +import org.jiemamy.spec.model.node.AbstractNodeModel; + +/** + * TODO for daisuke + * @author daisuke + */ +public final class EmptyProxyModel { + + public static final DataType DATA_TYPE = Mockit.newEmptyProxy(DataType.class); + + public static final DomainModel DOMAIN = Mockit.newEmptyProxy(DomainModel.class); + + public static final AbstractNodeModel NODE = Mockit.newEmptyProxy(AbstractNodeModel.class); + + public static final AbstractConnectionModel CONNECTION = Mockit.newEmptyProxy(AbstractConnectionModel.class); + + public static final InsertDataSetModel INSERT_DATA_SET = Mockit.newEmptyProxy(InsertDataSetModel.class); +} Property changes on: artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/core/model/EmptyProxyModel.java ___________________________________________________________________ Name: svn:mime-type + text/plain Modified: artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/core/model/RootModelImplTest.java =================================================================== --- artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/core/model/RootModelImplTest.java 2008-11-11 13:45:38 UTC (rev 2135) +++ artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/core/model/RootModelImplTest.java 2008-11-12 15:51:32 UTC (rev 2136) @@ -22,14 +22,27 @@ import static org.hamcrest.core.IsNot.not; import static org.hamcrest.core.IsNull.nullValue; import static org.junit.Assert.assertThat; +import static org.junit.Assert.fail; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.jiemamy.core.S2FactoryStrategy; +import org.jiemamy.core.model.typedef.datatype.impl.IntegerDataTypeMock; import org.jiemamy.creator.JiemamyModelFactory; +import org.jiemamy.spec.exception.CannotAppendException; +import org.jiemamy.spec.exception.CannotRemoveException; +import org.jiemamy.spec.exception.NotInitializedException; +import org.jiemamy.spec.model.ColumnModel; +import org.jiemamy.spec.model.DomainModel; +import org.jiemamy.spec.model.JiemamyModel; import org.jiemamy.spec.model.RootModel; +import org.jiemamy.spec.model.connection.ForeignKeyModel; +import org.jiemamy.spec.model.dataset.InsertDataSetModel; +import org.jiemamy.spec.model.datatype.DataType; +import org.jiemamy.spec.model.node.TableModel; /** * {@link RootModelImpl}のテストクラス。 @@ -60,13 +73,148 @@ } /** - * TODO for daisuke + * 各プロパティが正常に初期化されていること。 * @throws Exception */ @Test - public void test() throws Exception { + public void test01_各プロパティが正常に初期化されていること() throws Exception { + assertThat(rootModel.getBeginScript(), is(nullValue())); + assertThat(rootModel.getEndScript(), is(nullValue())); + assertThat(rootModel.getDescription(), is(nullValue())); + assertThat(rootModel.getSchemaName(), is(nullValue())); + assertThat(rootModel.getDialect(), is(nullValue())); + + assertThat(rootModel.getId(), not(nullValue())); assertThat(rootModel.getAdapters(), not(nullValue())); + assertThat(rootModel.getDomains(), not(nullValue())); assertThat(rootModel.getNodes(), not(nullValue())); + assertThat(rootModel.getConnections(), not(nullValue())); + assertThat(rootModel.getInsertDataSets(), not(nullValue())); + + assertThat(rootModel.getDomains().size(), is(0)); assertThat(rootModel.getNodes().size(), is(0)); + assertThat(rootModel.getConnections().size(), is(0)); + assertThat(rootModel.getAdapters().size(), is(0)); + assertThat(rootModel.getInsertDataSets().size(), is(0)); } + + /** + * コレクションプロパティはumodifiableであること。 + * @throws Exception + */ + @Test + public void test02_コレクションプロパティはumodifiableであること() throws Exception { + try { + rootModel.getDomains().add(EmptyProxyModel.DOMAIN); + fail(); + } catch (UnsupportedOperationException e) { + // success + } + try { + rootModel.getNodes().add(EmptyProxyModel.NODE); + fail(); + } catch (UnsupportedOperationException e) { + // success + } + try { + rootModel.getConnections().add(EmptyProxyModel.CONNECTION); + fail(); + } catch (UnsupportedOperationException e) { + // success + } + try { + rootModel.getAdapters().add(new Object()); + fail(); + } catch (UnsupportedOperationException e) { + // success + } + try { + rootModel.getInsertDataSets().add(EmptyProxyModel.INSERT_DATA_SET); + fail(); + } catch (UnsupportedOperationException e) { + // success + } + } + + /** + * appendModelとremoveModel経由で各種モデルが追加削除できること。 + * @throws Exception + */ + @Test + public void test03_appendModelとremoveModel経由で各種モデルが追加削除できること() throws Exception { + TableModel source = rootModel.createJiemamyModel(TableModel.class).init(rootModel); + TableModel target = rootModel.createJiemamyModel(TableModel.class).init(rootModel); + + rootModel.appendModel(rootModel.createJiemamyModel(DomainModel.class).init("a", new IntegerDataTypeMock())); + rootModel.appendModel(source); + rootModel.appendModel(target); + rootModel.appendModel(rootModel.createJiemamyModel(ForeignKeyModel.class).init(rootModel, source, target)); + rootModel.appendModel(rootModel.createJiemamyModel(InsertDataSetModel.class).init("a")); + + assertThat(rootModel.getDomains().size(), is(1)); + assertThat(rootModel.getNodes().size(), is(2)); + assertThat(rootModel.getConnections().size(), is(1)); + assertThat(rootModel.getInsertDataSets().size(), is(1)); + + rootModel.removeModel(source); + assertThat(rootModel.getNodes().size(), is(1)); + rootModel.removeModel(target); + assertThat(rootModel.getNodes().size(), is(0)); + } + + /** + * 未初期化のモデルをappendしようとすると例外が飛ぶこと。 + * @throws Exception + */ + @Test + public void test04_未初期化のモデルをappendしようとすると例外が飛ぶこと() throws Exception { + try { + rootModel.appendModel(rootModel.createJiemamyModel(DomainModel.class)); + fail(); + } catch (NotInitializedException e) { + // success + } + } + + /** + * 未追加のモデルをremoveしようとすると例外が飛ぶこと。 + * @throws Exception + */ + @Test + @Ignore + public void test05_未追加のモデルをremoveしようとすると例外が飛ぶこと() throws Exception { + // THINK 現在この仕様は実装されていない。実装すべきか否か。 + TableModel table = rootModel.createJiemamyModel(TableModel.class).init(rootModel); + try { + rootModel.removeModel(table); + fail(); + } catch (CannotRemoveException e) { + assertThat(e.getParent(), is((JiemamyModel) rootModel)); + assertThat(e.getChild(), is((JiemamyModel) table)); + } + } + + /** + * 不適切なモデルをappendしようとすると例外が飛ぶこと。 + * @throws Exception + */ + @Test + public void test06_不適切なモデルをappendしようとすると例外が飛ぶこと() throws Exception { + DataType dataType = new IntegerDataTypeMock(); + ColumnModel column = rootModel.createJiemamyModel(ColumnModel.class).init("a", dataType); + try { + rootModel.appendModel(column); + fail(); + } catch (CannotAppendException e) { + assertThat(e.getParent(), is((JiemamyModel) rootModel)); + assertThat(e.getChild(), is((JiemamyModel) column)); + } + try { + rootModel.appendModel(dataType); + fail(); + } catch (CannotAppendException e) { + assertThat(e.getParent(), is((JiemamyModel) rootModel)); + assertThat(e.getChild(), is((JiemamyModel) dataType)); + } + } }