Skip to content
This repository was archived by the owner on Oct 14, 2025. It is now read-only.

Commit 113b326

Browse files
committed
feature(Conjugation) add verb conjugation support for Japanese, Hebrew and Arabic languages
Added: Unique parsers for extraordinary languages Covered in tests: Conjugation parse for Hebrew and Japanese languages Refactored: Were renamed Parse Services
1 parent 9a1cb69 commit 113b326

27 files changed

Lines changed: 2363 additions & 78 deletions

File tree

ReversoAPI.Web.Examples/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ internal class Program
44
{
55
private static readonly IReversoClient _reversoClient = new ReversoClient();
66

7-
static async Task Main(string[] args)
7+
static async Task Main()
88
{
99
var text = "run";
1010
var source = Language.English;

ReversoAPI.Web.Tests/Extensions/ParseExtesionsTests.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,5 +83,18 @@ public void RemoveHtmlTags_Test(string textWithHtml, string textWithoutHtml)
8383
// Assert
8484
Assert.Equal(textWithoutHtml, result);
8585
}
86+
87+
[Theory]
88+
89+
[InlineData("בָּרַחְתְּ/בָּרַחַתְּ", "בָּרַחְתְּ")]
90+
[InlineData("בָּרַחַתְּ", "בָּרַחַתְּ")]
91+
public void RemoveAlternativeWord_Test(string textWithAlternative, string textWithoutAlternative)
92+
{
93+
// Act
94+
var result = textWithAlternative.RemoveAlternativeWord();
95+
96+
// Assert
97+
Assert.Equal(textWithoutAlternative, result);
98+
}
8699
}
87100
}

ReversoAPI.Web.Tests/Parsers/ConjugationResponseParserTest.cs

Lines changed: 138 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class ConjugationResponseParserTest
1414
public void Invoke_Test(ConjugationData expectedResult, Stream html)
1515
{
1616
// Arrange
17-
var parser = new ConjugationParser();
17+
var parser = new ConjugationParserService();
1818

1919
// Act
2020
var result = parser.Invoke(html);
@@ -36,7 +36,7 @@ public static IEnumerable<object[]> HtmlResponsesForTest()
3636
Language = Language.English,
3737
Conjugations = new Dictionary<string, IEnumerable<Conjugation>>
3838
{
39-
{ "Indicative Present", new[]
39+
{ "Indicative Present", new[]
4040
{
4141
new Conjugation("Indicative Present", "run", Language.English),
4242
new Conjugation("Indicative Present", "runs", Language.English),
@@ -134,7 +134,7 @@ public static IEnumerable<object[]> HtmlResponsesForTest()
134134
};
135135

136136
yield return new object[]
137-
{
137+
{
138138
new ConjugationData
139139
{
140140
Text = "cair",
@@ -294,7 +294,141 @@ public static IEnumerable<object[]> HtmlResponsesForTest()
294294
}
295295
},
296296
new MemoryStream(Encoding.UTF8.GetBytes(Resource.Conjugation_Parse_Test_Portuguese)),
297-
};
297+
};
298+
299+
yield return new object[]
300+
{
301+
new ConjugationData
302+
{
303+
Text = "逃げる",
304+
Language = Language.Japanese,
305+
Conjugations = new Dictionary<string, IEnumerable<Conjugation>>
306+
{
307+
{ "Present Positive Informal", new[]
308+
{
309+
new Conjugation("Present Positive Informal", "逃げる", Language.Japanese),
310+
new Conjugation("Present Positive Informal", "逃げます", Language.Japanese),
311+
new Conjugation("Present Positive Informal", "逃げない", Language.Japanese),
312+
new Conjugation("Present Positive Informal", "逃げません", Language.Japanese),
313+
}},
314+
{ "Past Positive Informal", new[]
315+
{
316+
new Conjugation("Past Positive Informal", "逃げた", Language.Japanese),
317+
new Conjugation("Past Positive Informal", "逃げました", Language.Japanese),
318+
new Conjugation("Past Positive Informal", "逃げなかった", Language.Japanese),
319+
new Conjugation("Past Positive Informal", "逃げませんでした", Language.Japanese),
320+
}},
321+
{ "Te Form Positive Informal", new[]
322+
{
323+
new Conjugation("Te Form Positive Informal", "逃げて", Language.Japanese),
324+
new Conjugation("Te Form Positive Informal", "逃げなくて", Language.Japanese),
325+
}},
326+
{ "Volitional Positive Informal", new[]
327+
{
328+
new Conjugation("Volitional Positive Informal", "逃げよう", Language.Japanese),
329+
new Conjugation("Volitional Positive Informal", "逃げましょう", Language.Japanese),
330+
}},
331+
{ "Potential Positive Informal", new[]
332+
{
333+
new Conjugation("Potential Positive Informal", "逃げられる", Language.Japanese),
334+
new Conjugation("Potential Positive Informal", "逃げられます", Language.Japanese),
335+
new Conjugation("Potential Positive Informal", "逃げられない", Language.Japanese),
336+
new Conjugation("Potential Positive Informal", "逃げられません", Language.Japanese),
337+
}},
338+
{ "Passive Positive Informal", new[]
339+
{
340+
new Conjugation("Passive Positive Informal", "逃げられる", Language.Japanese),
341+
new Conjugation("Passive Positive Informal", "逃げられます", Language.Japanese),
342+
new Conjugation("Passive Positive Informal", "逃げられない", Language.Japanese),
343+
new Conjugation("Passive Positive Informal", "逃げられません", Language.Japanese),
344+
}},
345+
{ "Causative Positive Informal", new[]
346+
{
347+
new Conjugation("Causative Positive Informal", "逃げさせる", Language.Japanese),
348+
new Conjugation("Causative Positive Informal", "逃げさせます", Language.Japanese),
349+
new Conjugation("Causative Positive Informal", "逃げさせない", Language.Japanese),
350+
new Conjugation("Causative Positive Informal", "逃げさせません", Language.Japanese),
351+
}},
352+
{ "Imperative Positive Informal", new[]
353+
{
354+
new Conjugation("Imperative Positive Informal", "逃げよ/逃げろ", Language.Japanese),
355+
new Conjugation("Imperative Positive Informal", "逃げてください", Language.Japanese),
356+
new Conjugation("Imperative Positive Informal", "逃げるな", Language.Japanese),
357+
new Conjugation("Imperative Positive Informal", "逃げないでください", Language.Japanese),
358+
}},
359+
{ "Conditional Positive Informal", new[]
360+
{
361+
new Conjugation("Conditional Positive Informal", "逃げれば", Language.Japanese),
362+
new Conjugation("Conditional Positive Informal", "逃げなければ", Language.Japanese),
363+
}},
364+
{ "Conditional (-tara) Positive Informal", new[]
365+
{
366+
new Conjugation("Conditional (-tara) Positive Informal", "逃げたら", Language.Japanese),
367+
new Conjugation("Conditional (-tara) Positive Informal", "逃げなかったら", Language.Japanese),
368+
}},
369+
}
370+
},
371+
new MemoryStream(Encoding.UTF8.GetBytes(Resource.Conjugation_Parse_Test_Japanese)),
372+
};
373+
374+
yield return new object[]
375+
{
376+
new ConjugationData
377+
{
378+
Text = "לברוח",
379+
Language = Language.Hebrew,
380+
Conjugations = new Dictionary<string, IEnumerable<Conjugation>>
381+
{
382+
{ "Present", new[]
383+
{
384+
new Conjugation("Present", "בּוֹרַחַת", Language.Hebrew),
385+
new Conjugation("Present", "בּוֹרְחוֹת", Language.Hebrew),
386+
new Conjugation("Present", "בּוֹרֵחַ", Language.Hebrew),
387+
new Conjugation("Present", "בּוֹרְחִים", Language.Hebrew),
388+
}},
389+
{ "Past", new[]
390+
{
391+
new Conjugation("Past", "בָּרַחְתִּי", Language.Hebrew),
392+
new Conjugation("Past", "בָּרַחְתְּ", Language.Hebrew),
393+
new Conjugation("Past", "בָּרְחָה", Language.Hebrew),
394+
new Conjugation("Past", "בָּרַחְתָּ", Language.Hebrew),
395+
new Conjugation("Past", "בָּרַח", Language.Hebrew),
396+
new Conjugation("Past", "בָּרַחְנוּ", Language.Hebrew),
397+
new Conjugation("Past", "בְּרַחְתֶּן", Language.Hebrew),
398+
new Conjugation("Past", "בָּרְחוּ", Language.Hebrew),
399+
new Conjugation("Past", "בְּרַחְתֶּם", Language.Hebrew),
400+
}},
401+
{ "Future", new[]
402+
{
403+
new Conjugation("Future", "אֶבְרַח", Language.Hebrew),
404+
new Conjugation("Future", "תִּבְרְחִי", Language.Hebrew),
405+
new Conjugation("Future", "תִּבְרַח", Language.Hebrew),
406+
new Conjugation("Future", "יִבְרַח", Language.Hebrew),
407+
new Conjugation("Future", "נִבְרַח", Language.Hebrew),
408+
new Conjugation("Future", "תִּבְרְחוּ", Language.Hebrew),
409+
new Conjugation("Future", "יִבְרְחוּ", Language.Hebrew),
410+
}},
411+
{ "Imperative", new[]
412+
{
413+
new Conjugation("Imperative", "בִּרְחִי", Language.Hebrew),
414+
new Conjugation("Imperative", "בִּרְחוּ", Language.Hebrew),
415+
new Conjugation("Imperative", "בְּרַח", Language.Hebrew),
416+
}},
417+
{ "Passive Participle", new[]
418+
{
419+
new Conjugation("Passive Participle", "בְּרוּחָה", Language.Hebrew),
420+
new Conjugation("Passive Participle", "בְּרוּחוֹת", Language.Hebrew),
421+
new Conjugation("Passive Participle", "בָּרוּחַ", Language.Hebrew),
422+
new Conjugation("Passive Participle", "בְּרוּחִים", Language.Hebrew),
423+
}},
424+
{ "Infinitive", new[]
425+
{
426+
new Conjugation("Infinitive", "לִבְרוֹחַ", Language.Hebrew),
427+
}}
428+
}
429+
},
430+
new MemoryStream(Encoding.UTF8.GetBytes(Resource.Conjugation_Parse_Test_Hebrew)),
431+
};
298432
}
299433

300434
#endregion

ReversoAPI.Web.Tests/Parsers/ContextResponseParserTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class ContextResponseParserTest
1414
public void Invoke_Test(ContextData expectedResult, Stream html)
1515
{
1616
// Arrange
17-
var parser = new ContextParser();
17+
var parser = new ContextParserService();
1818

1919
// Act
2020
var result = parser.Invoke(html);

ReversoAPI.Web.Tests/Parsers/SynonymsResponseParserTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class SynonymsResponseParserTest
1414
public void Invoke_Test(SynonymsData expectedResult, Stream html)
1515
{
1616
// Arrange
17-
var parser = new SynonymsParser();
17+
var parser = new SynonymsParserService();
1818

1919
// Act
2020
var result = parser.Invoke(html);

ReversoAPI.Web.Tests/Resource.Designer.cs

Lines changed: 34 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ReversoAPI.Web.Tests/Resource.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,12 @@
121121
<data name="Conjugation_Parse_Test_English" type="System.Resources.ResXFileRef, System.Windows.Forms">
122122
<value>Resources\Conjugation_Parse_Test_English.html;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
123123
</data>
124+
<data name="Conjugation_Parse_Test_Hebrew" type="System.Resources.ResXFileRef, System.Windows.Forms">
125+
<value>Resources\Conjugation_Parse_Test_Hebrew.html;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
126+
</data>
127+
<data name="Conjugation_Parse_Test_Japanese" type="System.Resources.ResXFileRef, System.Windows.Forms">
128+
<value>Resources\Conjugation_Parse_Test_Japanese.html;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
129+
</data>
124130
<data name="Conjugation_Parse_Test_Portuguese" type="System.Resources.ResXFileRef, System.Windows.Forms">
125131
<value>Resources\Conjugation_Parse_Test_Portuguese.html;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
126132
</data>

0 commit comments

Comments
 (0)