package jp.agentec.sinaburocast.common.util;

import static jp.agentec.sinaburocast.common.SinaburoConstant.Formats.RETURN;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

import java.lang.reflect.Field;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.List;

import org.junit.Test;

public class SinaburoUtilTest {
	@Test
	public void testIsBlankOrSpace() {
		assertTrue(SinaburoUtil.isBlankOrSpace(null));
		assertTrue(SinaburoUtil.isBlankOrSpace(""));
		assertTrue(SinaburoUtil.isBlankOrSpace("   "));
		assertTrue(SinaburoUtil.isBlankOrSpace(" "));
		assertTrue(SinaburoUtil.isBlankOrSpace("      "));
		assertFalse(SinaburoUtil.isBlankOrSpace("a"));
		assertFalse(SinaburoUtil.isBlankOrSpace("        a       "));
	}

	@Test
	public void testIsNotEmptyArray() {
		assertFalse(SinaburoUtil.isNotEmpty(((Integer[])null)));
		assertFalse(SinaburoUtil.isNotEmpty(new Long[0]));
		assertTrue(SinaburoUtil.isNotEmpty(new String[] {"いいわけ", "ないだろ!"}));
	}

	@Test
	public void testParseInt() {
		assertEquals(0, SinaburoUtil.parseInt((Integer)null));
		assertEquals(12, SinaburoUtil.parseInt(Integer.valueOf("12")));
	}


	@Test
	public void testNvl() {
		assertEquals("", SinaburoUtil.nvl(null));
		assertEquals("", SinaburoUtil.nvl(""));
		assertEquals("a", SinaburoUtil.nvl("a"));

		assertEquals("abc", SinaburoUtil.nvl(null, "abc"));
		assertEquals("abc", SinaburoUtil.nvl("", "abc"));
		assertEquals("a", SinaburoUtil.nvl("a", "abc"));
	}

	@Test
	public void testWrapLine() {
		String target = "This is something cool. But it does'nt mean to match my requirements. However, You can use it occationally for your job. (No meaning ...orz)";
		String expected =
			"This is something cool. But it " + RETURN +
			"does'nt mean to match my " + RETURN +
			"requirements. However, You can " + RETURN +
			"use it occationally for your " + RETURN +
			"job. (No meaning ...orz)";

		for (int i = 0; i < expected.length(); i++) {
			System.out.print((byte)expected.charAt(i) + " ");

		}
		System.out.println();
		String actual = SinaburoUtil.wrapLine(target, 30, RETURN);
		for (int i = 0; i < actual.length(); i++) {
			System.out.print((byte)actual.charAt(i) + " ");

		}
		System.out.println();
		System.out.println(actual);

		assertEquals(expected, SinaburoUtil.wrapLine(target, 30, RETURN));
		assertEquals("", SinaburoUtil.wrapLine(null, 30, RETURN));
		assertEquals(target, SinaburoUtil.wrapLine(target, 0, RETURN));
		assertEquals(target, SinaburoUtil.wrapLine(target, 30, ""));

	}

	@Test
	public void testWrapLineNoWord() {
		String target = "tooooooooooooooooolongword";
		String expected =
			"tooooo" + RETURN +
			"ooooo" + RETURN +
			"ooooo" + RETURN +
			"oolon" + RETURN +
			"gword";
		assertEquals(expected, SinaburoUtil.wrapLineNoWord(target, 5, RETURN));
	}

	@Test
	public void testMergeBitValue() {
		assertEquals(3, SinaburoUtil.mergeBitValue(7, 4, false));
		assertEquals(7, SinaburoUtil.mergeBitValue(3, 4, true));
	}

	@Test
	public void testGetFirstNoBlank() {
		assertEquals("", SinaburoUtil.getFirstNoBlank((String)null));
		assertEquals("", SinaburoUtil.getFirstNoBlank(""));
		assertEquals("aaa", SinaburoUtil.getFirstNoBlank("aaa"));
		assertEquals("aaa", SinaburoUtil.getFirstNoBlank(null, "aaa", "bbb"));
		assertEquals("aaa", SinaburoUtil.getFirstNoBlank("", "aaa", "bbb"));
	}

	@Test
	public void testGetNoBlankCount() {
		assertEquals(0, SinaburoUtil.getNoBlankCount((String)null));
		assertEquals(0, SinaburoUtil.getNoBlankCount(""));
		assertEquals(1, SinaburoUtil.getNoBlankCount("aaa"));
		assertEquals(2, SinaburoUtil.getNoBlankCount(null, "aaa", "bbb"));
		assertEquals(2, SinaburoUtil.getNoBlankCount("", "aaa", "bbb"));
	}

	@Test
	public void testJoinAllNoBlank() {
		assertEquals("", SinaburoUtil.joinAllNoBlank((String)null, (String)null));
		assertEquals("", SinaburoUtil.joinAllNoBlank("", ""));
		assertEquals("aaabbb", SinaburoUtil.joinAllNoBlank("", "aaa", "bbb"));
		assertEquals("aaa", SinaburoUtil.joinAllNoBlank(RETURN, "aaa"));
		System.out.println(SinaburoUtil.joinAllNoBlank(RETURN, "aaa", "bbb", "ccc"));
		assertEquals("aaa" + RETURN + "bbb" + RETURN +  "ccc", SinaburoUtil.joinAllNoBlank(RETURN, "aaa", "bbb", "ccc"));
	}

	@Test
	public void testAddRedColor() { // LATER SinaburoViewUtilTestに
		assertEquals(" ", SinaburoViewUtil.addRedColor(""));
		assertEquals(" ", SinaburoViewUtil.addRedColor(null));
		assertEquals("<html><font color=red>Error occurred</font></html>", SinaburoViewUtil.addRedColor("Error occurred"));
	}

	@Test
	public void testGetExtension() {
		assertEquals("", SinaburoUtil.getExtension(null));
		assertEquals("", SinaburoUtil.getExtension(""));
		assertEquals("", SinaburoUtil.getExtension("."));
		assertEquals("", SinaburoUtil.getExtension("hoge"));
		assertEquals("", SinaburoUtil.getExtension("hoge."));
		assertEquals("c", SinaburoUtil.getExtension("hoge.c"));
		assertEquals("txt", SinaburoUtil.getExtension("hoge.txt"));
		assertEquals("extensionstring", SinaburoUtil.getExtension("hoge.extensionstring"));

	}

	@Test
	public void testGetCaller() {
		assertEquals("sun.reflect.NativeMethodAccessorImpl", SinaburoUtil.getCaller());
		assertEquals("jp.agentec.sinaburocast.common.util.SinaburoUtil", SinaburoUtil.getCaller(0));
		assertEquals("jp.agentec.sinaburocast.common.util.SinaburoUtilTest", SinaburoUtil.getCaller(1));
		assertEquals("sun.reflect.NativeMethodAccessorImpl", SinaburoUtil.getCaller(2));
	}

	@SuppressWarnings("unchecked")
	@Test
	public void testExtractRegexString() {
        assertEquals("0.5.3.", SinaburoUtil.extractRegexString("0.5.3.1", "(\\d\\.\\d\\.\\d\\.)", 1));

		List list = SinaburoUtil.extractRegexString("  File: `/cyg_drive//ecl_ipse//work_space/'", "/(.*?)_(.*?)/", new int[] {1, 2});
		assertEquals("[[cyg, drive], [ecl, ipse], [work, space]]", list.toString());
	}

	@Test
	public void testHasDoubleByte() {
		assertFalse(SinaburoUtil.hasDoubleByte(null));
		assertFalse(SinaburoUtil.hasDoubleByte(""));
		assertFalse(SinaburoUtil.hasDoubleByte("a"));
		assertFalse(SinaburoUtil.hasDoubleByte("abc"));
		assertFalse(SinaburoUtil.hasDoubleByte(" "));
		assertTrue(SinaburoUtil.hasDoubleByte("あ"));
		assertTrue(SinaburoUtil.hasDoubleByte("aabcdあ hiuiruire"));
		assertFalse(SinaburoUtil.hasDoubleByte("aabcd hiuiruire - 45678676 &%$#\"#[] {}*`_?><"));
		assertTrue(SinaburoUtil.hasDoubleByte("java\203l\203b\203g\203\217\201[\203N\203v\203\215\203O\203\211\203~\203\223\203O.PNG"));
		assertFalse(SinaburoUtil.hasDoubleByte("1"));
		assertTrue(SinaburoUtil.hasDoubleByte("1"));
		assertTrue(SinaburoUtil.hasDoubleByte("①"));
		assertTrue(SinaburoUtil.hasDoubleByte("一"));
	}

	@Test
	public void testCygwinToWin() {
		assertEquals("c:/hoge/bar/foo", SinaburoUtil.cygwinToWin("/cygdrive/c/hoge/bar/foo", true));
		assertEquals("d:/hoge/bar/foo", SinaburoUtil.cygwinToWin("/cygdrive/d/hoge/bar/foo", true));
		assertEquals("c:/hoge/bar/foo", SinaburoUtil.cygwinToWin("c:/hoge/bar/foo", true));
		assertEquals("/hoge/bar/foo", SinaburoUtil.cygwinToWin("/hoge/bar/foo", true));
		assertEquals("/hoge/bar/foo", SinaburoUtil.cygwinToWin("/cygdrive/c/hoge/bar/foo", false));
		assertEquals("/hoge/bar/foo", SinaburoUtil.cygwinToWin("/cygdrive/d/hoge/bar/foo", false));
		assertEquals("c:/hoge/bar/foo", SinaburoUtil.cygwinToWin("c:/hoge/bar/foo", false));
		assertEquals("c:/hoge/bar/foo", SinaburoUtil.cygwinToWin("c:\\hoge\\bar\\foo", false));
		assertEquals("/hoge/bar/foo", SinaburoUtil.cygwinToWin("/hoge/bar/foo", false));
	}

	@Test
	public void testWinToCygwin() {
		assertEquals("/cygdrive/c/hoge/bar/foo", SinaburoUtil.winToCygwin("c:/hoge/bar/foo"));
		assertEquals("/cygdrive/d/hoge/bar/foo", SinaburoUtil.winToCygwin("d:/hoge/bar/foo"));
		assertEquals("/cygdrive/c/hoge/bar/foo", SinaburoUtil.winToCygwin("c:\\hoge\\bar\\foo"));
		assertEquals("/cygdrive/d/hoge/bar/foo", SinaburoUtil.winToCygwin("d:\\hoge\\bar\\foo"));
		assertEquals("/cygdrive/c/hoge/bar/foo", SinaburoUtil.winToCygwin("/hoge/bar/foo"));
		assertEquals("/cygdrive/c/hoge/bar/foo", SinaburoUtil.winToCygwin("/cygdrive/c/hoge/bar/foo"));
	}

	@Test
	public void testToLinuxPath() {
		assertEquals("/hoge/bar/foo", SinaburoUtil.toLinuxPath("\\hoge\\bar\\foo"));
		assertEquals("/hoge/bar/foo", SinaburoUtil.toLinuxPath("c:\\hoge\\bar\\foo"));
		assertEquals("/hoge/bar/foo", SinaburoUtil.toLinuxPath("c:/hoge/bar/foo"));

	}

	@Test
	public void testToWinPath() {
		assertEquals("\\hoge\\bar\\foo", SinaburoUtil.toWinPath("/hoge/bar/foo"));
	}

	@Test
	public void testToMd5Hash() {
		assertEquals("76c89099a45da15034a1d578e171c7df", SinaburoUtil.toMd5Hash("/cygdrive/c/hoge/bar/foo"));
		assertEquals("80a9869ba747d008628cd399d0689315", SinaburoUtil.toMd5Hash("/cygdrive/c/hoge/bar/foo/"));
		assertEquals("80a9869ba747d008628cd399d0689315", SinaburoUtil.toMd5Hash("/cygdrive/c/hoge/bar/foo/"));
		System.out.println(SinaburoUtil.toMd5Hash("/cygdrive/c/hoge/bar/foo/").length());
	}

//	@SuppressWarnings("unchecked")
//	@Test
//	public void testGetKey() {
//		Map map = new HashMap();
//		map.put("keyA", "valA");
//		map.put("keyB", "valB");
//		map.put("keyC", "valC");
//		assertEquals("keyA", SinaburoUtil.getKey(map, "valA"));
//		assertEquals("keyB", SinaburoUtil.getKey(map, "valB"));
//		assertEquals("keyC", SinaburoUtil.getKey(map, "valC"));
//		assertNull(SinaburoUtil.getKey(map, ""));
//		assertNull(SinaburoUtil.getKey(map, null));
//	}

	@Test
	public void testFormatByte() {
		assertEquals("0B", SinaburoUtil.formatByte(0));
		assertEquals("1000B", SinaburoUtil.formatByte(1000));
		assertEquals("1K", SinaburoUtil.formatByte(1024));
		assertEquals("1M", SinaburoUtil.formatByte(1024*1024));
		assertEquals("1G", SinaburoUtil.formatByte(1024*1024*1024));
		assertEquals("1K", SinaburoUtil.formatByte(1024 + 200));
		assertEquals("200K", SinaburoUtil.formatByte(1024*200));
	}

	@Test
	public void testHasSlash() {
		assertTrue(SinaburoUtil.hasSlash("aaa/aaa"));
		assertTrue(SinaburoUtil.hasSlash("/"));
		assertFalse(SinaburoUtil.hasSlash("aaaaaa"));
		assertFalse(SinaburoUtil.hasSlash(""));
		assertFalse(SinaburoUtil.hasSlash(null));
	}

	@Test
	public void testGetCurrentDirectory() {
//		assertEquals("C:\\Prog\\pleiades-e3.5-ultimate_20090930\\workspace\\contentmgmt", SinaburoUtil.getCurrentDirectory());
	}

	@Test
	public void testGetFileName() {
		assertNull(SinaburoUtil.getFileName(null));
		assertEquals("", SinaburoUtil.getFileName(""));
		assertEquals("aaa", SinaburoUtil.getFileName("/aaa"));
		assertEquals("aaa", SinaburoUtil.getFileName("hoge/aaa"));
		assertEquals("aaa.txt", SinaburoUtil.getFileName("hoge\\aaa.txt"));
		assertEquals("aaa", SinaburoUtil.getFileName("c:/hoge/aaa"));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#dateDispFormat(java.sql.Timestamp)} のためのテスト・メソッド。
	 * nullテスト
	 */
	@Test
	public final void testDateDispFormat_null() {
		assertNull(SinaburoUtil.dateDispFormat(null));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#dateDispFormat(java.sql.Timestamp)} のためのテスト・メソッド。
	 * epoc前後
	 */
	@Test
	public final void testDateDispFormat_epoc() {
		// LATER:armia このままだとTZがJSTの時にしか成功しない
		assertEquals("1969/12/30", SinaburoUtil.dateDispFormat(new Timestamp(-(24L+9) * 60 * 60 * 1000 - 1)));
		assertEquals("1969/12/31", SinaburoUtil.dateDispFormat(new Timestamp(-(24L+9) * 60 * 60 * 1000)));
		assertEquals("1969/12/31", SinaburoUtil.dateDispFormat(new Timestamp(-9L * 60 * 60 * 1000 - 1)));
		assertEquals("1970/01/01", SinaburoUtil.dateDispFormat(new Timestamp(-9L * 60 * 60 * 1000)));
		assertEquals("1970/01/01", SinaburoUtil.dateDispFormat(new Timestamp(-1L)));
		assertEquals("1970/01/01", SinaburoUtil.dateDispFormat(new Timestamp(0L)));
		assertEquals("1970/01/01", SinaburoUtil.dateDispFormat(new Timestamp(1L)));
		assertEquals("1970/01/01", SinaburoUtil.dateDispFormat(new Timestamp((24L-9) * 60 * 60 * 1000 - 1)));
		assertEquals("1970/01/02", SinaburoUtil.dateDispFormat(new Timestamp((24L-9) * 60 * 60 * 1000)));
		assertEquals("1970/01/02", SinaburoUtil.dateDispFormat(new Timestamp((48L-9) * 60 * 60 * 1000 - 1)));
		assertEquals("1970/01/03", SinaburoUtil.dateDispFormat(new Timestamp((48L-9) * 60 * 60 * 1000)));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#dateDispFormat(java.sql.Timestamp)} のためのテスト・メソッド。
	 * 日常的によく見かける日時
	 */
	@Test
	public final void testDateDispFormat_typical() {
		assertEquals("1999/01/02", SinaburoUtil.dateDispFormat(Timestamp.valueOf("1999-01-02 12:34:56.777777777")));
		assertEquals("2001/10/20", SinaburoUtil.dateDispFormat(Timestamp.valueOf("2001-10-20 13:35:57.888888888")));
		assertEquals("3000/11/22", SinaburoUtil.dateDispFormat(Timestamp.valueOf("3000-11-22 14:36:58.999999999")));
		assertEquals("9999/12/31", SinaburoUtil.dateDispFormat(Timestamp.valueOf("9999-12-31 11:32:55.0")));

		Calendar	cal = Calendar.getInstance();
		cal.clear();
		cal.set(10000, 0, 1, 2, 3, 4);
		Timestamp ts = new Timestamp(cal.getTimeInMillis());
		ts.setNanos(123456789);
		assertEquals("10000/01/01", SinaburoUtil.dateDispFormat(ts));
	}

	// arima:紀元前のテスト ⇒いらない

	@SuppressWarnings("unused")
    static private class TestClass {
        private final String s = "hoge";
    	private final Integer i = 12;
    	private final Object obj = "obj";
    }

	@Test
	public void testGetFieldObject() {
		TestClass test = new TestClass();
		assertEquals("hoge", SinaburoUtil.getFieldValue(test, "s"));
		assertEquals(12, SinaburoUtil.getFieldValue(test, "i"));
		assertEquals("obj", SinaburoUtil.getFieldValue(test, "obj"));
	}

	@Test
	public void testGetField() {
		TestClass test = new TestClass();
		assertEquals("private final java.lang.String jp.agentec.sinaburocast.common.util.SinaburoUtilTest$TestClass.s", SinaburoUtil.getField(test, "s").toString());
	}

	@Test
	public void testGetFieldValue() {
		TestClass test = new TestClass();
		Field f = SinaburoUtil.getField(test, "s");
		assertEquals("hoge", SinaburoUtil.getFieldValue(test, f));
	}

	@Test
	public void testGetDate() {
		assertEquals("Thu May 20 00:00:00 JST 2010", SinaburoUtil.getDate(2010,5,20).toString());
		assertEquals("Thu May 20 08:23:45 JST 2010", SinaburoUtil.getDate(2010,5,20, 8,23,45).toString());
	}

	@Test
	public void testZvl() {
		assertEquals(2, SinaburoUtil.zvl(0, 2));
		assertEquals(1, SinaburoUtil.zvl(1, 2));
	}

	@Test
	public void testParseShort(){

		assertEquals(2, SinaburoUtil.toShort("2"));
		assertEquals(0, SinaburoUtil.toShort(null));
		assertEquals(32767, SinaburoUtil.toShort("32767"));
		assertEquals(0, SinaburoUtil.toShort("32768"));
	}

	@Test
	public void testGetFilenameWithoutExt() {
		assertEquals("", SinaburoUtil.getFilenameWithoutExt(""));
		assertEquals("abc", SinaburoUtil.getFilenameWithoutExt("abc"));
		assertEquals("aaa", SinaburoUtil.getFilenameWithoutExt("aaa.properties"));
		assertEquals("bbb", SinaburoUtil.getFilenameWithoutExt("bbb."));
	}

	@Test
	public void testSetField() {
		TestClass test = new TestClass();
		SinaburoUtil.setField(test, "s", "hoge");
		assertEquals("hoge", test.s);
	}

	@Test
	public void testEqualsAny() {
		assertEquals(true, SinaburoUtil.equalsAny("aa", "bb", "aa", "cc"));
		assertEquals(false, SinaburoUtil.equalsAny("dd", "b", "a", "cc"));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#makeLikePattern(java.lang.String)} のためのテスト・メソッド。
	 *
	 * 異常系; null
	 */
	@Test
	public final void testMakeLikePattern_null() {
		assertNull(SinaburoUtil.makeLikePattern(null));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#makeLikePattern(java.lang.String)} のためのテスト・メソッド。
	 *
	 * 空文字列・空白文字
	 */
	@Test
	public final void testMakeLikePattern_blank() {
		assertEquals("", SinaburoUtil.makeLikePattern(""));
		assertEquals("% %", SinaburoUtil.makeLikePattern(" "));
		assertEquals("%\t \r\n%", SinaburoUtil.makeLikePattern("\t \r\n"));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#makeLikePattern(java.lang.String)} のためのテスト・メソッド。
	 *
	 * 置き換えが起こらないパターン
	 */
	@Test
	public final void testMakeLikePattern_notReplaced() {
		assertEquals("%abcDEF%", SinaburoUtil.makeLikePattern("abcDEF"));
		assertEquals("%abcDEF%", SinaburoUtil.makeLikePattern("abcDEF"));
		assertEquals("%あかさたなハマヤラワ%", SinaburoUtil.makeLikePattern("あかさたなハマヤラワ"));
		assertEquals("%表%", SinaburoUtil.makeLikePattern("表"));
		assertEquals("%東京特許許可局%", SinaburoUtil.makeLikePattern("東京特許許可局"));
		assertEquals("%とにかくうんざりするほど長くて嫌になる文字列1"
                     + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
                     + "とにかくうんざりするほど長くて嫌になる文字列2"
                     + "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
                     + "とにかくうんざりするほど長くて嫌になる文字列3"
                     + "cccccccccccccccccccccccccccccc"
                     + "とにかくうんざりするほど長くて嫌になる文字列4"
                     + "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
                     + "とにかくうんざりするほど長くて嫌になる文字列5"
                     + "eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
                     + "とにかくうんざりするほど長くて嫌になる文字列6"
                     + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
                     + "とにかくうんざりするほど長くて嫌になる文字列7"
                     + "gggggggggggggggggggggggggggggg"
                     + "とにかくうんざりするほど長くて嫌になる文字列8"
                     + "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH"
                     + "とにかくうんざりするほど長くて嫌になる文字列9"
                     + "iiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
                     + "とにかくうんざりするほど長くて嫌になる文字列10"
                     + "JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ"
                     + "とにかくうんざりするほど長くて嫌になる文字列11"
                     + "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"
                     + "とにかくうんざりするほど長くて嫌になる文字列12"
                     + "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL"
                     + "とにかくうんざりするほど長くて嫌になる文字列13"
                     + "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmm"
                     + "とにかくうんざりするほど長くて嫌になる文字列14"
                     + "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
                     + "とにかくうんざりするほど長くて嫌になる文字列15"
                     + "oooooooooooooooooooooooooooooo"
                     + "とにかくうんざりするほど長くて嫌になる文字列16"
                     + "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP"
                     + "とにかくうんざりするほど長くて嫌になる文字列17"
                     + "qqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
                     + "とにかくうんざりするほど長くて嫌になる文字列18"
                     + "RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"
                     + "とにかくうんざりするほど長くて嫌になる文字列19"
                     + "ssssssssssssssssssssssssssssss"
                     + "とにかくうんざりするほど長くて嫌になる文字列20"
                     + "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT"
                     + "とにかくうんざりするほど長くて嫌になる文字列21"
                     + "uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu"
                     + "とにかくうんざりするほど長くて嫌になる文字列22"
                     + "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVV"
                     + "とにかくうんざりするほど長くて嫌になる文字列23"
                     + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwww"
                     + "とにかくうんざりするほど長くて嫌になる文字列24"
                     + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                     + "とにかくうんざりするほど長くて嫌になる文字列25"
                     + "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
                     + "とにかくうんざりするほど長くて嫌になる文字列26"
                     + "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ%",
		             SinaburoUtil.makeLikePattern("とにかくうんざりするほど長くて嫌になる文字列1"
		                                          + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列2"
		                                          + "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列3"
		                                          + "cccccccccccccccccccccccccccccc"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列4"
		                                          + "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列5"
		                                          + "eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列6"
		                                          + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列7"
		                                          + "gggggggggggggggggggggggggggggg"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列8"
		                                          + "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列9"
		                                          + "iiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列10"
		                                          + "JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列11"
		                                          + "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列12"
		                                          + "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列13"
		                                          + "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmm"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列14"
		                                          + "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列15"
		                                          + "oooooooooooooooooooooooooooooo"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列16"
		                                          + "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列17"
		                                          + "qqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列18"
		                                          + "RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列19"
		                                          + "ssssssssssssssssssssssssssssss"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列20"
		                                          + "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列21"
		                                          + "uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列22"
		                                          + "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVV"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列23"
		                                          + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwww"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列24"
		                                          + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列25"
		                                          + "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
		                                          + "とにかくうんざりするほど長くて嫌になる文字列26"
		                                          + "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#makeLikePattern(java.lang.String)} のためのテスト・メソッド。
	 *
	 * 置き換えが起こるパターン
	 */
	@Test
	public final void testMakeLikePattern_replaced() {
		assertEquals("%\\%%", SinaburoUtil.makeLikePattern("%"));
		assertEquals("%\\_%", SinaburoUtil.makeLikePattern("_"));
		assertEquals("%\\\\%", SinaburoUtil.makeLikePattern("\\"));
		assertEquals("%a\\%B%", SinaburoUtil.makeLikePattern("a%B"));
		assertEquals("%c\\_D%", SinaburoUtil.makeLikePattern("c_D"));
		assertEquals("%\\%表\\_と\\\\裏%", SinaburoUtil.makeLikePattern("%表_と\\裏"));
		assertEquals("%とにかくうんざりするほど\\%長くて嫌になる文字列1"
                     + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
                     + "とにかくうんざりするほど\\_長くて嫌になる文字列2"
                     + "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
                     + "とにかくうんざりするほど\\\\長くて嫌になる文字列3"
                     + "cccccccccccccccccccccccccccccc"
                     + "とにかくうんざりするほど\\%\\%長くて嫌になる文字列4"
                     + "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
                     + "とにかくうんざりするほど\\_\\_長くて嫌になる文字列5"
                     + "eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
                     + "とにかくうんざりするほど\\\\\\\\長くて嫌になる文字列6"
                     + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
                     + "とにかくうんざりするほど\\%\\%\\%長くて嫌になる文字列7"
                     + "gggggggggggggggggggggggggggggg"
                     + "とにかくうんざりするほど\\_\\_\\_長くて嫌になる文字列8"
                     + "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH"
                     + "とにかくうんざりするほど\\\\\\\\\\\\長くて嫌になる文字列9"
                     + "iiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
                     + "とにかくうんざりするほど\\%\\%\\%\\%長くて嫌になる文字列10"
                     + "JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ"
                     + "とにかくうんざりするほど\\_\\_\\_\\_長くて嫌になる文字列11"
                     + "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"
                     + "とにかくうんざりするほど\\\\\\\\\\\\\\\\長くて嫌になる文字列12"
                     + "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL"
                     + "とにかくうんざりするほど\\%\\%\\%\\%\\%長くて嫌になる文字列13"
                     + "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmm"
                     + "とにかくうんざりするほど\\_\\_\\_\\_\\_長くて嫌になる文字列14"
                     + "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
                     + "とにかくうんざりするほど\\\\\\\\\\\\\\\\\\\\長くて嫌になる文字列15"
                     + "oooooooooooooooooooooooooooooo"
                     + "とにかくうんざりするほど\\%\\%\\%\\%\\%\\%長くて嫌になる文字列16"
                     + "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP"
                     + "とにかくうんざりするほど\\_\\_\\_\\_\\_\\_長くて嫌になる文字列17"
                     + "qqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
                     + "とにかくうんざりするほど\\\\\\\\\\\\\\\\\\\\\\\\長くて嫌になる文字列18"
                     + "RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"
                     + "とにかくうんざりするほど\\%\\%\\%\\%\\%\\%\\%長くて嫌になる文字列19"
                     + "ssssssssssssssssssssssssssssss"
                     + "とにかくうんざりするほど\\_\\_\\_\\_\\_\\_\\_長くて嫌になる文字列20"
                     + "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT"
                     + "とにかくうんざりするほど\\\\\\\\\\\\\\\\\\\\\\\\\\\\長くて嫌になる文字列21"
                     + "uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu"
                     + "とにかくうんざりするほど\\%\\%\\%\\%\\%\\%\\%\\%長くて嫌になる文字列22"
                     + "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVV"
                     + "とにかくうんざりするほど\\_\\_\\_\\_\\_\\_\\_\\_長くて嫌になる文字列23"
                     + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwww"
                     + "とにかくうんざりするほど\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\長くて嫌になる文字列24"
                     + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
                     + "とにかくうんざりするほど\\%\\%\\%\\%\\%\\%\\%\\%\\%長くて嫌になる文字列25"
                     + "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
                     + "とにかくうんざりするほど\\_\\_\\_\\_\\_\\_\\_\\_\\_長くて嫌になる文字列26"
                     + "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ%",
		             SinaburoUtil.makeLikePattern("とにかくうんざりするほど%長くて嫌になる文字列1"
		                                          + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
		                                          + "とにかくうんざりするほど_長くて嫌になる文字列2"
		                                          + "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
		                                          + "とにかくうんざりするほど\\長くて嫌になる文字列3"
		                                          + "cccccccccccccccccccccccccccccc"
		                                          + "とにかくうんざりするほど%%長くて嫌になる文字列4"
		                                          + "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
		                                          + "とにかくうんざりするほど__長くて嫌になる文字列5"
		                                          + "eeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
		                                          + "とにかくうんざりするほど\\\\長くて嫌になる文字列6"
		                                          + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
		                                          + "とにかくうんざりするほど%%%長くて嫌になる文字列7"
		                                          + "gggggggggggggggggggggggggggggg"
		                                          + "とにかくうんざりするほど___長くて嫌になる文字列8"
		                                          + "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH"
		                                          + "とにかくうんざりするほど\\\\\\長くて嫌になる文字列9"
		                                          + "iiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
		                                          + "とにかくうんざりするほど%%%%長くて嫌になる文字列10"
		                                          + "JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ"
		                                          + "とにかくうんざりするほど____長くて嫌になる文字列11"
		                                          + "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"
		                                          + "とにかくうんざりするほど\\\\\\\\長くて嫌になる文字列12"
		                                          + "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL"
		                                          + "とにかくうんざりするほど%%%%%長くて嫌になる文字列13"
		                                          + "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmm"
		                                          + "とにかくうんざりするほど_____長くて嫌になる文字列14"
		                                          + "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
		                                          + "とにかくうんざりするほど\\\\\\\\\\長くて嫌になる文字列15"
		                                          + "oooooooooooooooooooooooooooooo"
		                                          + "とにかくうんざりするほど%%%%%%長くて嫌になる文字列16"
		                                          + "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP"
		                                          + "とにかくうんざりするほど______長くて嫌になる文字列17"
		                                          + "qqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
		                                          + "とにかくうんざりするほど\\\\\\\\\\\\長くて嫌になる文字列18"
		                                          + "RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"
		                                          + "とにかくうんざりするほど%%%%%%%長くて嫌になる文字列19"
		                                          + "ssssssssssssssssssssssssssssss"
		                                          + "とにかくうんざりするほど_______長くて嫌になる文字列20"
		                                          + "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT"
		                                          + "とにかくうんざりするほど\\\\\\\\\\\\\\長くて嫌になる文字列21"
		                                          + "uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu"
		                                          + "とにかくうんざりするほど%%%%%%%%長くて嫌になる文字列22"
		                                          + "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVV"
		                                          + "とにかくうんざりするほど________長くて嫌になる文字列23"
		                                          + "wwwwwwwwwwwwwwwwwwwwwwwwwwwwww"
		                                          + "とにかくうんざりするほど\\\\\\\\\\\\\\\\長くて嫌になる文字列24"
		                                          + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
		                                          + "とにかくうんざりするほど%%%%%%%%%長くて嫌になる文字列25"
		                                          + "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
		                                          + "とにかくうんざりするほど_________長くて嫌になる文字列26"
		                                          + "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#makeLikePattern(java.lang.String)} のためのテスト・メソッド。
	 */
	@Test
	public final void testMakeLikePattern() {
	}

	@Test
	public void testToNull() {
		assertEquals("a", SinaburoUtil.toNull("a"));
		assertNull(SinaburoUtil.toNull(""));
		assertNull(SinaburoUtil.toNull(null));
	}

	@Test
	public void testCalculateDiskVolume() {
		Long diskVolume = null;
		Long diskVolume0 = 999L;
		Long diskVolume1 = 1000L;
		Long diskVolume2 = 1000000L;
		Long diskVolume3 = 1000000000L;
		Long diskVolume4 = 1000000000000L;
		Long diskVolume5 = 1000000000000000L;
		Long diskVolume6 = 1000000000000000000L;
		Long diskVolume7 = 1025L;
		Long diskVolume8 = 1048576L;
		Long diskVolume9 = 42949672960L;
		System.out.println(SinaburoUtil.calculateDiskVolume(diskVolume));
		System.out.println(SinaburoUtil.calculateDiskVolume(diskVolume0));
		System.out.println(SinaburoUtil.calculateDiskVolume(diskVolume1));
		System.out.println(SinaburoUtil.calculateDiskVolume(diskVolume2));
		System.out.println(SinaburoUtil.calculateDiskVolume(diskVolume3));
		System.out.println(SinaburoUtil.calculateDiskVolume(diskVolume4));
		System.out.println(SinaburoUtil.calculateDiskVolume(diskVolume5));
		System.out.println(SinaburoUtil.calculateDiskVolume(diskVolume6));
		System.out.println(SinaburoUtil.calculateDiskVolume(diskVolume7));
		System.out.println(SinaburoUtil.calculateDiskVolume(diskVolume8));
		System.out.println(SinaburoUtil.calculateDiskVolume(diskVolume9));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#getBrief(String, int)} のためのテスト・メソッド。
	 *
	 * maxlengthが負
	 */
	@Test(expected=IllegalArgumentException.class)
	public final void testGetBrief_tooShort1() {
		SinaburoUtil.getBrief("aaaBBBあああイイイ", -1);
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#getBrief(String, int)} のためのテスト・メソッド。
	 *
	 * maxlengthが0
	 */
	@Test(expected=IllegalArgumentException.class)
	public final void testGetBrief_tooShort2() {
		SinaburoUtil.getBrief("cccDDDうううエエエ", 0);
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#getBrief(String, int)} のためのテスト・メソッド。
	 *
	 * maxlengthが小さすぎる
	 */
	@Test(expected=IllegalArgumentException.class)
	public final void testGetBrief_tooShort3() {
		SinaburoUtil.getBrief("eeeFFFおおおカカカ", 2);
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#getBrief(String, int)} のためのテスト・メソッド。
	 *
	 * null, 空文字列
	 */
	@Test
	public final void testGetBrief_empty() {
		assertEquals("", SinaburoUtil.getBrief(null, 3));
		assertEquals("", SinaburoUtil.getBrief("", 3));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#getBrief(String, int)} のためのテスト・メソッド。
	 *
	 * 省略不要なパターン
	 */
	@Test
	public final void testGetBrief_notShorten() {
		assertEquals("eeeFFFおおおカカカ", SinaburoUtil.getBrief("eeeFFFおおおカカカ", 15));
		assertEquals("gggHHHきききククク", SinaburoUtil.getBrief("gggHHHきききククク", 12));
		assertEquals("iii", SinaburoUtil.getBrief("iii", 3));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#getBrief(String, int)} のためのテスト・メソッド。
	 *
	 * 省略されるパターン
	 */
	@Test
	public final void testGetBrief_shorten() {
		assertEquals("eeeFFFお...", SinaburoUtil.getBrief("eeeFFFおおおカカカ", 10));
		assertEquals("g...", SinaburoUtil.getBrief("gggHHHきききククク", 4));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#getBrief(String, int)} のためのテスト・メソッド。
	 *
	 * ...だけになるパターン
	 */
	@Test
	public final void testGetBrief_shorten2() {
		assertEquals("...", SinaburoUtil.getBrief("iiiJJJけけけコココ", 3));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#getBrief2(String, String, int)} のためのテスト・メソッド。
	 *
	 * maxlengthが負
	 */
	@Test(expected=IllegalArgumentException.class)
	public final void testGetBrief2_tooShort1() {
		SinaburoUtil.getBrief2("aaaBBB", "あああイイイ", -1);
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#getBrief2(String, String, int)} のためのテスト・メソッド。
	 *
	 * maxlengthが0
	 */
	@Test(expected=IllegalArgumentException.class)
	public final void testGetBrief2_tooShort2() {
		SinaburoUtil.getBrief2("cccDDD", "うううエエエ", 0);
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#getBrief2(String, String, int)} のためのテスト・メソッド。
	 *
	 * maxlengthが小さすぎる
	 */
	@Test(expected=IllegalArgumentException.class)
	public final void testGetBrief2_tooShort3() {
		SinaburoUtil.getBrief2("eeeFFF", "おおおカカカ", 5);
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#getBrief2(String, String, int)} のためのテスト・メソッド。
	 *
	 * null, 空文字列
	 */
	@Test
	public final void testGetBrief2_empty() {
		assertEquals("&nbsp;", SinaburoUtil.getBrief2(null, null, 6));
		assertEquals("&nbsp;", SinaburoUtil.getBrief2(null, "", 6));
		assertEquals("&nbsp;", SinaburoUtil.getBrief2("", null, 6));
		assertEquals("&nbsp;", SinaburoUtil.getBrief2("", "", 6));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#getBrief2(String, String, int)} のためのテスト・メソッド。
	 *
	 * 省略不要なパターン
	 */
	@Test
	public final void testGetBrief2_notShorten() {
		assertEquals("eeeFFF&nbsp;おおおカカカ", SinaburoUtil.getBrief2("eeeFFF", "おおおカカカ", 15));
		assertEquals("gggHHH&nbsp;きききククク", SinaburoUtil.getBrief2("gggHHH", "きききククク", 12));
		assertEquals("iiiiii&nbsp;", SinaburoUtil.getBrief2("iiiiii", null, 6));
		assertEquals("jjjjjj&nbsp;", SinaburoUtil.getBrief2("jjjjjj", "", 6));
		assertEquals("&nbsp;kkkkkk", SinaburoUtil.getBrief2(null, "kkkkkk", 6));
		assertEquals("&nbsp;llllll", SinaburoUtil.getBrief2(null, "llllll", 6));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#getBrief2(String, String, int)} のためのテスト・メソッド。
	 *
	 * str1が省略されるパターン
	 */
	@Test
	public final void testGetBrief2_shortenFormer() {
		assertEquals("e...&nbsp;おおおカカカ", SinaburoUtil.getBrief2("eeeFFF", "おおおカカカ", 10));
		assertEquals("...&nbsp;きききククク毛", SinaburoUtil.getBrief2("gggHHH", "きききククク毛", 10));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#getBrief2(String, String, int)} のためのテスト・メソッド。
	 *
	 * str1が省略されるパターン
	 */
	@Test
	public final void testGetBrief2_shortenLatter() {
		assertEquals("eee&nbsp;FFFお...", SinaburoUtil.getBrief2("eee", "FFFおおおカカカ", 10));
		assertEquals("ggg&nbsp;...", SinaburoUtil.getBrief2("ggg", "HHHきききククク毛毛毛", 6));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#getBrief2(String, String, int)} のためのテスト・メソッド。
	 *
	 * 双方が省略されるパターン
	 */
	@Test
	public final void testGetBrief2_shortenBoth() {
		assertEquals("iii...&nbsp;kkk...", SinaburoUtil.getBrief2("iiiJJJこここサササ", "kkkLLLしししススス", 13));
	}

	/**
	 * {@link jp.agentec.sinaburocast.common.util.SinaburoUtil#getBrief2(String, String, int)} のためのテスト・メソッド。
	 *
	 * ...だけになるパターン
	 */
	@Test
	public final void testGetBrief2_ellipsis() {
		assertEquals("...&nbsp;...", SinaburoUtil.getBrief2("iiiJJJ", "けけけコココ", 6));
	}

	@Test
	public final void testInclude() {
		assertTrue(SinaburoUtil.include(12, 4));
		assertFalse(SinaburoUtil.include(12, 3));
//		assertTrue(SinaburoUtil.include(8192, ResourceStatus.PDF_LINK_EXTRACTED));
	}

	@Test
	public void testIsHex() {
		assertTrue(SinaburoUtil.isHex("890423"));
		assertTrue(SinaburoUtil.isHex("2fb6ee45181d73d440cfb71153e1bff5104a2de1367da4fafb29b07d06e89770"));
		assertTrue(SinaburoUtil.isHex("ABCDEF09876"));
		assertFalse(SinaburoUtil.isHex("890abcedfg423"));
		assertFalse(SinaburoUtil.isHex("fsudiao"));
	}

	@Test
	public void testPrepend() {
		assertEquals("", SinaburoUtil.prepend("", ":"));
		assertEquals("aaa:", SinaburoUtil.prepend("aaa", ":"));
		assertEquals("", SinaburoUtil.prepend(null, ":"));
	}

	@Test
	public void testIsIp4Address() {
		assertFalse(SinaburoUtil.isIp4Address(null));
		assertFalse(SinaburoUtil.isIp4Address(""));
		assertFalse(SinaburoUtil.isIp4Address("0:0:0:0:0:0:0:0"));
		assertTrue(SinaburoUtil.isIp4Address("0.0.0.0"));
		assertTrue(SinaburoUtil.isIp4Address("192.168.11.3"));
		assertTrue(SinaburoUtil.isIp4Address("221.122.12.14"));
	}
	
	@Test
	public void checkDate() {
		assertFalse(SinaburoUtil.checkDate(null));
		assertFalse(SinaburoUtil.checkDate(""));
		assertFalse(SinaburoUtil.checkDate("1/2/3"));
		assertTrue(SinaburoUtil.checkDate("1900-3-4"));
		assertTrue(SinaburoUtil.checkDate("1900/03/04"));
		assertTrue(SinaburoUtil.checkDate("2900/1/1"));
		assertTrue(SinaburoUtil.checkDate("2012/02/29"));
		assertFalse(SinaburoUtil.checkDate("2013/02/29"));
		assertFalse(SinaburoUtil.checkDate("2013/04/0"));
		assertFalse(SinaburoUtil.checkDate("2013/04/32"));
	}
	
	@Test
	public void testIsAllowedSrc() {
		List<String> allowedSrc = PropertyUtil.getList("IP_ALLOWED_SRC");
		assertTrue(SinaburoUtil.isAllowedSrc("192.168.1.14", allowedSrc));
		assertFalse(SinaburoUtil.isAllowedSrc("192.12.1.14", allowedSrc));
		assertTrue(SinaburoUtil.isAllowedSrc("219.106.249.241", allowedSrc));
		assertTrue(SinaburoUtil.isAllowedSrc("210.2.193.190", allowedSrc));
		assertTrue(SinaburoUtil.isAllowedSrc("210.253.181.158", allowedSrc));
	}

}