KanaUtils.tests.ps1

#Requires -Module @{ ModuleName = 'Pester'; ModuleVersion = '5.1.0' }

Import-Module .\KanaUtils.psm1 -Force

InModuleScope KanaUtils {
    Describe 'Convert-KanaToRomaji' {
        It '(empty string) => (empty string)' {
            $Kana = ''
            $Expect = ''
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'あいうえお => aiueo' {
            $Kana = 'あいうえお'
            $Expect = 'aiueo'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'あ お => a o' {
            $Kana = 'あ お'
            $Expect = 'a o'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'カキクケコワヲン => kakikukekowaon' {
            $Kana = 'カキクケコワヲン'
            $Expect = 'kakikukekowaon'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'カンダ ジュン => kanda jun' {
            $Kana = 'カンダ ジュン'
            $Expect = 'kanda jun'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'ナンバ サンペイ => namba sampei' {
            $Kana = 'ナンバ サンペイ'
            $Expect = 'namba sampei'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'ハットリ ハッチョウ => hattori hatcho' {
            $Kana = 'ハットリ ハッチョウ'
            $Expect = 'hattori hatcho'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'ニーナ => nina' {
            $Kana = 'ニーナ'
            $Expect = 'nina'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'ニイナ => niina' {
            $Kana = 'ニイナ'
            $Expect = 'niina'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'ヒュウガ ユウキ => hyuga yuki' {
            $Kana = 'ヒュウガ ユウキ'
            $Expect = 'hyuga yuki'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'コウタ リョウコ => kota ryoko' {
            $Kana = 'コウタ リョウコ'
            $Expect = 'kota ryoko'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'オノ オオノ オオコウチ => ono ono okochi' {
            $Kana = 'オノ オオノ オオコウチ'
            $Expect = 'ono ono okochi'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'セノオ タカトオ => senoo takatoo' {
            $Kana = 'セノオ タカトオ'
            $Expect = 'senoo takatoo'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'ミソノウ タカトウ => misono takato' {
            $Kana = 'ミソノウ タカトウ'
            $Expect = 'misono takato'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'ヴィヴィアン チャギュン => buibuian chagyun' {
            $Kana = 'ヴィヴィアン チャギュン'
            $Expect = 'buibuian chagyun'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'デュポン => deyupon' {
            $Kana = 'デュポン'
            $Expect = 'deyupon'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'デャ デュ デョ => deya deyu deyo' {
            $Kana = 'デャ デュ デョ'
            $Expect = 'deya deyu deyo'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It '吉田 タケシ => ERROR' {
            $Kana = '吉田 タケシ'
            $Expect = '吉田 takeshi'
            { Convert-KanaToRomaji -Kana $Kana -ErrorAction Stop } | Should -Throw
            Convert-KanaToRomaji -Kana $Kana -ErrorAction SilentlyContinue | Should -BeExactly $Expect
        }

        # パイプライン入力
        It '(pipeline) カンダ ジュン => kanda jun' {
            $Kana = 'カンダ ジュン'
            $Expect = 'kanda jun'
            $Kana | Convert-KanaToRomaji | Should -BeExactly $Expect
        }

        It '(pipeline) カンダ, ジュン => kanda, jun' {
            $InputKana = @('カンダ', 'ジュン')
            $Expect = @('kanda', 'jun')
            $InputKana | Convert-KanaToRomaji | Should -BeExactly $Expect
        }

        #V2:人名例外
        It 'イノウエ タキノウエ ノウエン => inoue takinoue noen' {
            $Kana = 'イノウエ タキノウエ ノウエン'
            $Expect = 'inoue takinoue noen'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'マツウラ カツウラ ミウラ コウラ コウラン => matsuura katsuura miura kora koran' {
            $Kana = 'マツウラ カツウラ ミウラ コウラ コウラン'
            $Expect = 'matsuura katsuura miura kora koran'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'ウチワ コウチワ オオウチワ オウコウチ オオコウチ => uchiwa kouchiwa ouchiwa okochi okochi' {
            $Kana = 'ウチワ コウチワ オオウチワ オウコウチ オオコウチ'
            $Expect = 'uchiwa kouchiwa ouchiwa okochi okochi'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }

        It 'オオウチ コウチ オウチ ジョウノウチ => ouchi kochi ochi jonochi' {
            $Kana = 'オオウチ コウチ オウチ ジョウノウチ'
            $Expect = 'ouchi kochi ochi jonochi'
            Convert-KanaToRomaji -Kana $Kana | Should -BeExactly $Expect
        }
    }

    Describe 'Convert-HiraganaToKatakana' {
        It '(empty string) => (empty string)' {
            $Kana = ''
            $Expect = ''
            Convert-HiraganaToKatakana -Hiragana $Kana | Should -BeExactly $Expect
        }

        It 'あいうえお => アイウエオ' {
            $Kana = 'あいうえお'
            $Expect = 'アイウエオ'
            Convert-HiraganaToKatakana -Hiragana $Kana | Should -BeExactly $Expect
        }

        It 'ちゃん・ぐんそく => チャン・グンソク' {
            $Kana = 'ちゃん・ぐんそく'
            $Expect = 'チャン・グンソク'
            Convert-HiraganaToKatakana -Hiragana $Kana | Should -BeExactly $Expect
        }

        It '吉田 alphaX09 ワをン ナにヌねノ => 吉田 alphaX09 ワヲン ナニヌネノ' {
            $Kana = '吉田 alphaX09 ワをン ナにヌねノ'
            $Expect = '吉田 alphaX09 ワヲン ナニヌネノ'
            Convert-HiraganaToKatakana -Hiragana $Kana | Should -BeExactly $Expect
        }
    }

    Describe 'Convert-KatakanaToHiragana' {
        It '(empty string) => (empty string)' {
            $Kana = ''
            $Expect = ''
            Convert-KatakanaToHiragana -Katakana $Kana | Should -BeExactly $Expect
        }

        It 'アイウエオ => あいうえお' {
            $Kana = 'アイウエオ'
            $Expect = 'あいうえお'
            Convert-KatakanaToHiragana -Katakana $Kana | Should -BeExactly $Expect
        }

        It 'チャン・グンソク => ちゃん・ぐんそく' {
            $Kana = 'チャン・グンソク'
            $Expect = 'ちゃん・ぐんそく'
            Convert-KatakanaToHiragana -Katakana $Kana | Should -BeExactly $Expect
        }

        It '吉田 alphaX09 ワをン ナにヌねノ => 吉田 alphaX09 わをん なにぬねの' {
            $Kana = '吉田 alphaX09 ワをン ナにヌねノ'
            $Expect = '吉田 alphaX09 わをん なにぬねの'
            Convert-KatakanaToHiragana -Katakana $Kana | Should -BeExactly $Expect
        }
    }
}