diff --git a/src/locales/ja/parsers/JPCasualDateParser.ts b/src/locales/ja/parsers/JPCasualDateParser.ts index e0559ef1..293a1ff7 100644 --- a/src/locales/ja/parsers/JPCasualDateParser.ts +++ b/src/locales/ja/parsers/JPCasualDateParser.ts @@ -3,7 +3,30 @@ import dayjs from "dayjs"; import { Meridiem } from "../../../index"; import * as references from "../../../common/casualReferences"; -const PATTERN = /今日|当日|昨日|明日|今夜|今夕|今晩|今朝/i; +const PATTERN = /今日|きょう|当日|とうじつ|昨日|きのう|明日|あした|今夜|こんや|今夕|こんゆう|今晩|こんばん|今朝|けさ/i; + +function normalizeTextToKanji(text: string) { + switch (text) { + case "きょう": + return "今日"; + case "とうじつ": + return "当日"; + case "きのう": + return "昨日"; + case "あした": + return "明日"; + case "こんや": + return "今夜"; + case "こんゆう": + return "今夕"; + case "こんばん": + return "今晩"; + case "けさ": + return "今朝"; + default: + return text; + } +} export default class JPCasualDateParser implements Parser { pattern() { @@ -11,7 +34,7 @@ export default class JPCasualDateParser implements Parser { } extract(context: ParsingContext, match: RegExpMatchArray) { - const text = match[0]; + const text = normalizeTextToKanji(match[0]); const date = dayjs(context.refDate); const components = context.createParsingComponents(); diff --git a/test/ja/ja_casual.test.ts b/test/ja/ja_casual.test.ts index 97e8c8b0..472d12b1 100644 --- a/test/ja/ja_casual.test.ts +++ b/test/ja/ja_casual.test.ts @@ -3,26 +3,63 @@ import { testSingleCase } from "../test_util"; test("Test - Single Expression", function () { testSingleCase(chrono.ja, "今日感じたことを忘れずに", new Date(2012, 8 - 1, 10, 12), (result) => { - expect(result.index).toBe(0); expect(result.text).toBe("今日"); - - expect(result.start).not.toBeNull(); - expect(result.start.get("year")).toBe(2012); - expect(result.start.get("month")).toBe(8); - expect(result.start.get("day")).toBe(10); - + expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12)); + }); + testSingleCase(chrono.ja, "きょう感じたことを忘れずに", new Date(2012, 8 - 1, 10, 12), (result) => { + expect(result.text).toBe("きょう"); expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12)); }); testSingleCase(chrono.ja, "昨日の全国観測値ランキング", new Date(2012, 8 - 1, 10, 12), (result) => { - expect(result.index).toBe(0); expect(result.text).toBe("昨日"); + expect(result.start).toBeDate(new Date(2012, 8 - 1, 9, 12)); + }); + testSingleCase(chrono.ja, "きのうの全国観測値ランキング", new Date(2012, 8 - 1, 10, 12), (result) => { + expect(result.text).toBe("きのう"); + expect(result.start).toBeDate(new Date(2012, 8 - 1, 9, 12)); + }); - expect(result.start).not.toBeNull(); - expect(result.start.get("year")).toBe(2012); - expect(result.start.get("month")).toBe(8); - expect(result.start.get("day")).toBe(9); + testSingleCase(chrono.ja, "明日の天気は晴れです", new Date(2012, 8 - 1, 10, 12), (result) => { + expect(result.text).toBe("明日"); + expect(result.start).toBeDate(new Date(2012, 8 - 1, 11, 12)); + }); + testSingleCase(chrono.ja, "あしたの天気は晴れです", new Date(2012, 8 - 1, 10, 12), (result) => { + expect(result.text).toBe("あした"); + expect(result.start).toBeDate(new Date(2012, 8 - 1, 11, 12)); + }); - expect(result.start).toBeDate(new Date(2012, 8 - 1, 9, 12)); + testSingleCase(chrono.ja, "今夜には雨が降るでしょう", new Date(2012, 8 - 1, 10, 12), (result) => { + expect(result.text).toBe("今夜"); + expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 22)); + }); + testSingleCase(chrono.ja, "こんやには雨が降るでしょう", new Date(2012, 8 - 1, 10, 12), (result) => { + expect(result.text).toBe("こんや"); + expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 22)); + }); + testSingleCase(chrono.ja, "今夕には雨が降るでしょう", new Date(2012, 8 - 1, 10, 12), (result) => { + expect(result.text).toBe("今夕"); + expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 22)); + }); + testSingleCase(chrono.ja, "こんゆうには雨が降るでしょう", new Date(2012, 8 - 1, 10, 12), (result) => { + expect(result.text).toBe("こんゆう"); + expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 22)); + }); + testSingleCase(chrono.ja, "今晩には雨が降るでしょう", new Date(2012, 8 - 1, 10, 12), (result) => { + expect(result.text).toBe("今晩"); + expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 22)); + }); + testSingleCase(chrono.ja, "こんばんには雨が降るでしょう", new Date(2012, 8 - 1, 10, 12), (result) => { + expect(result.text).toBe("こんばん"); + expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 22)); + }); + + testSingleCase(chrono.ja, "今朝食べたパンは美味しかった", new Date(2012, 8 - 1, 10, 12), (result) => { + expect(result.text).toBe("今朝"); + expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 6)); + }); + testSingleCase(chrono.ja, "けさ食べたパンは美味しかった", new Date(2012, 8 - 1, 10, 12), (result) => { + expect(result.text).toBe("けさ"); + expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 6)); }); });