Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 30 additions & 2 deletions Source/Porticle.CLDR.Units.Tests/UnitTests.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System.Globalization;
using Porticle.CLDR.Units.Serialization;

namespace Porticle.CLDR.Units.Tests;
Expand Down Expand Up @@ -50,7 +51,7 @@ public void TestAll()
{
foreach (var count in (int[])[0,1,2,3,11,21,111,121])
{
var result = cldrUnits.GetFormatString(lang, count, PluralFormLength.Long, grammaticalCase);
var result = cldrUnits.GetFormatString(lang, count, pluralFormLength, grammaticalCase);
Assert.IsNotNull(result);
Assert.IsTrue(result.Length > 0);
if (count > 2)
Expand All @@ -63,4 +64,31 @@ public void TestAll()
}
}
}
}

[TestMethod]
public void FormatUnit_UsesFallbackForShortPatterns()
{
var cldrUnits = new CldrUnits(Unit.AreaBuJp);
var culture = new CultureInfo("de");

var formatted = cldrUnits.FormatUnit(culture, 123, PluralFormLength.Short, GrammaticalCase.Oblique);
Assert.AreEqual("123 歩", formatted);

var formattedWithNumberFormat = cldrUnits.FormatUnit(culture, 123, PluralFormLength.Short, GrammaticalCase.Oblique, "N2");
Assert.AreEqual("123,00 歩", formattedWithNumberFormat);
}

[TestMethod]
public void FormatUnit_UsesFallbackForNarrowPatterns()
{
var cldrUnits = new CldrUnits(Unit.AreaBuJp);
var culture = new CultureInfo("de");

var formatted = cldrUnits.FormatUnit(culture, 321, PluralFormLength.Narrow, GrammaticalCase.Oblique);
Assert.AreEqual("321歩", formatted);

var formattedWithNumberFormat = cldrUnits.FormatUnit(culture, 321, PluralFormLength.Narrow, GrammaticalCase.Oblique, "N1");
Assert.AreEqual("321,0歩", formattedWithNumberFormat);
}
}

8 changes: 4 additions & 4 deletions Source/Porticle.CLDR.Units/CldrUnits.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public CldrUnits(Unit unit)
/// <returns>The format String like "{0} weeks"</returns>
public string GetFormatString(string language, int count, PluralFormLength length, GrammaticalCase grammaticalCase)
{
return _patterns.GetFormat(language, count, length, grammaticalCase) ?? GetFallbackPattern(PluralFormLength.Long);
return _patterns.GetFormat(language, count, length, grammaticalCase) ?? GetFallbackPattern(length);
}

/// <summary>
Expand All @@ -61,7 +61,7 @@ public string GetFormatString(string language, int count, PluralFormLength lengt
/// <returns>A format string that matches the specified culture, count, plural form length, and grammatical case. If no specific format string is found, a fallback pattern is returned.</returns>
public string GetFormatString(CultureInfo culture, int count, PluralFormLength length, GrammaticalCase grammaticalCase)
{
return _patterns.GetFormat(culture.Name, count, length, grammaticalCase) ?? GetFallbackPattern(PluralFormLength.Long);
return _patterns.GetFormat(culture.Name, count, length, grammaticalCase) ?? GetFallbackPattern(length);
}

/// <summary>
Expand All @@ -81,10 +81,10 @@ public string FormatUnit(CultureInfo culture, int count, PluralFormLength length
{
if (numberFormat == null)
{
return string.Format(culture, _patterns.GetFormat(culture.Name, count, length, grammaticalCase) ?? GetFallbackPattern(PluralFormLength.Long), count);
return string.Format(culture, _patterns.GetFormat(culture.Name, count, length, grammaticalCase) ?? GetFallbackPattern(length), count);
}

return string.Format(culture, _patterns.GetFormat(culture.Name, count, length, grammaticalCase) ?? GetFallbackPattern(PluralFormLength.Long),
return string.Format(culture, _patterns.GetFormat(culture.Name, count, length, grammaticalCase) ?? GetFallbackPattern(length),
count.ToString(numberFormat, culture));
}

Expand Down