// Path: src/main/java/com/wanasit/chrono/Chrono.java
// public class Chrono {
// 
//     public static final Chrono casual = new Chrono(ChronoOption.casualOptions());
//     public static final Chrono standard = new Chrono(ChronoOption.standardOptions());
// 
//     public static List<ParsedResult> Parse(String text) {
//         return standard.parse(text);
//     }
// 
//     public static List<ParsedResult> Parse(String text, Date refDate) {
//         return standard.parse(text, refDate);
//     }
// 
//     public static List<ParsedResult> Parse(String text, Date refDate, ChronoOption option) {
//         return standard.parse(text, refDate, option);
//     }
// 
//     public static Date ParseDate(String text) { return standard.parseDate(text); }
// 
//     public static Date ParseDate(String text, Date refDate) { return standard.parseDate(text, refDate); }
// 
//     public static Date ParseDate(String text, Date refDate, ChronoOption option) {
//         return standard.parseDate(text, refDate, option);
//     }
// 
//     protected ChronoOption options = null;
//     protected List<Parser> parsers = null;
//     protected List<Refiner> refiners = null;
// 
//     public Chrono(ChronoOption options) {
//         this.options = options;
//         this.parsers = new ArrayList<Parser>(options.parsers);
//         this.refiners = new ArrayList<Refiner>(options.refiners);
//     }
// 
//     public List<ParsedResult> parse(String text) {
//         return parse(text, new Date());
//     }
// 
//     public List<ParsedResult> parse(String text, Date refDate) {
//         return parse(text, refDate, this.options);
//     }
// 
//     public List<ParsedResult> parse(String text, Date refDate, ChronoOption options) {
// 
//         List<ParsedResult> allResults = new LinkedList<ParsedResult>();
// 
//         for (Parser parser : this.parsers) {
// 
//             List<ParsedResult> results = parser.execute(text, refDate, options);
//             allResults.addAll(results);
//         }
// 
//         Collections.sort(allResults);
//         allResults = refineWithAllRefiners(allResults, text, options);
// 
//         return allResults;
//     }
// 
//     public Date parseDate(String text) { return parseDate(text, new Date()); }
// 
//     public Date parseDate(String text, Date refDate) { return parseDate(text, refDate, this.options); }
// 
//     public Date parseDate(String text, Date refDate, ChronoOption option) {
// 
//         List<ParsedResult> results = this.parse(text, refDate, option);
//         if (results.size() > 0) {
//             return results.get(0).start.date();
//         }
// 
//         return null;
//     }
// 
//     protected List<ParsedResult> refineWithAllRefiners(List<ParsedResult> results,
//                                                        String text,
//                                                        ChronoOption options) {
// 
//         for (Refiner refiner : this.refiners) {
// 
//             results = refiner.refine(results, text, options);
//         }
// 
//         return results;
//     }
// 
// }
// 
// Path: src/test/java/com/wanasit/chrono/ParserTestAbstract.java
// public class ParserTestAbstract {
//     
//     public static void assertDateEquals(Date date1, Date date2) {
//         org.junit.Assert.assertEquals(date1.getTime(), date2.getTime(), 1000);
//     }
//     
//     public static void assertDateEquals(Date date1, ParsedDateComponent component) {
//         assertDateEquals(date1, component.date());
//     }
//     
//     protected Date refDate = null;
//     protected List<ParsedResult> results = null;
//     
//     @Before
//     public void setup() {
//         this.refDate = new Date();
//     }
//     
//     public Date createDate(int year, int month, int date, int hour, int minute) {
//         return createDate(year, month, date, hour, minute, 0);
//     }
//     
//     protected Date createDate(int year, int month, int date, int hour, int minute, int second) {
//         Calendar calendar = Calendar.getInstance();
//         calendar.set(year, month-1, date, hour, minute, second);
//         return calendar.getTime();
//     }
//     
//     
// }


import static org.junit.Assert.*;
import java.io.IOException;
import org.junit.Test;
import com.wanasit.chrono.Chrono;
import com.wanasit.chrono.ParserTestAbstract;
package com.wanasit.chrono.parser.jp;





public class JapaneseTimeParsingTest extends ParserTestAbstract {

    @Test
    public void testWithImpossibleDate() throws IOException {

	refDate = createDate(2014, 4, 20, 12, 0);
	results = Chrono.Parse("午後1３時半です", refDate);
	assertEquals(0, results.size());

	refDate = createDate(2014, 4, 20, 12, 0);
	results = Chrono.Parse("3３時半です", refDate);
	assertEquals(0, results.size());

	refDate = createDate(2014, 4, 20, 12, 0);
	results = Chrono.Parse("午後1３時７０分です", refDate);
	assertEquals(0, results.size());
    }

    @Test
    public void testWithSingleDateExpression() throws IOException {

	refDate = createDate(2014, 4, 20, 12, 0);
// Path: src/main/java/com/wanasit/chrono/Chrono.java
// public class Chrono {
// 
//     public static final Chrono casual = new Chrono(ChronoOption.casualOptions());
//     public static final Chrono standard = new Chrono(ChronoOption.standardOptions());
// 
//     public static List<ParsedResult> Parse(String text) {
//         return standard.parse(text);
//     }
// 
//     public static List<ParsedResult> Parse(String text, Date refDate) {
//         return standard.parse(text, refDate);
//     }
// 
//     public static List<ParsedResult> Parse(String text, Date refDate, ChronoOption option) {
//         return standard.parse(text, refDate, option);
//     }
// 
//     public static Date ParseDate(String text) { return standard.parseDate(text); }
// 
//     public static Date ParseDate(String text, Date refDate) { return standard.parseDate(text, refDate); }
// 
//     public static Date ParseDate(String text, Date refDate, ChronoOption option) {
//         return standard.parseDate(text, refDate, option);
//     }
// 
//     protected ChronoOption options = null;
//     protected List<Parser> parsers = null;
//     protected List<Refiner> refiners = null;
// 
//     public Chrono(ChronoOption options) {
//         this.options = options;
//         this.parsers = new ArrayList<Parser>(options.parsers);
//         this.refiners = new ArrayList<Refiner>(options.refiners);
//     }
// 
//     public List<ParsedResult> parse(String text) {
//         return parse(text, new Date());
//     }
// 
//     public List<ParsedResult> parse(String text, Date refDate) {
//         return parse(text, refDate, this.options);
//     }
// 
//     public List<ParsedResult> parse(String text, Date refDate, ChronoOption options) {
// 
//         List<ParsedResult> allResults = new LinkedList<ParsedResult>();
// 
//         for (Parser parser : this.parsers) {
// 
//             List<ParsedResult> results = parser.execute(text, refDate, options);
//             allResults.addAll(results);
//         }
// 
//         Collections.sort(allResults);
//         allResults = refineWithAllRefiners(allResults, text, options);
// 
//         return allResults;
//     }
// 
//     public Date parseDate(String text) { return parseDate(text, new Date()); }
// 
//     public Date parseDate(String text, Date refDate) { return parseDate(text, refDate, this.options); }
// 
//     public Date parseDate(String text, Date refDate, ChronoOption option) {
// 
//         List<ParsedResult> results = this.parse(text, refDate, option);
//         if (results.size() > 0) {
//             return results.get(0).start.date();
//         }
// 
//         return null;
//     }
// 
//     protected List<ParsedResult> refineWithAllRefiners(List<ParsedResult> results,
//                                                        String text,
//                                                        ChronoOption options) {
// 
//         for (Refiner refiner : this.refiners) {
// 
//             results = refiner.refine(results, text, options);
//         }
// 
//         return results;
//     }
// 
// }
// 
// Path: src/test/java/com/wanasit/chrono/ParserTestAbstract.java
// public class ParserTestAbstract {
//     
//     public static void assertDateEquals(Date date1, Date date2) {
//         org.junit.Assert.assertEquals(date1.getTime(), date2.getTime(), 1000);
//     }
//     
//     public static void assertDateEquals(Date date1, ParsedDateComponent component) {
//         assertDateEquals(date1, component.date());
//     }
//     
//     protected Date refDate = null;
//     protected List<ParsedResult> results = null;
//     
//     @Before
//     public void setup() {
//         this.refDate = new Date();
//     }
//     
//     public Date createDate(int year, int month, int date, int hour, int minute) {
//         return createDate(year, month, date, hour, minute, 0);
//     }
//     
//     protected Date createDate(int year, int month, int date, int hour, int minute, int second) {
//         Calendar calendar = Calendar.getInstance();
//         calendar.set(year, month-1, date, hour, minute, second);
//         return calendar.getTime();
//     }
//     
//     
// }


// Path: src/test/java/com/wanasit/chrono/parser/jp/JapaneseTimeParsingTest.java
import static org.junit.Assert.*;
import java.io.IOException;
import org.junit.Test;
import com.wanasit.chrono.Chrono;
import com.wanasit.chrono.ParserTestAbstract;

package com.wanasit.chrono.parser.jp;





public class JapaneseTimeParsingTest extends ParserTestAbstract {

    @Test
    public void testWithImpossibleDate() throws IOException {

	refDate = createDate(2014, 4, 20, 12, 0);
	results = Chrono.Parse("午後1３時半です", refDate);
	assertEquals(0, results.size());

	refDate = createDate(2014, 4, 20, 12, 0);
	results = Chrono.Parse("3３時半です", refDate);
	assertEquals(0, results.size());

	refDate = createDate(2014, 4, 20, 12, 0);
	results = Chrono.Parse("午後1３時７０分です", refDate);
	assertEquals(0, results.size());
    }

    @Test
    public void testWithSingleDateExpression() throws IOException {

	refDate = createDate(2014, 4, 20, 12, 0);
	results = Chrono.Parse("午後３時半です", refDate);