package kr.kangwoo.util.hangul;


import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class HangulTest {

	char[] HANGUL_JA = new String("¤¡¤¢¤£¤¤¤¥¤¦¤§¤¨¤©¤ª¤«¤¬¤­¤®¤¯¤°¤±¤²¤³¤´¤µ¤¶¤·¤¸¤¹¤º¤»¤¼¤½¤¾").toCharArray();
	char[] HANGUL_MO = new String("¤¿¤À¤Á¤Â¤Ã¤Ä¤Å¤Æ¤Ç¤È¤É¤Ê¤Ë¤Ì¤Í¤Î¤Ï¤Ð¤Ñ¤Ò¤Ó").toCharArray();
	
	@Before
	public void setUp() throws Exception {
	}

	@After
	public void tearDown() throws Exception {
	}

	@Test
	public void isHangulSyllables() {
		Assert.assertEquals(Hangul.isHangulSyllables('¤¡'), false);
		Assert.assertEquals(Hangul.isHangulSyllables('¤¿'), false);
		Assert.assertEquals(Hangul.isHangulSyllables('A'), false);
		Assert.assertEquals(Hangul.isHangulSyllables('a'), false);
		Assert.assertEquals(Hangul.isHangulSyllables('Z'), false);
		Assert.assertEquals(Hangul.isHangulSyllables('z'), false);
		Assert.assertEquals(Hangul.isHangulSyllables('1'), false);
		Assert.assertEquals(Hangul.isHangulSyllables('\"'), false);
		Assert.assertEquals(Hangul.isHangulSyllables('°¡'), true);
	}
	
	@Test
	public void isHangulCompatibilityJamo() {
		Assert.assertEquals(Hangul.isHangulCompatibilityJamo('¤¡'), true);
		Assert.assertEquals(Hangul.isHangulCompatibilityJamo('¤°'), true);
		Assert.assertEquals(Hangul.isHangulCompatibilityJamo('¤¾'), true);
		Assert.assertEquals(Hangul.isHangulCompatibilityJamo('¤¿'), true);
		Assert.assertEquals(Hangul.isHangulCompatibilityJamo('¤Ó'), true);
		Assert.assertEquals(Hangul.isHangulCompatibilityJamo('¤ü'), true);
		Assert.assertEquals(Hangul.isHangulCompatibilityJamo('A'), false);
		Assert.assertEquals(Hangul.isHangulCompatibilityJamo('a'), false);
		Assert.assertEquals(Hangul.isHangulCompatibilityJamo('Z'), false);
		Assert.assertEquals(Hangul.isHangulCompatibilityJamo('z'), false);
		Assert.assertEquals(Hangul.isHangulCompatibilityJamo('1'), false);
		Assert.assertEquals(Hangul.isHangulCompatibilityJamo('\"'), false);
		Assert.assertEquals(Hangul.isHangulCompatibilityJamo('°¡'), false);
	}

	@Test
	public void getChoseong() {
		Assert.assertEquals(Hangul.getChoseong('ÇÑ'), '¤¾');
		Assert.assertEquals(Hangul.getChoseong('Áö'), '¤¸');
		Assert.assertEquals(Hangul.getChoseong('³ª'), '¤¤');
		try {
			Assert.assertEquals(Hangul.getChoseong('a'), 'a');
			Assert.fail("Failed");
		} catch(IllegalArgumentException e) {
			Assert.assertTrue(true);
		}
	}
	
	@Test
	public void getJungseong() {
		Assert.assertEquals(Hangul.getJungseong('ÇÑ'), '¤¿');
		Assert.assertEquals(Hangul.getJungseong('±Û'), '¤Ñ');
		try {
			Hangul.getJungseong('a');
			Assert.fail("ÇÑ±ÛÀÌ ¾Æ´Ò °æ¿ì °ËÁõ ¿À·ù");
		} catch(IllegalArgumentException e) {
			Assert.assertTrue(true);
		}
	}
	
	@Test
	public void getJongseong() {
		Assert.assertEquals(Hangul.getJongseong('ÇÑ'), '¤¤');
		Assert.assertEquals(Hangul.getJongseong('±Û'), '¤©');
		Assert.assertEquals(Hangul.getJongseong('»ç'), (char)0x0000);
		try {
			Hangul.getJongseong('a');
			Assert.fail("ÇÑ±ÛÀÌ ¾Æ´Ò °æ¿ì °ËÁõ ¿À·ù");
		} catch(IllegalArgumentException e) {
			Assert.assertTrue(true);
		}
		try {
			Hangul.getJongseong('¤¡');
			Assert.fail("ÇÑ±ÛÀÌ ¾Æ´Ò °æ¿ì °ËÁõ ¿À·ù");
		} catch(IllegalArgumentException e) {
			Assert.assertTrue(true);
		}
		
	}
	
	@Test
	public void getJamo() {
		Assert.assertArrayEquals(Hangul.getJamo('ÇÑ'), new char[] {'¤¾', '¤¿', '¤¤'});
		Assert.assertArrayEquals(Hangul.getJamo('Áö'), new char[] {'¤¸', '¤Ó'});
		
		try {
			Hangul.getJamo('a');
			Assert.fail("Failed");
		} catch(IllegalArgumentException e) {
			Assert.assertTrue(true);
		}
	}
	
	@Test
	public void hasJongseong() {
		Assert.assertTrue(Hangul.hasJongseong('ÇÑ'));
		Assert.assertFalse(Hangul.hasJongseong('Áö'));
	}
	
	@Test
	public void toHangul() {
		Assert.assertEquals(Hangul.toHangul('¤¸', '¤Ó'), 'Áö');
		Assert.assertEquals(Hangul.toHangul('¤¤', '¤¿'), '³ª');
	}
	
	@Test
	public void toHangul2() {
		Assert.assertEquals(Hangul.toHangul('¤¾', '¤¿', '¤¤'), 'ÇÑ');
		Assert.assertEquals(Hangul.toHangul('¤¡', '¤Ñ', '¤©'), '±Û');
	}
	
	@Test
	public void getJosa() {
		Assert.assertEquals(Hangul.getJosa('ÇÑ', 'Àº', '´Â'), 'Àº');
		Assert.assertEquals(Hangul.getJosa('Áö', 'ÀÌ', '°¡'), '°¡');
	}


	@Test
	public void getJosa2() {
		Assert.assertEquals(Hangul.getJosa('ÇÑ', "Àº", "´Â"), "Àº");
		Assert.assertEquals(Hangul.getJosa('Áö', "ÀÌ", "°¡"), "°¡");
	}
	
	@Test
	public void isHangulCompatibilityJa() {
		for (char c : HANGUL_JA) {
			Assert.assertTrue(Hangul.isHangulCompatibilityJa(c));	
		}
		for (char c : HANGUL_MO) {
			Assert.assertFalse(Hangul.isHangulCompatibilityJa(c));	
		}
		Assert.assertTrue(Hangul.isHangulCompatibilityJa('¤°'));
		Assert.assertFalse(Hangul.isHangulCompatibilityJa('¤¿'));
		Assert.assertFalse(Hangul.isHangulCompatibilityJa('a'));
		Assert.assertFalse(Hangul.isHangulCompatibilityJa('A'));
	}
	
	@Test
	public void isHangulCompatibilityMo() {
		for (char c : HANGUL_JA) {
			Assert.assertFalse(Hangul.isHangulCompatibilityMo(c));	
		}
		for (char c : HANGUL_MO) {
			Assert.assertTrue(Hangul.isHangulCompatibilityMo(c));	
		}
		Assert.assertFalse(Hangul.isHangulCompatibilityMo('a'));
		Assert.assertFalse(Hangul.isHangulCompatibilityMo('A'));
	}
}


