inflections 0.1.0.10 → 0.2.0.0
raw patch · 7 files changed
+267/−1 lines, 7 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- inflections.cabal +8/−1
- test/Text/Inflections/HumanizeTest.hs +26/−0
- test/Text/Inflections/OrdinalTest.hs +57/−0
- test/Text/Inflections/Tests.hs +104/−0
- test/Text/Inflections/TitleizeTest.hs +25/−0
- test/Text/Inflections/UnderscoreTest.hs +20/−0
- test/Text/InflectionsTest.hs +27/−0
inflections.cabal view
@@ -1,5 +1,5 @@ name: inflections-version: 0.1.0.10+version: 0.2.0.0 synopsis: Inflections library for Haskell description: Inflections provides methods for singularization, pluralization,@@ -60,3 +60,10 @@ , containers ghc-options: -Wall default-language: Haskell2010+ other-modules:+ Text.InflectionsTest+ Text.Inflections.HumanizeTest+ Text.Inflections.OrdinalTest+ Text.Inflections.Tests+ Text.Inflections.TitleizeTest+ Text.Inflections.UnderscoreTest
+ test/Text/Inflections/HumanizeTest.hs view
@@ -0,0 +1,26 @@+module Text.Inflections.HumanizeTest where++import Test.HUnit hiding (Test)++import Test.Framework.Providers.HUnit (testCase)++import Test.Framework (Test, testGroup)++import Text.Inflections (humanize)+import Text.Inflections.Parse.Types (Word(..))++{-# ANN module "HLint: ignore Use camelCase" #-}++tests :: [Test]+tests = [ testGroup "humanize"+ [ testCase "employee_salary -> Employee salary" test_humanize1+ , testCase "underground -> underground" test_humanize2+ ]+ ]++----------------------------------------------------++test_humanize1 = "Employee salary" @?=+ humanize [Word "employee", Word "salary"]++test_humanize2 = "Underground" @?= humanize [Word "underground"]
+ test/Text/Inflections/OrdinalTest.hs view
@@ -0,0 +1,57 @@+module Text.Inflections.OrdinalTest where++import Test.HUnit hiding (Test)++import Test.Framework.Providers.QuickCheck2 (testProperty)+import Test.Framework.Providers.HUnit (testCase)++import Test.Framework (Test, testGroup)++import Text.Inflections (ordinal, ordinalize)++{-# ANN module "HLint: ignore Use camelCase" #-}++tests :: [Test]+tests = [ testGroup "ordinal"+ [ testCase "1 -> st" test_ordinal1+ , testCase "2 -> nd" test_ordinal2+ , testCase "1002 -> nd" test_ordinal1002+ , testCase "1003 -> rd" test_ordinal1003+ , testCase "-11 -> th" test_ordinalNegative11+ , testCase "-1021 -> st" test_ordinalNegative1021+ , testProperty "notEmpty" prop_ordinalReturnsNotEmpty+ ]+ , testGroup "ordinalize"+ [ testCase "1 -> st" test_ordinalize1+ , testCase "-1021 -> st" test_ordinalizeNegative1021+ , testProperty "result contains number" prop_ordinalizeSamePrefix+ ]+ ]++----------------------------------------------------++test_ordinal1 = "st" @?= ordinal 1++test_ordinal2 = "nd" @?= ordinal 2++test_ordinal1002 = "nd" @?= ordinal 1002++test_ordinal1003 = "rd" @?= ordinal 1003++test_ordinalNegative11 = "th" @?= ordinal (-11)++test_ordinalNegative1021 = "st" @?= ordinal (-1021)++----------------------------------------------------++test_ordinalize1 = "1st" @?= ordinalize 1++test_ordinalizeNegative1021 = "-1021st" @?= ordinalize (-1021)++----------------------------------------------------++prop_ordinalReturnsNotEmpty :: Integer -> Bool+prop_ordinalReturnsNotEmpty = not . null . ordinal++prop_ordinalizeSamePrefix :: Integer -> Bool+prop_ordinalizeSamePrefix n = show n == take (length $ show n) (ordinalize n)
+ test/Text/Inflections/Tests.hs view
@@ -0,0 +1,104 @@+module Text.Inflections.Tests where++import Test.HUnit hiding (Test)++import Test.Framework.Providers.QuickCheck2 (testProperty)+import Test.Framework.Providers.HUnit (testCase)++import Test.QuickCheck++import Test.Framework (Test, testGroup)++import Data.List (group)+import Data.Char (toLower)++import Text.Inflections+import Text.Inflections.Parse.Types (Word(..))++{-# ANN module "HLint: ignore Use camelCase" #-}++tests :: [Test]+tests = [testGroup "dasherize"+ [ testCase "foo bar -> foo-bar" test_dasherize1+ ],++ testGroup "transliterate"+ [ testCase "Without substitutions" test_correctTransliterationWithoutSubs+ , testCase "With substitutions" test_correctTransliterationWithSubs+ , testCase "Missing subs" test_correctTransliterationMissingSubs+ ],++ testGroup "parameterize"+ [ testProperty "Contains only valid chars"+ prop_parameterize1+ , testProperty "Does not begin with a separator character"+ prop_parameterize2+ , testProperty "Does not end in a separator character"+ prop_parameterize3+ , testProperty "All alphanumerics in input exist in output"+ prop_parameterize4+ , testProperty "Doesn't have subsequences of more than one hyphen"+ prop_parameterize5+ ]+ ]+++test_correctTransliterationWithoutSubs =+ transliterate "this is a test" @?= "this is a test"++test_correctTransliterationWithSubs =+ transliterate "Feliz año nuevo" @?= "Feliz ano nuevo"++test_correctTransliterationMissingSubs =+ transliterate "Have a ❤ ñ!" @?= "Have a ? n!"++fromRight :: Either a b -> b+fromRight (Left _) =+ error "Either.Unwrap.fromRight: Argument takes form 'Left _'"+fromRight (Right x) = x++isRight :: Either a b -> Bool+isRight (Left _) = False+isRight (Right _) = True+++test_dasherize1 = "foo-bar" @?= dasherize [Word "foo", Word "bar"]++prop_parameterize1 :: String -> Bool+prop_parameterize1 sf = all (`elem` (alphaNumerics ++ "-_")) $+ parameterize sf++prop_parameterize2 :: String -> Property+prop_parameterize2 s =+ (not . null) parameterized ==> head parameterized /= '-'+ where parameterized = parameterize s++prop_parameterize3 :: String -> Property+prop_parameterize3 s =+ (not . null) parameterized ==> last parameterized /= '-'+ where parameterized = parameterize s++prop_parameterize4 :: String -> Bool+prop_parameterize4 s = all (\c -> c `notElem` alphaNumerics ||+ c `elem` (alphaNumerics ++ "-") &&+ c `elem` parameterized) $ map toLower s+ where parameterized = parameterize s++prop_parameterize5 :: String -> Bool+prop_parameterize5 s = longestSequenceOf '-' parameterized <= 1+ where parameterized = parameterize s+++-- Helper functions and shared tests++longestSequenceOf :: Char -> String -> Int+longestSequenceOf c [] = 0+longestSequenceOf c s =+ if null subseqLengths then 0 else maximum subseqLengths++ where subseqLengths = (map length . filter (\str -> head str == c) . group) s++numMatching char str = length $ filter (== char) str++alphaNumerics :: String+alphaNumerics = ['a'..'z'] ++ ['0'..'9']
+ test/Text/Inflections/TitleizeTest.hs view
@@ -0,0 +1,25 @@+module Text.Inflections.TitleizeTest where++import Test.HUnit hiding (Test)++import Test.Framework.Providers.HUnit (testCase)++import Test.Framework (Test, testGroup)++import Text.Inflections (titleize)+import Text.Inflections.Parse.Types (Word(..))++{-# ANN module "HLint: ignore Use camelCase" #-}++tests :: [Test]+tests = [ testGroup "titleize"+ [ testCase "employee_salary -> Employee Salary" test_titleize1+ , testCase "underground -> Underground" test_titleize2+ ]+ ]++----------------------------------------------------++test_titleize1 = "Employee Salary" @?=+ titleize [Word "Employee", Word "Salary"]+test_titleize2 = "Underground" @?= titleize [Word "underground"]
+ test/Text/Inflections/UnderscoreTest.hs view
@@ -0,0 +1,20 @@+module Text.Inflections.UnderscoreTest where++import Test.HUnit hiding (Test)++import Test.Framework.Providers.HUnit (testCase)++import Test.Framework (Test, testGroup)++import Text.Inflections (underscore)+import Text.Inflections.Parse.Types (Word(..))++{-# ANN module "HLint: ignore Use camelCase" #-}++tests :: [Test]+tests = [testGroup "underscore"+ [ testCase "testThis -> test_this" test_underscore+ ]+ ]++test_underscore = "test_this" @?= underscore [Word "test", Word "this"]
+ test/Text/InflectionsTest.hs view
@@ -0,0 +1,27 @@+module Text.InflectionsTest where++import Test.HUnit hiding (Test)++import Test.Framework.Providers.HUnit (testCase)++import Test.Framework (Test, testGroup)++import Text.Inflections (toUnderscore, toDashed, toCamelCased)++{-# ANN module "HLint: ignore Use camelCase" #-}++tests :: [Test]+tests = [ testGroup "toUnderscore"+ [ testCase "camelCasedText -> camel_cased_text" test_to_underscore+ ]+ , testGroup "toDashed"+ [ testCase "camelCasedText -> camel-cased-text" test_to_dashed+ ]+ , testGroup "toCamelCased"+ [ testCase "underscored_text -> camelCasedText" test_to_camel_cased+ ]+ ]++test_to_underscore = "camel_cased_text" @?= toUnderscore "camelCasedText"+test_to_dashed = "camel-cased-text" @?= toDashed "camelCasedText"+test_to_camel_cased = "underscoredText" @?= toCamelCased False "underscored_text"