diff --git a/cypress/integration/ps.js b/cypress/integration/ps.js index e993f05..2e0565e 100644 --- a/cypress/integration/ps.js +++ b/cypress/integration/ps.js @@ -36,7 +36,7 @@ var PS = {}; (function(exports) { "use strict"; - exports.unit = {}; + export const unit = {}; })(PS["Data.Unit"] = PS["Data.Unit"] || {}); (function($PS) { // Generated by purs version 0.13.8 @@ -385,7 +385,7 @@ var PS = {}; })(PS); (function(exports) { - exports.clickFn = function clickFn(cy) { return cy.click(); } + export const clickFn = function clickFn(cy) { return cy.click(); } // both const containsArgs = (isJust, fromJust, props) => { @@ -400,28 +400,28 @@ var PS = {}; } }; - exports.containsFn = (isJust, fromJust, props, cy) => { + export const containsFn = (isJust, fromJust, props, cy) => { return cy.contains(...containsArgs(isJust, fromJust, props)) } // root - exports.execFn = function execFn(a, cy) { return cy.exec(a); } - exports.firstFn = function firstFn(a) { return a.first(); } + export const execFn = function execFn(a, cy) { return cy.exec(a); } + export const firstFn = function firstFn(a) { return a.first(); } // root - exports.getFn = function getFn(isJust, fromJust, actionString, props, cy) { + export const getFn = function getFn(isJust, fromJust, actionString, props, cy) { const action = actionString(props.action); const options = isJust(props.options) ? fromJust(props.options) : undefined; return cy.get(action, options); } // root - exports.goFn = function goFn(a, cy) { return cy.go(a); } + export const goFn = function goFn(a, cy) { return cy.go(a); } // root - exports.logFn = function logFn(a, cy) { return cy.log(a); } - exports.should1Fn = function should1Fn(a, b, c) { return c.should(a, b); } - // exports.taskFn = function taskFn(a, cy) { return cy.task(a); } - exports.thenFn = function thenFn(f, a) { return a.then(f); } - exports.typeFn = function typeFn(a, cy) { return cy.type(a); } + export const logFn = function logFn(a, cy) { return cy.log(a); } + export const should1Fn = function should1Fn(a, b, c) { return c.should(a, b); } + // export const taskFn = function taskFn(a, cy) { return cy.task(a); } + export const thenFn = function thenFn(f, a) { return a.then(f); } + export const typeFn = function typeFn(a, cy) { return cy.type(a); } // root - exports.visitFn = function visitFn(url, cy) { return cy.visit(url); } + export const visitFn = function visitFn(url, cy) { return cy.visit(url); } })(PS["Cypress.Foreign"] = PS["Cypress.Foreign"] || {}); (function($PS) { "use strict"; @@ -669,13 +669,13 @@ var PS = {}; (function(exports) { "use strict"; - exports.pureE = function (a) { + export const pureE = function (a) { return function () { return a; }; }; - exports.bindE = function (a) { + export const bindE = function (a) { return function (f) { return function () { return f(a())(); diff --git a/packages.dhall b/packages.dhall index 0f66ba5..958ab29 100644 --- a/packages.dhall +++ b/packages.dhall @@ -116,24 +116,18 @@ let additions = } ------------------------------- -} - - let upstream = - https://github.com/purescript/package-sets/releases/download/psc-0.13.8-20200724/packages.dhall sha256:bb941d30820a49345a0e88937094d2b9983d939c9fd3a46969b85ce44953d7d9 + https://github.com/purescript/package-sets/releases/download/psc-0.15.7-20230408/packages.dhall + sha256:eafb4e5bcbc2de6172e9457f321764567b33bc7279bd6952468d0d422aa33948 let overrides = {=} -let additions = { - package-name = - { dependencies = - [ "dependency1" - , "dependency2" - ] - , repo = - "https://example.com/path/to/git/repo.git" - , version = - "tag ('v4.0.0') or branch ('master')" - } - } +let additions = + { jquery = + { dependencies = [ "prelude", "foreign" ] + , repo = "https://github.com/KarenKonou/purescript-jquery.git" + , version = "master" + } + } in upstream // overrides // additions diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..a5ba5f5 --- /dev/null +++ b/shell.nix @@ -0,0 +1,22 @@ +{ pkgs ? import { } }: +let + easy-ps = import + (pkgs.fetchFromGitHub { + owner = "justinwoo"; + repo = "easy-purescript-nix"; + rev = "11d3bd58ce6e32703bf69cec04dc7c38eabe14ba"; + sha256 = "tESal32bcqqdZO+aKnBzc1GoL2mtnaDtj2y7ociCRGA="; + }) { + inherit pkgs; + }; +in +pkgs.mkShell { + buildInputs = [ + easy-ps.purs-0_15_7 + easy-ps.psc-package + pkgs.pulp + pkgs.spago + pkgs.yarn + pkgs.esbuild + ]; +} \ No newline at end of file diff --git a/spago.dhall b/spago.dhall index cb704bd..277bc2e 100644 --- a/spago.dhall +++ b/spago.dhall @@ -4,7 +4,7 @@ You can edit this file as you like. -} { name = "cypress" , dependencies = - [ "console", "effect", "foreign", "psci-support", "transformers", "jquery" ] + [ "console", "effect", "foreign", "psci-support", "transformers", "jquery", "either", "maybe", "partial", "prelude", "strings" ] , packages = ./packages.dhall , sources = [ "src/**/*.purs", "test/**/*.purs" ] , repository = "https://github.com/alexmouton/purescript-cypress" diff --git a/src/cypress/actions.js b/src/cypress/actions.js index 10adf3b..d412442 100644 --- a/src/cypress/actions.js +++ b/src/cypress/actions.js @@ -1,20 +1,20 @@ -exports.andFn = function andFn(a, cy) { return cy.and(a); } -exports.asFn = function asFn(a, cy) { return cy.as(a); } -exports.backFn = function backFn(cy) { return cy.back(); } -exports.blurFn = function blurFn(a, cy) { return cy.blur(a); } -exports.checkFn = function checkFn(a, cy) { return cy.check(a); } -exports.childrenFn = function childrenFn(a, cy) { return cy.children(a); } -exports.clearFn = function clearFn(cy) { return cy.clear(); } +export const andFn = function andFn(a, cy) { return cy.and(a); } +export const asFn = function asFn(a, cy) { return cy.as(a); } +export const backFn = function backFn(cy) { return cy.back(); } +export const blurFn = function blurFn(a, cy) { return cy.blur(a); } +export const checkFn = function checkFn(a, cy) { return cy.check(a); } +export const childrenFn = function childrenFn(a, cy) { return cy.children(a); } +export const clearFn = function clearFn(cy) { return cy.clear(); } // root -exports.clearCookieFn = function clearCookieFn(a, cy) { return cy.clearCookie(a); } +export const clearCookieFn = function clearCookieFn(a, cy) { return cy.clearCookie(a); } // root -exports.clearCookiesFn = function clearCookiesFn(a, cy) { return cy.clearCookies(a); } +export const clearCookiesFn = function clearCookiesFn(a, cy) { return cy.clearCookies(a); } // root -exports.clearLocalStorageFn = function clearLocalStorageFn(a, cy) { return cy.clearLocalStorage(a); } -exports.clickFn = function clickFn(cy) { return cy.click(); } +export const clearLocalStorageFn = function clearLocalStorageFn(a, cy) { return cy.clearLocalStorage(a); } +export const clickFn = function clickFn(cy) { return cy.click(); } // root -exports.clockFn = function clockFn(cy) { return cy.clock(); } -exports.closestFn = function closestFn(a, cy) { return cy.closest(a); } +export const clockFn = function clockFn(cy) { return cy.clock(); } +export const closestFn = function closestFn(a, cy) { return cy.closest(a); } // both const containsArgs = (isJust, fromJust, props) => { @@ -29,127 +29,127 @@ const containsArgs = (isJust, fromJust, props) => { } }; -exports.containsFn = (isJust, fromJust, props, cy) => { +export const containsFn = (isJust, fromJust, props, cy) => { return cy.contains(...containsArgs(isJust, fromJust, props)) } -exports.containsqFn = (isJust, fromJust, props, q, cy) => { +export const containsqFn = (isJust, fromJust, props, q, cy) => { return q.contains(...containsArgs(isJust, fromJust, props)) } -exports.dblclickFn = function dblclickFn(cy) { return cy.dblclick(); } +export const dblclickFn = function dblclickFn(cy) { return cy.dblclick(); } // both -exports.debugFn = function debugFn(a, cy) { return cy.debug(a); } +export const debugFn = function debugFn(a, cy) { return cy.debug(a); } // root -exports.documentFn = function documentFn(cy) { return cy.document(); } -// exports.eachFn = function eachFn(a, cy) { return cy.each(a); } -exports.endFn = function endFn(cy) { return cy.end(); } -exports.eqFn = function eqFn(a, cy) { return cy.eq(a); } +export const documentFn = function documentFn(cy) { return cy.document(); } +// export const eachFn = function eachFn(a, cy) { return cy.each(a); } +export const endFn = function endFn(cy) { return cy.end(); } +export const eqFn = function eqFn(a, cy) { return cy.eq(a); } // root -exports.execFn = function execFn(a, cy) { return cy.exec(a); } -exports.filterFn = function filterFn(a, cy) { return cy.filter(a); } -exports.findFn = function findFn(a, cy) { return cy.find(a); } -exports.firstFn = function firstFn(a) { return a.first(); } +export const execFn = function execFn(a, cy) { return cy.exec(a); } +export const filterFn = function filterFn(a, cy) { return cy.filter(a); } +export const findFn = function findFn(a, cy) { return cy.find(a); } +export const firstFn = function firstFn(a) { return a.first(); } // root -exports.fixtureFn = function fixtureFn(a, cy) { return cy.fixture(a); } -exports.focusFn = function focusFn(a, cy) { return cy.focus(a); } +export const fixtureFn = function fixtureFn(a, cy) { return cy.fixture(a); } +export const focusFn = function focusFn(a, cy) { return cy.focus(a); } // root -exports.focusedFn = function focusedFn(a, cy) { return cy.focused(a); } +export const focusedFn = function focusedFn(a, cy) { return cy.focused(a); } // root -exports.getFn = function getFn(isJust, fromJust, actionString, props, cy) { +export const getFn = function getFn(isJust, fromJust, actionString, props, cy) { const action = actionString(props.action); const options = isJust(props.options) ? fromJust(props.options) : undefined; return cy.get(action, options); } // root -exports.getCookieFn = function getCookieFn(a, cy) { return cy.getCookie(a); } +export const getCookieFn = function getCookieFn(a, cy) { return cy.getCookie(a); } // root -exports.getCookiesFn = function getCookiesFn(cy) { return cy.getCookies(); } +export const getCookiesFn = function getCookiesFn(cy) { return cy.getCookies(); } // root -exports.goFn = function goFn(a, cy) { return cy.go(a); } +export const goFn = function goFn(a, cy) { return cy.go(a); } // root -exports.hashFn = function hashFn(cy) { return cy.hash(); } -// exports.hoverFn = function hoverFn(a, cy) { return cy.hover(a); } +export const hashFn = function hashFn(cy) { return cy.hash(); } +// export const hoverFn = function hoverFn(a, cy) { return cy.hover(a); } -exports.invokeFn = function invokeFn(a, cy) { return cy.invoke(a); } +export const invokeFn = function invokeFn(a, cy) { return cy.invoke(a); } -// exports.itsFn = function itsFn(a, cy) { return cy.its(a); } -exports.lastFn = function lastFn(a, cy) { return cy.last(a); } +// export const itsFn = function itsFn(a, cy) { return cy.its(a); } +export const lastFn = function lastFn(a, cy) { return cy.last(a); } omport Foreign (Foreign) // root -exports.locationFn = function locationFn(a, cy) { return cy.location(a); } +export const locationFn = function locationFn(a, cy) { return cy.location(a); } // root -exports.logFn = function logFn(a, cy) { return cy.log(a); } -exports.nextFn = function nextFn(cy) { return cy.next(); } -exports.nextAllFn = function nextAllFn(a, cy) { return cy.nextAll(a); } -exports.nextUntilFn = function nextUntilFn(a, cy) { return cy.nextUntil(a); } -exports.notFn = function notFn(a, cy) { return cy.not(a); } -exports.parentFn = function parentFn(a, cy) { return cy.parent(a); } -exports.parentsFn = function parentsFn(a, cy) { return cy.parents(a); } -exports.parentsUntilFn = function parentsUntilFn(a, cy) { return cy.parentsUntil(a); } +export const logFn = function logFn(a, cy) { return cy.log(a); } +export const nextFn = function nextFn(cy) { return cy.next(); } +export const nextAllFn = function nextAllFn(a, cy) { return cy.nextAll(a); } +export const nextUntilFn = function nextUntilFn(a, cy) { return cy.nextUntil(a); } +export const notFn = function notFn(a, cy) { return cy.not(a); } +export const parentFn = function parentFn(a, cy) { return cy.parent(a); } +export const parentsFn = function parentsFn(a, cy) { return cy.parents(a); } +export const parentsUntilFn = function parentsUntilFn(a, cy) { return cy.parentsUntil(a); } // both -exports.pauseFn = function pauseFn(a, cy) { return cy.pause(a); } -exports.prevFn = function prevFn(a, cy) { return cy.prev(a); } -exports.prevAllFn = function prevAllFn(a, cy) { return cy.prevAll(a); } -exports.prevUntilFn = function prevUntilFn(a, cy) { return cy.prevUntil(a); } -// root -exports.readFileFn = function readFileFn(a, cy) { return cy.readFile(a); } -// root -exports.reloadFn = function reloadFn(cy) { return cy.reload(); } -// exports.requestFn = function requestFn(a, cy) { return cy.request(a); } -exports.rightclickFn = function rightclickFn(cy) { return cy.rightclick(); } -// exports.rootFn = function rootFn(cy) { return cy.root(); } -// exports.routeFn = function routeFn(a, cy) { return cy.route(a); } +export const pauseFn = function pauseFn(a, cy) { return cy.pause(a); } +export const prevFn = function prevFn(a, cy) { return cy.prev(a); } +export const prevAllFn = function prevAllFn(a, cy) { return cy.prevAll(a); } +export const prevUntilFn = function prevUntilFn(a, cy) { return cy.prevUntil(a); } +// root +export const readFileFn = function readFileFn(a, cy) { return cy.readFile(a); } +// root +export const reloadFn = function reloadFn(cy) { return cy.reload(); } +// export const requestFn = function requestFn(a, cy) { return cy.request(a); } +export const rightclickFn = function rightclickFn(cy) { return cy.rightclick(); } +// export const rootFn = function rootFn(cy) { return cy.root(); } +// export const routeFn = function routeFn(a, cy) { return cy.route(a); } // both -exports.screenshotFn = function screenshotFn(cy) { return cy.screenshot(); } -exports.scrollIntoViewFn = function scrollIntoViewFn(a, cy) { return cy.scrollIntoView(a); } -// exports.scrollToFn = function scrollToFn(a, cy) { return cy.scrollTo(a); } -exports.selectFn = function selectFn(values, cy) { return cy.select(values); } -// exports.serverFn = function serverFn(a, cy) { return cy.server(a); } +export const screenshotFn = function screenshotFn(cy) { return cy.screenshot(); } +export const scrollIntoViewFn = function scrollIntoViewFn(a, cy) { return cy.scrollIntoView(a); } +// export const scrollToFn = function scrollToFn(a, cy) { return cy.scrollTo(a); } +export const selectFn = function selectFn(values, cy) { return cy.select(values); } +// export const serverFn = function serverFn(a, cy) { return cy.server(a); } // root -exports.setCookieFn = function setCookieFn(a, b, cy) { return cy.setCookie(a, b); } +export const setCookieFn = function setCookieFn(a, b, cy) { return cy.setCookie(a, b); } -exports.should0Fn = function should0Fn(a, b) { return b.should(a); } -exports.should1Fn = function should1Fn(a, b, c) { return c.should(a, b); } -exports.should2Fn = function should2Fn(a, b, c, d) { return d.should(a, b, c); } +export const should0Fn = function should0Fn(a, b) { return b.should(a); } +export const should1Fn = function should1Fn(a, b, c) { return c.should(a, b); } +export const should2Fn = function should2Fn(a, b, c, d) { return d.should(a, b, c); } -exports.siblingsFn = function siblingsFn(a, cy) { return cy.siblings(a); } -// exports.spreadFn = function spreadFn(a, cy) { return cy.spread(a); } -// exports.spyFn = function spyFn(a, cy) { return cy.spy(a); } -// exports.stubFn = function stubFn(a, cy) { return cy.stub(a); } +export const siblingsFn = function siblingsFn(a, cy) { return cy.siblings(a); } +// export const spreadFn = function spreadFn(a, cy) { return cy.spread(a); } +// export const spyFn = function spyFn(a, cy) { return cy.spy(a); } +// export const stubFn = function stubFn(a, cy) { return cy.stub(a); } // form -exports.submitFn = function submitFn(a, cy) { return cy.submit(a); } -// exports.taskFn = function taskFn(a, cy) { return cy.task(a); } -exports.thenFn = function thenFn(f, a) { return a.then(f); } +export const submitFn = function submitFn(a, cy) { return cy.submit(a); } +// export const taskFn = function taskFn(a, cy) { return cy.task(a); } +export const thenFn = function thenFn(f, a) { return a.then(f); } // root -exports.tickFn = function tickFn(a, cy) { return cy.tick(a); } +export const tickFn = function tickFn(a, cy) { return cy.tick(a); } // root -exports.titleFn = function titleFn(cy) { return cy.title(); } -exports.triggerFn = function triggerFn(a, cy) { return cy.trigger(a); } -exports.typeFn = function typeFn(a, cy) { return cy.type(a); } -exports.uncheckFn = function uncheckFn(a, cy) { return cy.uncheck(a); } +export const titleFn = function titleFn(cy) { return cy.title(); } +export const triggerFn = function triggerFn(a, cy) { return cy.trigger(a); } +export const typeFn = function typeFn(a, cy) { return cy.type(a); } +export const uncheckFn = function uncheckFn(a, cy) { return cy.uncheck(a); } // root -exports.urlFn = function urlFn(cy) { return cy.url(); } +export const urlFn = function urlFn(cy) { return cy.url(); } // root -exports.viewportFn = function viewportFn(a, b, cy) { return cy.viewport(a, b); } +export const viewportFn = function viewportFn(a, b, cy) { return cy.viewport(a, b); } // root -exports.visitFn = function visitFn(url, cy) { return cy.visit(url); } +export const visitFn = function visitFn(url, cy) { return cy.visit(url); } // root -exports.waitFn = function waitFn(a, cy) { return cy.wait(a); } +export const waitFn = function waitFn(a, cy) { return cy.wait(a); } // root -exports.windowFn = function windowFn(cy) { return cy.window(); } -exports.withinFn = function withinFn(a, cy) { return cy.within(a); } -exports.wrapFn = function wrapFn(a, cy) { return cy.wrap(a); } -// exports.writeFileFn = function writeFileFn(a, cy) { return cy.writeFile(a); } +export const windowFn = function windowFn(cy) { return cy.window(); } +export const withinFn = function withinFn(a, cy) { return cy.within(a); } +export const wrapFn = function wrapFn(a, cy) { return cy.wrap(a); } +// export const writeFileFn = function writeFileFn(a, cy) { return cy.writeFile(a); } -exports.xpathFn = function xpathFn(isJust, fromJust, s, opts, cy) { +export const xpathFn = function xpathFn(isJust, fromJust, s, opts, cy) { const options = isJust(opts) ? fromJust(opts) : undefined; return cy.xpath(s, opts); } -exports.attachFileFn = function attachFileFn(isJust, fromJust, a, b, opts) { +export const attachFileFn = function attachFileFn(isJust, fromJust, a, b, opts) { const options = isJust(opts) ? fromJust(opts) : undefined; return b.attachFile(a, options); } diff --git a/src/cypress/chai.js b/src/cypress/chai.js index 51c7d59..f8f6d5d 100644 --- a/src/cypress/chai.js +++ b/src/cypress/chai.js @@ -1,3 +1,3 @@ -exports.should0Fn = function should0Fn(a, b) { return b.should(a); } -exports.should1Fn = function should1Fn(a, b, c) { return c.should(a, b); } -exports.should2Fn = function should2Fn(a, b, c, d) { return d.should(a, b, c); } +export const should0Fn = function should0Fn(a, b) { return b.should(a); } +export const should1Fn = function should1Fn(a, b, c) { return c.should(a, b); } +export const should2Fn = function should2Fn(a, b, c, d) { return d.should(a, b, c); } diff --git a/src/cypress/elements.purs b/src/cypress/elements.purs index 55dbf95..eaed4ae 100644 --- a/src/cypress/elements.purs +++ b/src/cypress/elements.purs @@ -4,7 +4,7 @@ import JQuery import Prelude import Control.Monad.Except (runExcept) -import Data.Either (fromRight) +import Data.Either (Either(..), fromRight) import Effect (Effect) import Foreign (F, Foreign, readBoolean, readInt, readNumber, readString) import Partial.Unsafe (unsafePartial) @@ -14,7 +14,10 @@ newtype Elements = Elements JQuery propRead :: forall a. (Foreign -> F a) -> String -> Elements -> Effect a propRead read s (Elements e) = do p <- getProp s e - pure $ unsafePartial $ fromRight $ runExcept $ read p + pure $ unsafePartial $ fromRight' $ runExcept $ read p + +fromRight' :: forall a b. Partial => Either a b -> b +fromRight' (Right a) = a propBoolean :: String -> Elements -> Effect Boolean propBoolean = propRead readBoolean