diff --git a/Makefile.am b/Makefile.am index ea3840764e57b07f9f3308201b8c5cca418d8d5b..d6a0e28a03db97163ac748b355e34ccf4ea2a74e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -473,6 +473,7 @@ HS_LIB_SRCS = \ htools/Ganeti/Utils.hs HS_TEST_SRCS = \ + htest/Test/Ganeti/Attoparsec.hs \ htest/Test/Ganeti/BasicTypes.hs \ htest/Test/Ganeti/Common.hs \ htest/Test/Ganeti/Confd/Utils.hs \ diff --git a/htest/Test/Ganeti/Attoparsec.hs b/htest/Test/Ganeti/Attoparsec.hs new file mode 100644 index 0000000000000000000000000000000000000000..20aab6e60998cef6ce2473184d29b51d8e86a91a --- /dev/null +++ b/htest/Test/Ganeti/Attoparsec.hs @@ -0,0 +1,66 @@ +{-# LANGUAGE TemplateHaskell #-} + +{-| Unittests for Attoparsec support for unicode -} + +{- + +Copyright (C) 2012 Google Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301, USA. + +-} + +module Test.Ganeti.Attoparsec (testAttoparsec) where + +import Test.QuickCheck + +import Test.Ganeti.TestHelper +import Test.Ganeti.TestCommon + +import qualified Data.Attoparsec.Text as A +import Data.Attoparsec.Text (Parser) +import Data.Text (pack, unpack) + +-- | Unicode test string, first part. +part1 :: String +part1 = "Γ€ΓΔ" + +-- | Unicode test string, second part. +part2 :: String +part2 = "ðèΩ" + +-- | Simple parser able to split a string in two parts, name and +-- value, separated by a '=' sign. +simpleParser :: Parser (String, String) +simpleParser = do + n <- A.takeTill (\c -> A.isHorizontalSpace c || c == '=') + A.skipWhile A.isHorizontalSpace + _ <- A.char '=' + A.skipWhile A.isHorizontalSpace + v <- A.takeTill A.isEndOfLine + return (unpack n, unpack v) + +-- | Tests whether a Unicode string is still Unicode after being +-- parsed. +prop_parserSupportsUnicode :: Property +prop_parserSupportsUnicode = case A.parseOnly simpleParser text of + Right (name, value) -> (name ==? part1) .&&. (value ==? part2) + Left msg -> failTest $ "Failed to parse: " ++ msg + where text = Data.Text.pack $ part1 ++ " = \t" ++ part2 + +testSuite "Attoparsec" + [ 'prop_parserSupportsUnicode + ] diff --git a/htest/test.hs b/htest/test.hs index 51808788ad61b5d726559359075c85e81eae0577..b41fb99bdda7149c0859661ee3d3b7c36b2c71dc 100644 --- a/htest/test.hs +++ b/htest/test.hs @@ -30,6 +30,7 @@ import Test.Framework import System.Environment (getArgs) import Test.Ganeti.TestImports () +import Test.Ganeti.Attoparsec import Test.Ganeti.BasicTypes import Test.Ganeti.Common import Test.Ganeti.Confd.Utils @@ -74,6 +75,7 @@ defOpts = TestOptions allTests :: [Test] allTests = [ testBasicTypes + , testAttoparsec , testCommon , testConfd_Utils , testDaemon