packages feed

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 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"