Skip to content

Commit

Permalink
refactoring after merging, add meta data to project builds
Browse files Browse the repository at this point in the history
  • Loading branch information
Aleksey Gallyamov committed Aug 5, 2018
1 parent 48ba07c commit c2901e8
Show file tree
Hide file tree
Showing 18 changed files with 763 additions and 1,026 deletions.
3 changes: 1 addition & 2 deletions PawnHunter.Numerals.Tests/PawnHunter.Numerals.Tests.csproj
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>

<IsPackable>false</IsPackable>
</PropertyGroup>

Expand Down
180 changes: 91 additions & 89 deletions PawnHunter.Numerals.Tests/ReadmeBasedTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,119 +7,121 @@ namespace PawnHunter.Numerals.Tests
public class ReadmeBasedTests
{
[Fact]
public void Readme_example_1()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("ru-RU") };
public void Readme_example_1()
{
var formatter = new NumeralsFormatter {CultureInfo = new CultureInfo("ru-RU")};

var format = "Inbox: {0} {0:W;новое,новых} {0:W;сообщение,сообщения,сообщений}";
var format = "Inbox: {0} {0:W;новое,новых} {0:W;сообщение,сообщения,сообщений}";

Assert.Equal("Inbox: 1 новое сообщение", string.Format(formatter, format, 1));
Assert.Equal("Inbox: 2 новых сообщения", string.Format(formatter, format, 2));
Assert.Equal("Inbox: 5 новых сообщений", string.Format(formatter, format, 5));
}
Assert.Equal("Inbox: 1 новое сообщение", string.Format(formatter, format, 1));
Assert.Equal("Inbox: 2 новых сообщения", string.Format(formatter, format, 2));
Assert.Equal("Inbox: 5 новых сообщений", string.Format(formatter, format, 5));
}

[Fact]
public void Readme_example_2()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("ru-RU") };

var format = "Inbox: {0} {0:W;нов(ое,ых)} {0:W;сообщени(е,я,й)}";

Assert.Equal("Inbox: 1 новое сообщение", string.Format(formatter, format, 1));
Assert.Equal("Inbox: 2 новых сообщения", string.Format(formatter, format, 2));
Assert.Equal("Inbox: 5 новых сообщений", string.Format(formatter, format, 5));
}
[Fact]
public void Readme_example_10()
{
var formatter = new NumeralsFormatter {CultureInfo = new CultureInfo("en-US")};

[Fact]
public void Readme_example_3()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("ru-RU") };
var format = "{0:T} {0:W;hour(,s)} and {1:t} {1:W;minute(,s)}.";
var dateTime = new DateTime(2018, 8, 1, 4, 1, 0);

var format = "{0:W;Найден(а,о)} {0} {0:W;запис(ь,и,ей)}, {0:W;удовлетворяющ(ая,ие,их)} запросу.";
Assert.Equal("Four hours and one minute.",
string.Format(formatter, format, dateTime.Hour, dateTime.Minute));
}

Assert.Equal("Найдена 1 запись, удовлетворяющая запросу.", string.Format(formatter, format, 1));
Assert.Equal("Найдено 2 записи, удовлетворяющие запросу.", string.Format(formatter, format, 2));
Assert.Equal("Найдено 5 записей, удовлетворяющих запросу.", string.Format(formatter, format, 5));
}
[Fact]
public void Readme_example_2()
{
var formatter = new NumeralsFormatter {CultureInfo = new CultureInfo("ru-RU")};

[Fact]
public void Readme_example_4()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("ru-RU") };
var format = "Inbox: {0} {0:W;нов(ое,ых)} {0:W;сообщени(е,я,й)}";

var format = "{0:T}";
Assert.Equal("Inbox: 1 новое сообщение", string.Format(formatter, format, 1));
Assert.Equal("Inbox: 2 новых сообщения", string.Format(formatter, format, 2));
Assert.Equal("Inbox: 5 новых сообщений", string.Format(formatter, format, 5));
}

Assert.Equal("Одно", string.Format(formatter, format, 1));
Assert.Equal("Тринадцать", string.Format(formatter, format, 13));
}
[Fact]
public void Readme_example_3()
{
var formatter = new NumeralsFormatter {CultureInfo = new CultureInfo("ru-RU")};

[Fact]
public void Readme_example_5()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("ru-RU") };
var format = "{0:W;Найден(а,о)} {0} {0:W;запис(ь,и,ей)}, {0:W;удовлетворяющ(ая,ие,их)} запросу.";

var format = "{0:t;f}";
Assert.Equal("Найдена 1 запись, удовлетворяющая запросу.", string.Format(formatter, format, 1));
Assert.Equal("Найдено 2 записи, удовлетворяющие запросу.", string.Format(formatter, format, 2));
Assert.Equal("Найдено 5 записей, удовлетворяющих запросу.", string.Format(formatter, format, 5));
}

Assert.Equal("одна", string.Format(formatter, format, 1));
Assert.Equal("тринадцать", string.Format(formatter, format, 13));
}
[Fact]
public void Readme_example_4()
{
var formatter = new NumeralsFormatter {CultureInfo = new CultureInfo("ru-RU")};

[Fact]
public void Readme_example_6()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("ru-RU") };
var format = "{0:T}";

var format = "{0:T;M} {0:W;час(,а,ов)}.";
Assert.Equal("Одно", string.Format(formatter, format, 1));
Assert.Equal("Тринадцать", string.Format(formatter, format, 13));
}

Assert.Equal("Один час.", string.Format(formatter, format, 1));
Assert.Equal("Два часа.", string.Format(formatter, format, 2));
Assert.Equal("Десять часов.", string.Format(formatter, format, 10));
}
[Fact]
public void Readme_example_5()
{
var formatter = new NumeralsFormatter {CultureInfo = new CultureInfo("ru-RU")};

[Fact]
public void Readme_example_7()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("ru-RU") };
var format = "{0:t;f}";

var format = "{0:T;M} {0:W;час(,а,ов)} {1:t;F} {1:W;минут(а,ы,)}.";
Assert.Equal("одна", string.Format(formatter, format, 1));
Assert.Equal("тринадцать", string.Format(formatter, format, 13));
}

Assert.Equal("Два часа десять минут.", string.Format(formatter, format, 2, 10));
Assert.Equal("Двадцать один час одна минута.", string.Format(formatter, format, 21, 1));
Assert.Equal("Ноль часов ноль минут.", string.Format(formatter, format, 0, 0));
}
[Fact]
public void Readme_example_6()
{
var formatter = new NumeralsFormatter {CultureInfo = new CultureInfo("ru-RU")};

[Fact]
public void Readme_example_8()
{
var formatter = new NumeralsFormatter {CultureInfo = new CultureInfo("ru-RU")};
var format = "{0:T;M} {0:W;час(,а,ов)}.";

var format = "{0:T;M} {0:W;рубл(ь,я,ей)} {1:00} коп.";
Assert.Equal("Один час.", string.Format(formatter, format, 1));
Assert.Equal("Два часа.", string.Format(formatter, format, 2));
Assert.Equal("Десять часов.", string.Format(formatter, format, 10));
}

Assert.Equal("Один рубль 12 коп.", string.Format(formatter, format, 1, 12));
Assert.Equal("Три рубля 05 коп.", string.Format(formatter, format, 3, 5));
Assert.Equal("Минус три рубля -05 коп.", string.Format(formatter, format, -3, -5));
}
[Fact]
public void Readme_example_7()
{
var formatter = new NumeralsFormatter {CultureInfo = new CultureInfo("ru-RU")};

[Fact]
public void Readme_example_9()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("en-US") };
var format = "{0:T;M} {0:W;час(,а,ов)} {1:t;F} {1:W;минут(а,ы,)}.";

var format = "{0:T} {0:W;dollar(,s)} and {1:t} {1:W;cent(,s)}.";
Assert.Equal("Два часа десять минут.", string.Format(formatter, format, 2, 10));
Assert.Equal("Двадцать один час одна минута.", string.Format(formatter, format, 21, 1));
Assert.Equal("Ноль часов ноль минут.", string.Format(formatter, format, 0, 0));
}

Assert.Equal("One dollar and two cents.", string.Format(formatter, format, 1, 2));
Assert.Equal("One hundred and twenty-three thousand, four hundred and fifty-six dollars and seven cents.", string.Format(formatter, format, 123456, 7));
}
[Fact]
public void Readme_example_8()
{
var formatter = new NumeralsFormatter {CultureInfo = new CultureInfo("ru-RU")};

[Fact]
public void Readme_example_10()
{
var formatter = new NumeralsFormatter { CultureInfo = new CultureInfo("en-US") };
var format = "{0:T;M} {0:W;рубл(ь,я,ей)} {1:00} коп.";

var format = "{0:T} {0:W;hour(,s)} and {1:t} {1:W;minute(,s)}.";
var dateTime = new DateTime(2018, 8, 1, 4, 1, 0);
Assert.Equal("Один рубль 12 коп.", string.Format(formatter, format, 1, 12));
Assert.Equal("Три рубля 05 коп.", string.Format(formatter, format, 3, 5));
Assert.Equal("Минус три рубля -05 коп.", string.Format(formatter, format, -3, -5));
}

Assert.Equal("Four hours and one minute.", string.Format(formatter, format, dateTime.Hour, dateTime.Minute));
}
}
}
[Fact]
public void Readme_example_9()
{
var formatter = new NumeralsFormatter {CultureInfo = new CultureInfo("en-US")};

var format = "{0:T} {0:W;dollar(,s)} and {1:t} {1:W;cent(,s)}.";

Assert.Equal("One dollar and two cents.", string.Format(formatter, format, 1, 2));
Assert.Equal("One hundred and twenty-three thousand, four hundred and fifty-six dollars and seven cents.",
string.Format(formatter, format, 123456, 7));
}
}
}
15 changes: 15 additions & 0 deletions PawnHunter.Numerals.sln.DotSettings
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeEditing/GenerateMemberBody/DocumentationGenerationKind/@EntryValue">Inherit</s:String>
<s:Boolean x:Key="/Default/CodeEditing/GenerateMemberBody/WrapIntoRegions/@EntryValue">True</s:Boolean>
<s:Int64 x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/BLANK_LINES_AROUND_REGION/@EntryValue">2</s:Int64>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/LINE_FEED_AT_FILE_END/@EntryValue">True</s:Boolean>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_ACCESSORHOLDER_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue">NEVER</s:String>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpAttributeForSingleLineMethodUpgrade/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpRenamePlacementToArrangementMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAddAccessorOwnerDeclarationBracesMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002ECSharpPlaceAttributeOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue">True</s:Boolean>
</wpf:ResourceDictionary>
75 changes: 0 additions & 75 deletions PawnHunter.Numerals/Countable.cs

This file was deleted.

31 changes: 31 additions & 0 deletions PawnHunter.Numerals/CountableForm.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
namespace PawnHunter.Numerals
{
public class CountableForm
{
private readonly string _one, _two, _five;

public CountableForm(string one, string two, string five) :
this(one, two, five, Gender.Neutral)
{
}

public CountableForm(string one, string two, string five, Gender gender)
{
_one = one;
_two = two;
_five = five;
Gender = gender;
}

public Gender Gender { get; }

public string ForNumber(long number)
{
number %= 100;
if (number > 20) number %= 10;
if (number == 1) return _one;
if (number > 1 && number < 5) return _two;
return _five;
}
}
}
Loading

0 comments on commit c2901e8

Please sign in to comment.