chore: fmt, event tests
This commit is contained in:
parent
252bbd1b1a
commit
ac1b2227d0
@ -1,4 +0,0 @@
|
|||||||
/** @template T */
|
|
||||||
export class Maybe {}
|
|
||||||
|
|
||||||
export class Milliseconds {}
|
|
@ -41,7 +41,9 @@ to generate this file without the comments in this block.
|
|||||||
, "prelude"
|
, "prelude"
|
||||||
, "simple-json"
|
, "simple-json"
|
||||||
, "spec"
|
, "spec"
|
||||||
|
, "st"
|
||||||
, "strings"
|
, "strings"
|
||||||
|
, "tailrec"
|
||||||
, "transformers"
|
, "transformers"
|
||||||
, "tuples"
|
, "tuples"
|
||||||
, "unsafe-coerce"
|
, "unsafe-coerce"
|
||||||
|
@ -81,7 +81,8 @@ offsetHeight :: forall a. IsElement a => Handle a -> Aff (Array Number)
|
|||||||
offsetHeight = Eval.unsafeRunJs0 "e => e.offsetHeight"
|
offsetHeight = Eval.unsafeRunJs0 "e => e.offsetHeight"
|
||||||
|
|
||||||
attrs :: forall a. IsElement a => Handle a -> Aff (Map String String)
|
attrs :: forall a. IsElement a => Handle a -> Aff (Map String String)
|
||||||
attrs = let
|
attrs =
|
||||||
|
let
|
||||||
js = String.joinWith "\n"
|
js = String.joinWith "\n"
|
||||||
[ "e => Array.from(e.attributes)"
|
[ "e => Array.from(e.attributes)"
|
||||||
, " .reduce("
|
, " .reduce("
|
||||||
@ -94,7 +95,8 @@ attrs = let
|
|||||||
map FFI.makeMap <<< Eval.unsafeRunJs0 @(Array { k :: String, v :: String }) js
|
map FFI.makeMap <<< Eval.unsafeRunJs0 @(Array { k :: String, v :: String }) js
|
||||||
|
|
||||||
computedStyle :: forall a. IsElement a => Handle a -> Aff (Map String String)
|
computedStyle :: forall a. IsElement a => Handle a -> Aff (Map String String)
|
||||||
computedStyle = let
|
computedStyle =
|
||||||
|
let
|
||||||
js = String.joinWith "\n"
|
js = String.joinWith "\n"
|
||||||
[ "e => {"
|
[ "e => {"
|
||||||
, " const s = window.getComputedStyle(e)"
|
, " const s = window.getComputedStyle(e)"
|
||||||
|
@ -4,7 +4,10 @@ import { ElementHandle } from 'puppeteer'
|
|||||||
import { JSHandle } from 'puppeteer'
|
import { JSHandle } from 'puppeteer'
|
||||||
|
|
||||||
/** @type {<T>(_: { remoteObject: (_0: string) => T, primitive: (_0: unknown) => T }) => (_: JSHandle<unknown>) => () => T} */
|
/** @type {<T>(_: { remoteObject: (_0: string) => T, primitive: (_0: unknown) => T }) => (_: JSHandle<unknown>) => () => T} */
|
||||||
export const _id = ({remoteObject, primitive}) => h => () => {
|
export const _id =
|
||||||
|
({ remoteObject, primitive }) =>
|
||||||
|
h =>
|
||||||
|
() => {
|
||||||
const oid = h.remoteObject().objectId
|
const oid = h.remoteObject().objectId
|
||||||
if (oid) {
|
if (oid) {
|
||||||
return remoteObject(oid)
|
return remoteObject(oid)
|
||||||
|
@ -14,7 +14,9 @@ import Prelude
|
|||||||
import Control.Monad.Except (runExcept)
|
import Control.Monad.Except (runExcept)
|
||||||
import Data.Array as Array
|
import Data.Array as Array
|
||||||
import Data.Either (hush)
|
import Data.Either (hush)
|
||||||
|
import Data.Generic.Rep (class Generic)
|
||||||
import Data.Maybe (Maybe)
|
import Data.Maybe (Maybe)
|
||||||
|
import Data.Show.Generic (genericShow)
|
||||||
import Foreign (Foreign, unsafeFromForeign)
|
import Foreign (Foreign, unsafeFromForeign)
|
||||||
import Puppeteer.Base (Handle)
|
import Puppeteer.Base (Handle)
|
||||||
import Puppeteer.FFI as FFI
|
import Puppeteer.FFI as FFI
|
||||||
@ -54,6 +56,10 @@ data MessageType
|
|||||||
| TimeEnd
|
| TimeEnd
|
||||||
| Verbose
|
| Verbose
|
||||||
|
|
||||||
|
derive instance eqMessageType :: Eq MessageType
|
||||||
|
derive instance genericMessageType :: Generic MessageType _
|
||||||
|
instance showMessageType :: Show MessageType where show = genericShow
|
||||||
|
|
||||||
messageTypeOfString :: String -> MessageType
|
messageTypeOfString :: String -> MessageType
|
||||||
messageTypeOfString "debug" = Debug
|
messageTypeOfString "debug" = Debug
|
||||||
messageTypeOfString "info" = Info
|
messageTypeOfString "info" = Info
|
||||||
|
@ -41,7 +41,8 @@ import Puppeteer.Page.Event.Dialog (Dialog)
|
|||||||
import Simple.JSON (class ReadForeign, readImpl)
|
import Simple.JSON (class ReadForeign, readImpl)
|
||||||
|
|
||||||
connectPageConsole :: Page -> Aff Unit
|
connectPageConsole :: Page -> Aff Unit
|
||||||
connectPageConsole p = let
|
connectPageConsole p =
|
||||||
|
let
|
||||||
onmsg m = do
|
onmsg m = do
|
||||||
title <- Page.title p
|
title <- Page.title p
|
||||||
let t = ConsoleMessage.messageType m
|
let t = ConsoleMessage.messageType m
|
||||||
|
78
test/Puppeteer.Page.Event.Spec.purs
Normal file
78
test/Puppeteer.Page.Event.Spec.purs
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
module Puppeteer.Page.Event.Spec where
|
||||||
|
|
||||||
|
import Prelude
|
||||||
|
|
||||||
|
import Control.Monad.Error.Class (liftMaybe)
|
||||||
|
import Control.Monad.Rec.Class (untilJust)
|
||||||
|
import Control.Monad.ST.Class (liftST)
|
||||||
|
import Control.Monad.ST.Global as ST
|
||||||
|
import Control.Monad.ST.Ref as ST.Ref
|
||||||
|
import Data.Array as Array
|
||||||
|
import Data.Array.NonEmpty as NonEmptyArray
|
||||||
|
import Data.Map as Map
|
||||||
|
import Data.Maybe (Maybe(..))
|
||||||
|
import Data.Newtype (wrap)
|
||||||
|
import Data.Time.Duration (Milliseconds(..))
|
||||||
|
import Effect (Effect)
|
||||||
|
import Effect.Aff (Aff, forkAff, joinFiber, makeAff)
|
||||||
|
import Effect.Class (liftEffect)
|
||||||
|
import Effect.Exception (error)
|
||||||
|
import Effect.Exception as Error
|
||||||
|
import Puppeteer as Pup
|
||||||
|
import Puppeteer.Base (timeoutThrow)
|
||||||
|
import Puppeteer.Handle as Pup.Handle
|
||||||
|
import Puppeteer.Handle.HTML as Pup.Handle.HTML
|
||||||
|
import Puppeteer.Keyboard as Pup.Keyboard
|
||||||
|
import Puppeteer.Page as Pup.Page
|
||||||
|
import Puppeteer.Page.Event (connectPageConsole)
|
||||||
|
import Puppeteer.Page.Event as Pup.Page.Event
|
||||||
|
import Puppeteer.Page.Event.ConsoleMessage as ConsoleMessage
|
||||||
|
import Puppeteer.Page.WaitFor as Pup.Page.WaitFor
|
||||||
|
import Test.Spec (SpecT, afterAll, beforeAll, describe)
|
||||||
|
import Test.Spec.Assertions (shouldEqual)
|
||||||
|
import Test.Util (failOnPageError, test)
|
||||||
|
|
||||||
|
scriptError :: String
|
||||||
|
scriptError = "throw new Error('eek!')"
|
||||||
|
|
||||||
|
scriptLog :: String
|
||||||
|
scriptLog = "console.log('beak')"
|
||||||
|
|
||||||
|
listenIntoSTArray :: forall e ed. Pup.Page.Event.Event e ed => e -> Pup.Page -> Aff ({ st :: ST.Ref.STRef ST.Global (Array ed), cleanup :: Aff Unit })
|
||||||
|
listenIntoSTArray e p = do
|
||||||
|
st <- liftST $ ST.Ref.new []
|
||||||
|
let
|
||||||
|
handle ed = do
|
||||||
|
eds <- liftST $ ST.Ref.read st
|
||||||
|
_ <- liftST $ ST.Ref.write (eds <> [ ed ]) st
|
||||||
|
pure unit
|
||||||
|
t <- Pup.Page.Event.listen e handle p
|
||||||
|
pure { st, cleanup: Pup.closeContext t }
|
||||||
|
|
||||||
|
spec :: SpecT Aff Unit Effect Unit
|
||||||
|
spec =
|
||||||
|
beforeAll (Pup.Page.new =<< Pup.launch_ =<< Pup.puppeteer unit)
|
||||||
|
$ afterAll Pup.Page.close
|
||||||
|
$ describe "Page" do
|
||||||
|
test "listen, PageError" \p -> do
|
||||||
|
{ st: errsST, cleanup } <- listenIntoSTArray Pup.Page.Event.PageError p
|
||||||
|
_ <- Pup.Page.addScriptTag (Pup.Page.AddScriptInline Pup.Page.Script scriptError) p
|
||||||
|
err <- timeoutThrow (wrap 1000.0)
|
||||||
|
$ untilJust do
|
||||||
|
errs <- liftST $ ST.Ref.read errsST
|
||||||
|
pure $ Array.head errs
|
||||||
|
Error.message err `shouldEqual` "eek!"
|
||||||
|
cleanup
|
||||||
|
|
||||||
|
test "once" \p -> do
|
||||||
|
errF <- forkAff $ Pup.Page.Event.once Pup.Page.Event.PageError p
|
||||||
|
_ <- Pup.Page.addScriptTag (Pup.Page.AddScriptInline Pup.Page.Script scriptError) p
|
||||||
|
err <- joinFiber errF
|
||||||
|
Error.message err `shouldEqual` "eek!"
|
||||||
|
|
||||||
|
test "Console" \p -> do
|
||||||
|
logF <- forkAff $ Pup.Page.Event.once Pup.Page.Event.Console p
|
||||||
|
_ <- Pup.Page.addScriptTag (Pup.Page.AddScriptInline Pup.Page.Script scriptLog) p
|
||||||
|
log <- joinFiber logF
|
||||||
|
ConsoleMessage.text log `shouldEqual` "beak"
|
||||||
|
ConsoleMessage.messageType log `shouldEqual` ConsoleMessage.Log
|
@ -105,7 +105,9 @@ spec = beforeAll (Pup.launch_ =<< Pup.puppeteer unit)
|
|||||||
|
|
||||||
test "setViewport, viewport" \b -> do
|
test "setViewport, viewport" \b -> do
|
||||||
p <- Pup.Page.new b
|
p <- Pup.Page.new b
|
||||||
let vp = { deviceScaleFactor: Nothing
|
let
|
||||||
|
vp =
|
||||||
|
{ deviceScaleFactor: Nothing
|
||||||
, hasTouch: Nothing
|
, hasTouch: Nothing
|
||||||
, height: 1200
|
, height: 1200
|
||||||
, width: 800
|
, width: 800
|
||||||
|
@ -18,6 +18,7 @@ import Node.Process as Process
|
|||||||
import Node.Stream as Writable
|
import Node.Stream as Writable
|
||||||
import Puppeteer.Browser.Spec as Spec.Browser
|
import Puppeteer.Browser.Spec as Spec.Browser
|
||||||
import Puppeteer.Page.Spec as Spec.Page
|
import Puppeteer.Page.Spec as Spec.Page
|
||||||
|
import Puppeteer.Page.Event.Spec as Spec.Page.Event
|
||||||
import Puppeteer.Spec as Spec
|
import Puppeteer.Spec as Spec
|
||||||
import Test.Spec (SpecT)
|
import Test.Spec (SpecT)
|
||||||
import Test.Spec.Config (defaultConfig)
|
import Test.Spec.Config (defaultConfig)
|
||||||
@ -32,6 +33,7 @@ specs = do
|
|||||||
Spec.spec
|
Spec.spec
|
||||||
Spec.Browser.spec
|
Spec.Browser.spec
|
||||||
Spec.Page.spec
|
Spec.Page.spec
|
||||||
|
Spec.Page.Event.spec
|
||||||
|
|
||||||
main :: Effect Unit
|
main :: Effect Unit
|
||||||
main = launchAff_ do
|
main = launchAff_ do
|
||||||
|
@ -27,7 +27,8 @@ testA :: forall m t arg g. MonadAff g => Monad m => Example t arg Aff => String
|
|||||||
testA = test_ liftAff
|
testA = test_ liftAff
|
||||||
|
|
||||||
failOnPageError :: forall a. Pup.Page -> Aff a -> Aff a
|
failOnPageError :: forall a. Pup.Page -> Aff a -> Aff a
|
||||||
failOnPageError p a = let
|
failOnPageError p a =
|
||||||
|
let
|
||||||
ok = parallel $ try a
|
ok = parallel $ try a
|
||||||
err = parallel $ Left <$> Pup.Page.Event.once Pup.Page.Event.PageError p
|
err = parallel $ Left <$> Pup.Page.Event.once Pup.Page.Event.PageError p
|
||||||
in
|
in
|
||||||
|
Loading…
Reference in New Issue
Block a user