safe-coloured-text-gen 0.0.0.3 → 0.0.0.4
raw patch · 19 files changed
+99/−17 lines, 19 filesdep +bytestringdep +pathdep +path-ioPVP ok
version bump matches the API change (PVP)
Dependencies added: bytestring, path, path-io, safe-coloured-text-parsing
API changes (from Hackage documentation)
Files
- CHANGELOG.md +12/−1
- safe-coloured-text-gen.cabal +17/−5
- test/Text/Colour/Chunk/ParsingRoundtripSpec.hs +32/−0
- test/Text/Colour/ChunkSpec.hs +26/−6
- test_resources/chunk/8/hd-no-ol-underline-slow-blinking-bright-blue-fg-dull-black-bg.dat +1/−0
- test_resources/chunk/8/it-st-no-rv-no-ol-non-bold-slow-blinking-bright-red-fg-no-bg.dat +1/−0
- test_resources/chunk/8/italic-non-bold-slow-blinking-dull-yellow-fg-bright-green-bg.dat +0/−1
- test_resources/chunk/8/no-blinking-dull-blue-fg-dull-cyan-bg.dat +1/−0
- test_resources/chunk/8/no-hd-faint-rapid-blinking-dull-cyan-fg-bright-white-bg.dat +1/−0
- test_resources/chunk/8/no-it-no-st-no-hd-ol-bold-double-underline-dull-magenta-fg-dull-black-bg.dat +1/−0
- test_resources/chunk/8/no-ol-non-bold-slow-blinking-dull-yellow-fg-bright-green-bg.dat +1/−0
- test_resources/chunk/8/no-rv-no-hd-ol-double-underline-no-blinking-bright-black-fg-bright-red-bg.dat +1/−0
- test_resources/chunk/8/no-st-no-ol-bold-underline-rapid-blinking-dull-red-fg-dull-blue-bg.dat +1/−0
- test_resources/chunk/8/no-underline-dull-blue-fg-dull-cyan-bg.dat +0/−1
- test_resources/chunk/8/no-underline-rapid-blinking-dull-red-fg-bright-blue-bg.dat +1/−1
- test_resources/chunk/8/slow-blinking-dull-cyan-fg-bright-blue-bg.dat +1/−1
- test_resources/chunk/8/st-ol-faint-no-underline-bright-green-fg-dull-black-bg.dat +1/−0
- test_resources/chunk/8/underline-no-blinking-bright-black-fg-dull-black-bg.dat +1/−0
- test_resources/chunk/8/underline-no-underline-bright-black-fg-dull-black-bg.dat +0/−1
CHANGELOG.md view
@@ -1,4 +1,15 @@-# Changelog for safe-coloured-text+# Changelog for safe-coloured-text-gen++## [0.0.0.4] - 2026-04-12++### Added++* Golden file roundtrip tests for ANSI parsing+* Golden test coverage for new Chunk styling fields++### Fixed++* NoBlinking golden file path was incorrectly labelled "no-underline" ## [0.0.0.2] - 2023-12-07
safe-coloured-text-gen.cabal view
@@ -1,11 +1,11 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.35.2.+-- This file has been generated from package.yaml by hpack version 0.37.0. -- -- see: https://github.com/sol/hpack name: safe-coloured-text-gen-version: 0.0.0.3+version: 0.0.0.4 description: Generators for types in safe-coloured-text homepage: https://github.com/NorfairKing/safe-coloured-text#readme bug-reports: https://github.com/NorfairKing/safe-coloured-text/issues@@ -47,16 +47,23 @@ test_resources/chunk/8/dull-black-fg-bright-black-bg.dat test_resources/chunk/8/dull-white-fg-bright-yellow-bg.dat test_resources/chunk/8/dull-yellow-fg-dull-white-bg.dat- test_resources/chunk/8/italic-non-bold-slow-blinking-dull-yellow-fg-bright-green-bg.dat+ test_resources/chunk/8/hd-no-ol-underline-slow-blinking-bright-blue-fg-dull-black-bg.dat+ test_resources/chunk/8/it-st-no-rv-no-ol-non-bold-slow-blinking-bright-red-fg-no-bg.dat+ test_resources/chunk/8/no-blinking-dull-blue-fg-dull-cyan-bg.dat test_resources/chunk/8/no-fg-bright-black-bg.dat test_resources/chunk/8/no-fg-bright-blue-bg.dat test_resources/chunk/8/no-fg-dull-green-bg.dat test_resources/chunk/8/no-fg-no-bg.dat- test_resources/chunk/8/no-underline-dull-blue-fg-dull-cyan-bg.dat+ test_resources/chunk/8/no-hd-faint-rapid-blinking-dull-cyan-fg-bright-white-bg.dat+ test_resources/chunk/8/no-it-no-st-no-hd-ol-bold-double-underline-dull-magenta-fg-dull-black-bg.dat+ test_resources/chunk/8/no-ol-non-bold-slow-blinking-dull-yellow-fg-bright-green-bg.dat+ test_resources/chunk/8/no-rv-no-hd-ol-double-underline-no-blinking-bright-black-fg-bright-red-bg.dat+ test_resources/chunk/8/no-st-no-ol-bold-underline-rapid-blinking-dull-red-fg-dull-blue-bg.dat test_resources/chunk/8/no-underline-rapid-blinking-dull-red-fg-bright-blue-bg.dat test_resources/chunk/8/non-bold-double-underline-bright-magenta-fg-dull-blue-bg.dat test_resources/chunk/8/slow-blinking-dull-cyan-fg-bright-blue-bg.dat- test_resources/chunk/8/underline-no-underline-bright-black-fg-dull-black-bg.dat+ test_resources/chunk/8/st-ol-faint-no-underline-bright-green-fg-dull-black-bg.dat+ test_resources/chunk/8/underline-no-blinking-bright-black-fg-dull-black-bg.dat test_resources/chunk/8bit/0-fg-5-bg.dat test_resources/chunk/8bit/1-fg-5-bg.dat test_resources/chunk/8bit/126-fg-142-bg.dat@@ -136,6 +143,7 @@ type: exitcode-stdio-1.0 main-is: Spec.hs other-modules:+ Text.Colour.Chunk.ParsingRoundtripSpec Text.Colour.ChunkSpec Text.Colour.CodeSpec Text.ColourSpec@@ -147,9 +155,13 @@ sydtest-discover:sydtest-discover build-depends: base >=4.7 && <5+ , bytestring , genvalidity-sydtest+ , path+ , path-io , safe-coloured-text , safe-coloured-text-gen+ , safe-coloured-text-parsing , sydtest , text default-language: Haskell2010
+ test/Text/Colour/Chunk/ParsingRoundtripSpec.hs view
@@ -0,0 +1,32 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE QuasiQuotes #-}++module Text.Colour.Chunk.ParsingRoundtripSpec (spec) where++import Control.Monad+import qualified Data.ByteString as SB+import Data.List (sort)+import qualified Data.Text as Text+import qualified Data.Text.Encoding as TE+import Path+import Path.IO (listDirRecurRel, resolveDir')+import Test.Syd+import Text.Colour.Capabilities+import Text.Colour.Chunk+import Text.Colour.Chunk.Parsing++spec :: Spec+spec = do+ resourceDir <- liftIO $ resolveDir' "test_resources"+ let chunkDir = resourceDir </> [reldir|chunk|]+ files <- liftIO $ sort . snd <$> listDirRecurRel chunkDir+ describe "golden file roundtrip" $+ forM_ files $ \file ->+ it ("roundtrips " ++ fromRelFile file) $ do+ bs <- SB.readFile (fromAbsFile (chunkDir </> file))+ content <- case TE.decodeUtf8' bs of+ Left err -> expectationFailure $ "Invalid UTF-8: " ++ show err+ Right t -> pure t+ let (_, parsed) = parseAnsiChunks (chunk Text.empty) content+ reRendered = renderChunksText With24BitColours parsed+ reRendered `shouldBe` content
test/Text/Colour/ChunkSpec.hs view
@@ -40,13 +40,18 @@ pure $ Colour8 intensity terminalColour let mColour = Nothing : map Just colour chunkItalic <- Nothing : map Just [minBound .. maxBound]+ chunkStrikethrough <- Nothing : map Just [minBound .. maxBound]+ chunkSwapForegroundBackground <- Nothing : map Just [minBound .. maxBound]+ chunkConcealed <- Nothing : map Just [minBound .. maxBound]+ chunkOverlined <- Nothing : map Just [minBound .. maxBound] chunkConsoleIntensity <- Nothing : map Just [minBound .. maxBound] chunkUnderlining <- Nothing : map Just [minBound .. maxBound] chunkBlinking <- Nothing : map Just [minBound .. maxBound] chunkForeground <- mColour chunkBackground <- mColour let chunkText = T.pack string- let italicName i = if i then "non-italic" else "italic"+ let boolName label b = if b then label else "non-" <> label+ boolPath label b = if b then label else "no-" <> label consoleIntensityName :: ConsoleIntensity -> String consoleIntensityName = \case BoldIntensity -> "bold"@@ -61,12 +66,16 @@ blinkingName = \case SlowBlinking -> "slow blinking" RapidBlinking -> "rapid blinking"- NoBlinking -> "no underline"+ NoBlinking -> "no blinking" name = unwords $ filter (not . null)- [ maybe "" italicName chunkItalic,+ [ maybe "" (boolName "italic") chunkItalic,+ maybe "" (boolName "strikethrough") chunkStrikethrough,+ maybe "" (boolName "reverse") chunkSwapForegroundBackground,+ maybe "" (boolName "concealed") chunkConcealed,+ maybe "" (boolName "overlined") chunkOverlined, maybe "" consoleIntensityName chunkConsoleIntensity, maybe "" underliningName chunkUnderlining, maybe "" blinkingName chunkBlinking,@@ -78,7 +87,6 @@ "background" ] - italicPath i = if i then "non-italic" else "italic" consoleIntensityPath :: ConsoleIntensity -> FilePath consoleIntensityPath = \case BoldIntensity -> "bold"@@ -93,13 +101,17 @@ blinkingPath = \case SlowBlinking -> "slow-blinking" RapidBlinking -> "rapid-blinking"- NoBlinking -> "no-underline"+ NoBlinking -> "no-blinking" path = intercalate "-" ( filter (not . null)- [ maybe "" italicPath chunkItalic,+ [ maybe "" (boolPath "it") chunkItalic,+ maybe "" (boolPath "st") chunkStrikethrough,+ maybe "" (boolPath "rv") chunkSwapForegroundBackground,+ maybe "" (boolPath "hd") chunkConcealed,+ maybe "" (boolPath "ol") chunkOverlined, maybe "" consoleIntensityPath chunkConsoleIntensity, maybe "" underliningPath chunkUnderlining, maybe "" blinkingPath chunkBlinking,@@ -121,6 +133,10 @@ let colour = Colour8Bit <$> [minBound .. maxBound] let mColour = Nothing : map Just colour let chunkItalic = Nothing+ let chunkStrikethrough = Nothing+ let chunkSwapForegroundBackground = Nothing+ let chunkConcealed = Nothing+ let chunkOverlined = Nothing let chunkConsoleIntensity = Nothing let chunkUnderlining = Nothing let chunkBlinking = Nothing@@ -159,6 +175,10 @@ pure $ Colour24Bit r g b let mColour = Nothing : map Just colour let chunkItalic = Nothing+ let chunkStrikethrough = Nothing+ let chunkSwapForegroundBackground = Nothing+ let chunkConcealed = Nothing+ let chunkOverlined = Nothing let chunkConsoleIntensity = Nothing let chunkUnderlining = Nothing let chunkBlinking = Nothing
+ test_resources/chunk/8/hd-no-ol-underline-slow-blinking-bright-blue-fg-dull-black-bg.dat view
@@ -0,0 +1,1 @@+[8;55;4;5;94;40mook[m
+ test_resources/chunk/8/it-st-no-rv-no-ol-non-bold-slow-blinking-bright-red-fg-no-bg.dat view
@@ -0,0 +1,1 @@+[3;9;27;55;5;22;91mook[m
− test_resources/chunk/8/italic-non-bold-slow-blinking-dull-yellow-fg-bright-green-bg.dat
@@ -1,1 +0,0 @@-[23;22;33;102mook[m
+ test_resources/chunk/8/no-blinking-dull-blue-fg-dull-cyan-bg.dat view
@@ -0,0 +1,1 @@+[25;34;46mook[m
+ test_resources/chunk/8/no-hd-faint-rapid-blinking-dull-cyan-fg-bright-white-bg.dat view
@@ -0,0 +1,1 @@+[28;6;2;36;107mook[m
+ test_resources/chunk/8/no-it-no-st-no-hd-ol-bold-double-underline-dull-magenta-fg-dull-black-bg.dat view
@@ -0,0 +1,1 @@+[23;29;28;53;21;1;35;40mook[m
+ test_resources/chunk/8/no-ol-non-bold-slow-blinking-dull-yellow-fg-bright-green-bg.dat view
@@ -0,0 +1,1 @@+[55;5;22;33;102mook[m
+ test_resources/chunk/8/no-rv-no-hd-ol-double-underline-no-blinking-bright-black-fg-bright-red-bg.dat view
@@ -0,0 +1,1 @@+[27;28;53;21;25;90;101mook[m
+ test_resources/chunk/8/no-st-no-ol-bold-underline-rapid-blinking-dull-red-fg-dull-blue-bg.dat view
@@ -0,0 +1,1 @@+[29;55;4;6;1;31;44mook[m
− test_resources/chunk/8/no-underline-dull-blue-fg-dull-cyan-bg.dat
@@ -1,1 +0,0 @@-[34;46mook[m
test_resources/chunk/8/no-underline-rapid-blinking-dull-red-fg-bright-blue-bg.dat view
@@ -1,1 +1,1 @@-[24;31;104mook[m+[24;6;31;104mook[m
test_resources/chunk/8/slow-blinking-dull-cyan-fg-bright-blue-bg.dat view
@@ -1,1 +1,1 @@-[36;104mook[m+[5;36;104mook[m
+ test_resources/chunk/8/st-ol-faint-no-underline-bright-green-fg-dull-black-bg.dat view
@@ -0,0 +1,1 @@+[9;53;24;2;92;40mook[m
+ test_resources/chunk/8/underline-no-blinking-bright-black-fg-dull-black-bg.dat view
@@ -0,0 +1,1 @@+[4;25;90;40mook[m
− test_resources/chunk/8/underline-no-underline-bright-black-fg-dull-black-bg.dat
@@ -1,1 +0,0 @@-[4;90;40mook[m