content: {-# LANGUAGE OverloadedStrings #-}
  
  {-
  
  Limited set of encoding-related tests, as it is used in every test.
  
  -}
  
  module EncodingTests (testSpecs) where
  
  import Graphics.Vega.VegaLite
  
  testSpecs :: [(String, VegaLite)]
  testSpecs = [ ("strokedashgroup", strokeDashGroup)
              , ("strokedashline", strokeDashLine)
              , ("nullencoding", nullEncoding)
              ]
              
  
  strokeDashGroup :: VegaLite
  strokeDashGroup =
    toVegaLite [ dataFromUrl "https://vega.github.io/vega-lite/data/stocks.csv" []
               , mark Line []
               , encoding
                 . position X [ PName "date", PmType Temporal ]
                 . position Y [ PName "price", PmType Quantitative ]
                 . strokeDash [ MName "symbol", MmType Nominal ]
                 $ []
               ]
  
  strokeDashLine :: VegaLite
  strokeDashLine =
    toVegaLite [ dataFromColumns []
                 . dataColumn "a" (Strings [ "A", "B", "D", "E", "E", "G", "H"])
                 . dataColumn "b" (Numbers [ 28, 55, 91, 81, 81, 19, 87 ])
                 . dataColumn "predicted" (Booleans [False, False, False, False, True, True, True])
                 $ []
               , mark Line []
               , encoding
                 . position X [ PName "a", PmType Ordinal ]
                 . position Y [ PName "b", PmType Quantitative ]
                 . strokeDash [ MName "predicted", MmType Nominal ]
                 $ []
               ]
  
  -- See https://github.com/vega/vega-lite/issues/6762
  --
  -- Note: a "null" encoding here is with no arguments, which creates {}.
  -- We don't support creating null instead of {}.
  --
  nullEncoding :: VegaLite
  nullEncoding =
    let dvals = dataFromColumns []
                . dataColumn "a" (Strings ["A", "B", "D", "E", "E", "G", "H", "I"])
                . dataColumn "b" (Numbers [28, 55, 91, 81, 81, 19, 87, 52])
  
        lyr1 = [mark Bar []]
        lyr2 = [mark Rule [], encoding (position X [] [])]
        
    in toVegaLite [ description "Can we null the encoding"
                  , dvals []
                  , encoding
                    . position X [PName "a", PmType Nominal, PAxis [AxLabelAngle 0]]
                    . position Y [PName "b", PmType Quantitative]
                    $ []
                  , layer (map asSpec [lyr1, lyr2])
                  ]
  