1   /*
2    * Created on 2004-12-19
3    *
4    * TODO To change the template for this generated file go to
5    * Window - Preferences - Java - Code Style - Code Templates
6    */
7   package org.sourceforge.jvb3d.Model;
8   
9   import java.io.ByteArrayInputStream;
10  import java.io.ByteArrayOutputStream;
11  import java.io.ObjectInputStream;
12  import java.io.ObjectOutputStream;
13  import javax.media.j3d.BranchGroup;
14  
15  import junit.framework.TestCase;
16  
17  /***
18   * @author spootnick
19   *
20   * TODO To change the template for this generated type comment go to
21   * Window - Preferences - Java - Code Style - Code Templates
22   */
23  public class ControlableObjectTest extends TestCase {
24  
25  	TestControlableObject obj1,obj2;
26  	/*
27  	 * @see TestCase#setUp()
28  	 */
29  	protected void setUp() throws Exception {
30  		super.setUp();
31  		obj1=new TestControlableObject();
32  		obj2=new TestControlableObject();
33  		obj1.isServer=false;
34  		obj2.isServer=false;
35  	}
36  
37  	/*
38  	 * @see TestCase#tearDown()
39  	 */
40  	protected void tearDown() throws Exception {
41  		super.tearDown();
42  	}
43  
44  	/***
45  	 * Constructor for ControlableObjectTest.
46  	 * @param arg0
47  	 */
48  	public ControlableObjectTest(String arg0) {
49  		super(arg0);
50  	}
51  	/*
52  	 * Testuje poprawnoœæ sprawdzania równoœci
53  	 * Tu mo¿na sprawdziæ wiêcej ni¿ w przypadku MovableObject
54  	 * bo s¹ metody do ustawiania parametrów inne ni¿ za pomoc¹ metod Externizable
55  	 */
56  	public void testControlableObjectEquals(){
57  		assertTrue(!obj1.equals(null));
58  		assertEquals(obj1,new MovableObject());
59  		assertEquals(obj1,obj1);
60  		//defaultowo nie ma predkoœci wiec po turze nadal powinien miec to samo polozenie i predkoœci
61  		obj2.nextTurn(1000);
62  		assertEquals(obj1,obj2);
63  		obj2.moveLeftRight(1f);
64  		assertTrue(!obj1.equals(obj2));
65  	}
66  	
67  	public void testControlableObjectExternalizable() throws Exception{
68  		ByteArrayOutputStream bao = new ByteArrayOutputStream();
69  		ObjectOutputStream out= new ObjectOutputStream(bao);
70  		obj1.writeExternal(out);
71  		out.close();
72  		byte[] buf=bao.toByteArray(); 
73  		ByteArrayInputStream bai = new ByteArrayInputStream(buf);
74  		ObjectInputStream in = new ObjectInputStream(bai);
75  		//zmieniam predkosci zeby sie roznily
76  		obj2.moveForwardBackward(1f);
77  		obj2.turnLeftRight(10f);
78  		obj2.turnUpDown(10f);
79  		obj2.moveLeftRight(1f);
80  		obj2.nextTurn(1000);
81  		assertTrue(!obj1.equals(obj2));
82  		obj2.readExternal(in);
83  		assertEquals(obj1,obj2);
84  	}
85  	/*
86  	 * Testuje w podstawowym stopniu czy metoda wyliczaj¹ca nastêpna turê jest poprawna
87  	 * Niedoskona³oœæ tego testu polega na dwóch rzeczach:
88  	 * -obliczenia s¹ na liczbach zmiennoprzecinkowych, co jak wiadomo nie daje wyniku zgodnego z normaln¹ arytmetyk¹
89  	 * i test mo¿e sie niepowieœæ mimo poprawnego dzia³ania metody
90  	 * -Ta metoda ma byæ wywy³ywana przez java3d i tam powinna byæ przetestowana a dodatkowo z logiki programu
91  	 * wynika ze metoda dostaje w parametrze losowy czas
92  	 */
93  	public void testControlableObjectNextTurn(){
94  		//najpierw ustawie obj2 prêdkoœci i obroty tak by po cyklu nextTurn wróci³ do stanu pocz¹tkowego
95  		//obj2 przejdzie po kwadracie tak by wróci³ do punktu startowego
96  		/*assertEquals(obj1,obj2);
97  		obj2.moveForwardBackward(1f);
98  		for(int i=0;i<4;++i){
99  			obj2.nextTurn(1000000000);
100 			//to zeby sprawdzic czy sie cos zmienia
101 			assertTrue(!obj1.equals(obj2));
102 			obj2.turnLeftRight((float)Math.PI/2);
103 		}
104 		obj2.turnLeftRight((float)(-2*Math.PI));
105 		obj2.moveForwardBackward(0);
106 		assertEquals(obj1,obj2);*/
107 		obj1.moveForwardBackward(2f);
108 		obj2.moveForwardBackward(1f);
109 		obj1.nextTurn(500000000);
110 		obj2.nextTurn(1000000000);
111 		obj1.moveForwardBackward(0);
112 		obj2.moveForwardBackward(0);
113 		assertEquals(obj1,obj2);
114 		
115 		
116 	}
117 }