Skip to content

Commit

Permalink
refer assembly directory instead of process directory for loading bun…
Browse files Browse the repository at this point in the history
…dled mecab dictionary
  • Loading branch information
smdn committed Dec 28, 2022
1 parent 297974d commit 67a756d
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 38 deletions.
22 changes: 6 additions & 16 deletions src/Smdn.Text.Ondulish/Smdn.Text.Ondulish/Translator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;

using MeCab;
Expand All @@ -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");
Expand All @@ -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
)
{
Expand Down
38 changes: 16 additions & 22 deletions tests/Smdn.Text.Ondulish/Smdn.Text.Ondulish/Translator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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));
Expand All @@ -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
Expand Down Expand Up @@ -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,
Expand All @@ -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(
"オンドゥルルラギッタンディスカー",
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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<ArgumentNullException>(() => t.Translate(input: null!, convertKatakanaToNarrow: convertKatakanaToNarrow));
}
Expand All @@ -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);
Expand All @@ -165,15 +159,15 @@ 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<ArgumentNullException>(() => t.Translate(input: null!, convertKatakanaToNarrow: convertKatakanaToNarrow, output: TextWriter.Null));
}

[Test]
public void Translate_ToTextWriter_OutputNull([Values(true, false)] bool convertKatakanaToNarrow)
{
using var t = Create();
using var t = new Translator();

Assert.Throws<ArgumentNullException>(() => t.Translate(input: string.Empty, convertKatakanaToNarrow: convertKatakanaToNarrow, output: null!));
}
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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 = "";
Expand All @@ -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 = "";
Expand Down

0 comments on commit 67a756d

Please sign in to comment.