From 1983fd28220ffb62e9a37da4ec182f2fbf70d74b Mon Sep 17 00:00:00 2001 From: Ben Isenhart Date: Tue, 4 Mar 2025 00:31:42 -0500 Subject: [PATCH] Fix singularization of words ending in ases --- .../Pluralizer.fs | 1 + tests/FSharp.Data.Core.Tests/NameUtils.fs | 38 ++++++++++--------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/FSharp.Data.Runtime.Utilities/Pluralizer.fs b/src/FSharp.Data.Runtime.Utilities/Pluralizer.fs index 50a47558d..e537bf3e8 100644 --- a/src/FSharp.Data.Runtime.Utilities/Pluralizer.fs +++ b/src/FSharp.Data.Runtime.Utilities/Pluralizer.fs @@ -50,6 +50,7 @@ let private tables = "cis", "ces" "us", "uses" + "ase", "ases" "sis", "ses" "xis", "xes" diff --git a/tests/FSharp.Data.Core.Tests/NameUtils.fs b/tests/FSharp.Data.Core.Tests/NameUtils.fs index 9bb3b717c..b1d5153ef 100644 --- a/tests/FSharp.Data.Core.Tests/NameUtils.fs +++ b/tests/FSharp.Data.Core.Tests/NameUtils.fs @@ -9,28 +9,28 @@ open NUnit.Framework open FSharp.Data.Runtime.NameUtils [] -let ``Formats empty string as PascalCase`` () = +let ``Formats empty string as PascalCase`` () = nicePascalName "" |> should equal "" [] -let ``Formats empty string as camelCase`` () = +let ``Formats empty string as camelCase`` () = niceCamelName "" |> should equal "" [] -let ``Formats one letter string as PascalCase`` () = +let ``Formats one letter string as PascalCase`` () = nicePascalName "b" |> should equal "B" [] -let ``Formats one letter string as camelCase`` () = +let ``Formats one letter string as camelCase`` () = niceCamelName "a" |> should equal "a" [] -let ``Removes non-character symbols`` () = +let ``Removes non-character symbols`` () = nicePascalName "__hello__" |> should equal "Hello" niceCamelName "__hello__" |> should equal "hello" [] -let ``Makes first letter uppercase`` () = +let ``Makes first letter uppercase`` () = nicePascalName "abc" |> should equal "Abc" niceCamelName "abc" |> should equal "abc" @@ -54,51 +54,51 @@ let ``Handles acronyms`` () = niceCamelName "abcABCWord" |> should equal "abcAbcWord" [] -let ``Detects word after underscore`` () = +let ``Detects word after underscore`` () = nicePascalName "hello_world" |> should equal "HelloWorld" niceCamelName "hello_world" |> should equal "helloWorld" [] -let ``Works with numbers`` () = +let ``Works with numbers`` () = nicePascalName "A21_SERVICE" |> should equal "A21Service" niceCamelName "A21_SERVICE" |> should equal "a21Service" [] -let ``Detects word after case change`` () = +let ``Detects word after case change`` () = nicePascalName "helloWorld" |> should equal "HelloWorld" niceCamelName "helloWorld" |> should equal "helloWorld" [] -let ``No new word after numbers`` () = +let ``No new word after numbers`` () = nicePascalName "hello123world" |> should equal "Hello123world" niceCamelName "hello123world" |> should equal "hello123world" [] -let ``Removes exclamation mark`` () = - nicePascalName "hello!123" |> should equal "Hello123" +let ``Removes exclamation mark`` () = + nicePascalName "hello!123" |> should equal "Hello123" niceCamelName "hello!123" |> should equal "hello123" [] -let ``Handles long and ugly names`` () = +let ``Handles long and ugly names`` () = nicePascalName "HelloWorld123_hello__@__omg" |> should equal "HelloWorld123HelloOmg" niceCamelName "HelloWorld123_hello__@__omg" |> should equal "helloWorld123HelloOmg" [] -let ``Unique generator generates unique names`` () = +let ``Unique generator generates unique names`` () = let gen = uniqueGenerator nicePascalName let names = [ for _i in 0 .. 100 -> gen "test" ] Seq.length names |> should equal (Seq.length (set names)) [] -let ``Unique generator works on single letter names`` () = +let ``Unique generator works on single letter names`` () = let gen = uniqueGenerator nicePascalName gen "a" |> should equal "A" gen "a" |> should equal "A2" gen "a" |> should equal "A3" [] -let ``Trims HTML tags from string`` () = +let ``Trims HTML tags from string`` () = trimHtml "helloworld" |> should equal "hello world" [] @@ -124,6 +124,8 @@ let ``Can pluralize names``() = check "status" "statuses" check "release" "releases" check "choice" "choices" + check "purchase" "purchases" + check "purchases" "purchases" [] let ``Can singularize names``() = @@ -133,7 +135,7 @@ let ``Can singularize names``() = check "Item" "Item" check "Items" "Item" check "Entities" "Entity" - check "geese" "goose" + check "geese" "goose" check "deer" "deer" check "sheep" "sheep" check "wolves" "wolf" @@ -150,3 +152,5 @@ let ``Can singularize names``() = check "statuses" "status" check "releases" "release" check "choices" "choice" + check "purchase" "purchase" + check "purchases" "purchase"