/*
 * KeyTest
 * KeyクラスのUT
 */
package org.logical_paradox.fts;

import java.util.*;

import junit.framework.TestCase;

public class KeyTest extends TestCase {
	public KeyTest( String name ) {
		super( name );
	}

	// ベクタークラスでの検索テスト(正常系)
	public void testFindInVectorSuccess() {
		Vector v = new Vector();
		v.addElement( new KeyAdapter( "キー1" ) );
		Key k = new KeyAdapter( "キー1" );

		Enumeration e = v.elements();
		while( e.hasMoreElements() ) {
			if( k.equals( e.nextElement() ) ) {
				return;
			}
		}

		fail( "キーが見つかりませんでした" );
	}

	// ハッシュコードのテスト(正常系)
	public void testHashCodeSuccess() {
		Key key1 = new KeyAdapter( "キー1" );
		Key key2 = new KeyAdapter( "キー1" );
		assertTrue( "ハッシュコードが一致しない", key1.hashCode() == key2.hashCode() );
	}
	// ハッシュコードのテスト(障害系)
	public void testHashCodeFail() {
		Key key1 = new KeyAdapter( "キー1" );
		Key key2 = new KeyAdapter( "鍵2" );
		assertTrue( "ハッシュコードが一致しないはず", key1.hashCode() != key2.hashCode() );
	}

	// オブジェクト取得のテスト
	public void testGetObjectSuccess() {
		String o = new String( "テスト" );
		Key key = new KeyAdapter( "NAME" );
		key.setObject(o);
		assertTrue( "コンストラクタで設定した添付オブジェクトの比較テスト", key.getObject() == o );
	}
	// キーの設定/取得テスト(正常系)
	public void testGetKeySuccess() {
		String o = new String( "試験" );
		Key key = new KeyAdapter( o );
		assertTrue( "コンストラクタで設定したキーの取得テスト", key.getKey().equals( o ) );
	}
	// キーの設定テスト(障害系)
	public void testConstructorFailed() {
		try {
			new KeyAdapter( null );
			fail( "キー設定の障害識別が正しく動作しませんでした" );
		} catch( IllegalArgumentException iae ) {}
	}
	// 比較テスト(正常系)
	public void testEqualsSuccess() {
		Key key = new KeyAdapter( "キー1" );
		assertTrue( "キーの比較テスト", key.equals( new KeyAdapter( "キー1" ) ) );
	}
	// 比較テスト(障害系)
	public void testEqualsFail() {
		Key key = new KeyAdapter( "キー1" );
		assertFalse( "キーの比較テスト", key.equals( new KeyAdapter( "キー2" ) ) );
	}

	class KeyAdapter extends Key {
		public KeyAdapter( String k ) throws IllegalArgumentException {
			super( k );
		}
	}
}

// end of KeyTest.java
