@@ -12,11 +12,13 @@ import Data.Map as Map
1212import Data.Maybe (Maybe(..), fromJust, fromMaybe')
1313import Data.Newtype (class Newtype, un)
1414import Data.Nullable as Nullable
15+import Data.String.NonEmpty (NonEmptyString, nes)
1516import Data.Tuple (Tuple(..))
1617import Data.Tuple.Nested ((/\))
1718import Data.Variant (Variant, inj)
1819import Effect.Class (liftEffect)
1920import Effect.Now (nowDateTime)
21+import Foreign (ForeignError(..))
2022import Foreign.Object as Object
2123import Js.BigInt.BigInt (BigInt)
2224import Js.BigInt.BigInt as BigInt
@@ -133,13 +135,20 @@ spec = describe "En- and decoding" $ do
133135 roundtrips (UntaggedVariant (erwin "e") ∷ UntaggedVariant (Erwin ()))
134136 let bareVariant = erwin "e"
135137 let res = writeJSON (UntaggedVariant bareVariant ∷ UntaggedVariant ExampleVariant)
136− let expected = """"e""""
138+ let expected = "\"e\""
137139 res `shouldEqual` expected
138140 let
139141 parsed ∷ _ (UntaggedVariant ExampleVariant)
140142 parsed = readJSON expected
141143 (un UntaggedVariant <$> parsed) `shouldEqual` Right bareVariant
142144
145+ describe "works on non empty strings" do
146+ it "roundtrips NonEmptyString" do
147+ roundtrips (nes (Proxy :: Proxy "Non-Empty"))
148+ it "fails to decode empty strings" do
149+ let (result :: (Either _ NonEmptyString)) = readJSON (show "")
150+ result `shouldEqual` Left (pure $ ForeignError "String must not be empty")
151+
143152type ExampleVariant = ("erwin" ∷ String, "jackie" ∷ Int)
144153type ExampleTaggedVariant t v = TaggedVariant t v ExampleVariant
145154