@@ -325,7 +325,9 @@ testCopy TestEnv{..} = do
325325testCopyFailures :: TestEnv -> TestTree
326326testCopyFailures env = testGroup "Copy failures"
327327 $ map ($ env)
328− [ testCopyUniqueConstraintError ]
328+ [ testCopyUniqueConstraintError
329+ , testCopyMalformedError
330+ ]
329331
330332goldenTest :: TestName -> IO BL.ByteString -> TestTree
331333goldenTest testName =
@@ -351,6 +353,20 @@ testCopyUniqueConstraintError TestEnv{..} =
351353 ,"2,bar\n"
352354 ,"1,baz\n"]
353355
356+testCopyMalformedError :: TestEnv -> TestTree
357+testCopyMalformedError TestEnv{..} =
358+ goldenTest "malformed input"
359+ $ handle (\(SomeException exc) -> return $ BL.pack $ show exc) $ do
360+ execute_ conn "CREATE TEMPORARY TABLE copy_malformed_input_error_test (x int PRIMARY KEY, y text)"
361+ copy_ conn "COPY copy_unique_constraint_error_test FROM STDIN (FORMAT CSV)"
362+ mapM_ (putCopyData conn) copyRows
363+ _n <- putCopyEnd conn
364+ return BL.empty
365+ where
366+ copyRows = ["1,foo\n"
367+ ,"2,bar\n"
368+ ,"z,baz\n"]
369+
354370testDouble :: TestEnv -> Assertion
355371testDouble TestEnv{..} = do
356372 [Only (x :: Double)] <- query_ conn "SELECT 'NaN'::float8"