[Jiemamy-notify] commit [2136] [CORE-81] RootModelImplTest拡充。

Zurück zum Archiv-Index

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));
+		}
+	}
 }


Jiemamy-notify メーリングリストの案内
Zurück zum Archiv-Index