diff --git a/src/Smdn.Text.Ondulish/Smdn.Text.Ondulish/Translator.cs b/src/Smdn.Text.Ondulish/Smdn.Text.Ondulish/Translator.cs index 90a5909..1e2a873 100644 --- a/src/Smdn.Text.Ondulish/Smdn.Text.Ondulish/Translator.cs +++ b/src/Smdn.Text.Ondulish/Smdn.Text.Ondulish/Translator.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Reflection; using System.Text; using MeCab; @@ -31,14 +32,12 @@ private void ThrowIfDisposed() throw new ObjectDisposedException(GetType().FullName); } - public static Tagger CreateTaggerForBundledDictionary(string processDirectoryPath) + public static Tagger CreateTaggerForBundledDictionary() { - if (processDirectoryPath is null) - throw new ArgumentNullException(nameof(processDirectoryPath)); - - var mecabDeploymentDirectoryPath = processDirectoryPath.Length == 0 + var assemblyDirectory = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + var mecabDeploymentDirectoryPath = string.IsNullOrEmpty(assemblyDirectory) ? MeCabDeploymentDirectory // fallback: use relative path from current directory - : System.IO.Path.Join(processDirectoryPath, MeCabDeploymentDirectory); + : System.IO.Path.Join(assemblyDirectory, MeCabDeploymentDirectory); var pathToMeCabResourceFile = System.IO.Path.Join(mecabDeploymentDirectoryPath, "null.mecabrc"); var pathToMeCabDictionaryDirectory = System.IO.Path.Join(mecabDeploymentDirectoryPath, "dic", "ipadic"); @@ -48,18 +47,9 @@ public static Tagger CreateTaggerForBundledDictionary(string processDirectoryPat return new Tagger(taggerArgs); } - private static string? GetProcessDirectory() -#if SYSTEM_ENVIRONMENT_PROCESSPATH - => System.IO.Path.GetDirectoryName(Environment.ProcessPath); -#else - => System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); -#endif - public Translator() : this( - tagger: CreateTaggerForBundledDictionary( - GetProcessDirectory() ?? string.Empty // fallback: use relative path from current directory - ), + tagger: CreateTaggerForBundledDictionary(), shouldDisposeTagger: true ) { diff --git a/tests/Smdn.Text.Ondulish/Smdn.Text.Ondulish/Translator.cs b/tests/Smdn.Text.Ondulish/Smdn.Text.Ondulish/Translator.cs index ead95fb..81dc82c 100644 --- a/tests/Smdn.Text.Ondulish/Smdn.Text.Ondulish/Translator.cs +++ b/tests/Smdn.Text.Ondulish/Smdn.Text.Ondulish/Translator.cs @@ -10,16 +10,10 @@ namespace Smdn.Text.Ondulish; [TestFixture] public class TranslatorTests { - private static Translator Create() - => new( - tagger: Translator.CreateTaggerForBundledDictionary(processDirectoryPath: TestContext.CurrentContext.TestDirectory), - shouldDisposeTagger: true - ); - [Test] public void Ctor() { - using var t = Create(); + using var t = new Translator(); Assert.IsNotNull(t); Assert.DoesNotThrow(t.Dispose); @@ -35,7 +29,7 @@ public void Ctor_ArgumentNull() [Test] public void Dispose() { - using var t = Create(); + using var t = new Translator(); Assert.DoesNotThrow(() => t.Translate("input", convertKatakanaToNarrow: true)); Assert.DoesNotThrow(() => t.Translate("input", convertKatakanaToNarrow: false)); @@ -54,7 +48,7 @@ public void Dispose() [Test] public void Dispose_DisposeComposedTagger([Values(true, false)] bool shouldDisposeTagger) { - using var tagger = Translator.CreateTaggerForBundledDictionary(TestContext.CurrentContext.TestDirectory); + using var tagger = Translator.CreateTaggerForBundledDictionary(); using var t = new Translator( tagger: tagger, shouldDisposeTagger: shouldDisposeTagger @@ -89,7 +83,7 @@ public void Dispose_DisposeComposedTagger([Values(true, false)] bool shouldDispo [TestCase(@"オンドゥル😆😄", @"オンドゥル😆😄")] public void Translate(string input, string expected) { - using var t = Create(); + using var t = new Translator(); Assert.AreEqual( expected, @@ -100,7 +94,7 @@ public void Translate(string input, string expected) [Test] public void Translate_SingleLine() { - using var t = Create(); + using var t = new Translator(); Assert.AreEqual( "オンドゥルルラギッタンディスカー", @@ -119,7 +113,7 @@ public void Translate_MultipleLines() オンドゥルルラギッタンディスカー".Replace("\r", string.Empty).Replace("\n", Environment.NewLine); - using var t = Create(); + using var t = new Translator(); Assert.AreEqual( expected, @@ -132,7 +126,7 @@ public void Translate_MultipleLines() [TestCase("めかぶ", "ベカム")] public void Translate_ConvertKatakanaToNarrowDefaultValue(string input, string expected) { - using var t = Create(); + using var t = new Translator(); Assert.AreEqual( expected, @@ -143,7 +137,7 @@ public void Translate_ConvertKatakanaToNarrowDefaultValue(string input, string e [Test] public void Translate_InputNull([Values(true, false)] bool convertKatakanaToNarrow) { - using var t = Create(); + using var t = new Translator(); Assert.Throws(() => t.Translate(input: null!, convertKatakanaToNarrow: convertKatakanaToNarrow)); } @@ -153,7 +147,7 @@ public void Translate_InputNull([Values(true, false)] bool convertKatakanaToNarr [TestCase("変身", "ヘシン")] public void Translate_ToTextWriter(string input, string expectedOutput) { - using var t = Create(); + using var t = new Translator(); var sb = new StringBuilder(); var writer = new StringWriter(sb); @@ -165,7 +159,7 @@ public void Translate_ToTextWriter(string input, string expectedOutput) [Test] public void Translate_ToTextWriter_InputNull([Values(true, false)] bool convertKatakanaToNarrow) { - using var t = Create(); + using var t = new Translator(); Assert.Throws(() => t.Translate(input: null!, convertKatakanaToNarrow: convertKatakanaToNarrow, output: TextWriter.Null)); } @@ -173,7 +167,7 @@ public void Translate_ToTextWriter_InputNull([Values(true, false)] bool convertK [Test] public void Translate_ToTextWriter_OutputNull([Values(true, false)] bool convertKatakanaToNarrow) { - using var t = Create(); + using var t = new Translator(); Assert.Throws(() => t.Translate(input: string.Empty, convertKatakanaToNarrow: convertKatakanaToNarrow, output: null!)); } @@ -186,7 +180,7 @@ public void Translate_ToTextWriter_OutputNull([Values(true, false)] bool convert [TestCase("あいするな", "ア゙イドゥルダ")] public void Translate_ToNarrowKatakana(string input, string expected) { - using var t = Create(); + using var t = new Translator(); Assert.AreEqual( expected, @@ -198,7 +192,7 @@ public void Translate_ToNarrowKatakana(string input, string expected) [TestCase("貴様、相手は俺だ", "クサム、アンギョン和田")] public void Translate_SpecialCase(string input, string expected) { - using var t = Create(); + using var t = new Translator(); Assert.AreEqual( expected, @@ -222,7 +216,7 @@ public void Translate_SpecialCase(string input, string expected) [TestCase("おんどぅ", "オンドゥ")] public void Translate_Phoneme(string input, string expected) { - using var t = Create(); + using var t = new Translator(); Assert.AreEqual( expected, @@ -233,7 +227,7 @@ public void Translate_Phoneme(string input, string expected) [Test] public void Translate_DictionaryTerm_Words() { - using var t = Create(); + using var t = new Translator(); foreach (var pair in t.WordDictionary) { const string inputPrepend = "あ"; @@ -251,7 +245,7 @@ public void Translate_DictionaryTerm_Words() [Test] public void Translate_DictionaryTerm_Phrases() { - using var t = Create(); + using var t = new Translator(); foreach (var pair in t.PhraseDictionary) { const string inputPrepend = "あ";