diff --git a/spago.lock b/spago.lock index 714cf26..8f99559 100644 --- a/spago.lock +++ b/spago.lock @@ -21,7 +21,7 @@ "spec": ">=8.0.0 <9.0.0" }, { - "spec-node": ">=0.0.2 <0.0.3" + "spec-node": ">=0.0.3 <0.0.4" } ], "build_plan": [ @@ -107,7 +107,7 @@ }, "package_set": { "address": { - "registry": "60.2.1" + "registry": "63.5.0" }, "compiler": ">=0.15.15 <0.16.0", "content": { @@ -143,7 +143,7 @@ "ask": "1.0.0", "assert": "6.0.0", "assert-multiple": "0.4.0", - "avar": "5.0.0", + "avar": "5.0.1", "b64": "0.0.8", "barbies": "1.0.1", "barlow-lens": "0.9.0", @@ -165,7 +165,7 @@ "chameleon-transformers": "1.0.0", "channel": "1.0.0", "checked-exceptions": "3.1.1", - "choku": "1.0.1", + "choku": "1.0.2", "classless": "0.1.1", "classless-arbitrary": "0.1.1", "classless-decode-json": "0.1.1", @@ -185,6 +185,7 @@ "convertable-options": "1.0.0", "coroutines": "7.0.0", "css": "6.0.0", + "css-class-name-extractor": "0.0.4", "css-frameworks": "1.0.1", "csv-stream": "2.3.0", "data-mvc": "0.0.2", @@ -198,6 +199,7 @@ "deno": "0.0.5", "dissect": "1.0.0", "distributive": "6.0.0", + "dodo-printer": "2.2.3", "dom-filereader": "7.0.0", "dom-indexed": "12.0.0", "dom-simple": "0.4.0", @@ -224,7 +226,7 @@ "exists": "6.0.0", "exitcodes": "4.0.0", "expect-inferred": "3.0.0", - "ezfetch": "1.0.0", + "ezfetch": "1.1.0", "fahrtwind": "2.0.0", "fallback": "0.1.0", "fast-vect": "1.2.0", @@ -315,19 +317,20 @@ "js-date": "8.0.0", "js-fetch": "0.2.1", "js-fileio": "3.0.0", - "js-intl": "1.0.4", + "js-intl": "1.1.4", "js-iterators": "0.1.1", "js-maps": "0.1.2", "js-promise": "1.0.0", "js-promise-aff": "1.0.0", "js-timers": "6.1.0", "js-uri": "3.1.0", + "jsdom": "1.0.0", "json": "1.1.0", "json-codecs": "5.0.0", "justifill": "0.5.0", "jwt": "0.0.9", "labeled-data": "0.2.0", - "language-cst-parser": "0.14.0", + "language-cst-parser": "0.14.1", "lazy": "6.0.0", "lazy-joe": "1.0.0", "lcg": "4.0.0", @@ -378,20 +381,21 @@ "node-event-emitter": "3.0.0", "node-execa": "5.0.0", "node-fs": "9.2.0", - "node-glob-basic": "1.3.0", + "node-glob-basic": "2.0.0", "node-http": "9.1.0", "node-http2": "1.1.1", "node-human-signals": "1.0.0", "node-net": "5.1.0", "node-os": "5.1.0", - "node-path": "5.0.0", + "node-path": "5.0.1", "node-process": "11.2.0", "node-readline": "8.1.1", "node-sqlite3": "8.0.0", "node-stream-pipes": "2.1.6", - "node-streams": "9.0.0", + "node-streams": "9.0.1", "node-tls": "0.3.1", "node-url": "7.0.1", + "node-workerbees": "0.3.1", "node-zlib": "0.4.0", "nonempty": "7.0.0", "now": "6.0.0", @@ -404,6 +408,7 @@ "object-maps": "0.3.0", "ocarina": "1.5.4", "oooooooooorrrrrrrmm-lib": "0.0.1", + "open-colors-scales-and-schemes": "1.0.0", "open-folds": "6.4.0", "open-foreign-generic": "11.0.3", "open-memoize": "6.2.0", @@ -418,7 +423,7 @@ "owoify": "1.2.0", "pairs": "9.0.1", "parallel": "7.0.0", - "parsing": "10.2.0", + "parsing": "10.3.0", "parsing-dataview": "3.2.4", "partial": "4.0.0", "pathy": "9.0.0", @@ -432,15 +437,16 @@ "pointed-list": "0.5.1", "polymorphic-vectors": "4.0.0", "posix-types": "6.0.0", - "postgresql": "2.0.19", + "postgresql": "2.0.20", "precise": "6.0.0", "precise-datetime": "7.0.0", - "prelude": "6.0.1", + "prelude": "6.0.2", "prettier-printer": "3.0.0", + "printf": "0.1.0", "priority-queue": "0.1.2", "profunctor": "6.0.1", "profunctor-lenses": "8.0.0", - "protobuf": "4.3.0", + "protobuf": "4.4.0", "psa-utils": "8.0.0", "psci-support": "6.0.0", "punycode": "1.0.0", @@ -458,7 +464,8 @@ "react-basic": "17.0.0", "react-basic-classic": "3.0.0", "react-basic-dnd": "10.1.0", - "react-basic-dom": "6.1.0", + "react-basic-dom": "7.0.0", + "react-basic-dom-beta": "0.1.1", "react-basic-emotion": "7.1.0", "react-basic-hooks": "8.2.0", "react-basic-storybook": "2.0.0", @@ -496,6 +503,7 @@ "selection-foldable": "0.2.0", "selective-functors": "1.0.1", "semirings": "7.0.0", + "shuffle": "1.1.0", "signal": "13.0.0", "simple-emitter": "3.0.1", "simple-i18n": "2.0.1", @@ -509,10 +517,10 @@ "soundfonts": "4.1.0", "sparse-matrices": "2.0.1", "sparse-polynomials": "3.0.1", - "spec": "8.0.0", - "spec-discovery": "8.3.0", + "spec": "8.1.1", + "spec-discovery": "8.4.0", "spec-mocha": "5.1.1", - "spec-node": "0.0.2", + "spec-node": "0.0.3", "spec-quickcheck": "5.0.2", "spec-reporter-xunit": "0.7.1", "splitmix": "2.1.0", @@ -530,6 +538,7 @@ "systemd-journald": "0.3.0", "tagged": "4.0.2", "tailrec": "6.1.0", + "tanstack-query": "2.0.0", "tecton": "0.2.1", "tecton-halogen": "0.2.0", "test-unit": "17.0.0", @@ -537,11 +546,14 @@ "thermite-dom": "0.3.1", "these": "6.0.0", "threading": "0.0.3", + "tidy": "0.11.1", + "tidy-codegen": "4.0.1", "tldr": "0.0.0", "toestand": "0.9.0", "transformation-matrix": "1.0.1", "transformers": "6.1.0", "tree-rose": "4.0.2", + "trivial-unfold": "0.4.1", "ts-bridge": "4.0.0", "tuples": "7.0.0", "two-or-more": "1.0.0", @@ -579,6 +591,7 @@ "vectors": "2.1.0", "versions": "7.0.0", "visx": "0.0.2", + "vitest": "1.0.0", "web-clipboard": "6.0.0", "web-cssom": "2.0.0", "web-cssom-view": "0.1.0", @@ -607,11 +620,14 @@ "webextension-polyfill": "0.1.0", "webgpu": "0.0.1", "which": "2.0.0", + "whine-core": "0.0.28", "xterm": "1.0.0", "yoga-fetch": "1.0.1", "yoga-json": "5.1.0", "yoga-om": "0.1.0", "yoga-postgres": "6.0.0", + "yoga-react-dom": "1.0.1", + "yoga-subtlecrypto": "0.1.0", "yoga-tree": "1.0.0", "z3": "0.0.2", "zipperarray": "2.0.0" @@ -718,8 +734,8 @@ }, "avar": { "type": "registry", - "version": "5.0.0", - "integrity": "sha256-e7hf0x4hEpcygXP0LtvfvAQ49Bbj2aWtZT3gqM///0A=", + "version": "5.0.1", + "integrity": "sha256-f+bRR3qQPa/GVe4UbLQiJBy7+PzJkUCwT6qNn0UlkMY=", "dependencies": [ "aff", "effect", @@ -1176,8 +1192,8 @@ }, "node-path": { "type": "registry", - "version": "5.0.0", - "integrity": "sha256-pd82nQ+2l5UThzaxPdKttgDt7xlsgIDLpPG0yxDEdyE=", + "version": "5.0.1", + "integrity": "sha256-ePOElFamHkffhwJcS0Ozq4A14rflnkasFU6X2B8/yXs=", "dependencies": [ "effect" ] @@ -1200,17 +1216,23 @@ }, "node-streams": { "type": "registry", - "version": "9.0.0", - "integrity": "sha256-2n6dq7YWleTDmD1Kur/ul7Cn08IvWrScgPf+0PgX2TQ=", + "version": "9.0.1", + "integrity": "sha256-7RJ6RqjOlhW+QlDFQNUHlkCG/CuYTTLT8yary5jhhsU=", "dependencies": [ "aff", + "arrays", "effect", "either", "exceptions", + "maybe", "node-buffer", "node-event-emitter", "nullable", - "prelude" + "prelude", + "refs", + "st", + "tailrec", + "unsafe-coerce" ] }, "nonempty": { @@ -1383,8 +1405,8 @@ }, "prelude": { "type": "registry", - "version": "6.0.1", - "integrity": "sha256-o8p6SLYmVPqzXZhQFd2hGAWEwBoXl1swxLG/scpJ0V0=", + "version": "6.0.2", + "integrity": "sha256-kiAPZxihtAel8uRiTNdccf4qylp/9J3jNkEHNAD0MsE=", "dependencies": [] }, "profunctor": { @@ -1431,8 +1453,8 @@ }, "spec": { "type": "registry", - "version": "8.0.0", - "integrity": "sha256-Yn7MhDai1YULlQF45+9FTOTf2rcjoda1Jf2IrEFCoeg=", + "version": "8.1.1", + "integrity": "sha256-EM7UfQIaSgiw13LJ4ZASkfYmmRDKIlec3nYbGKFqGhk=", "dependencies": [ "aff", "ansi", @@ -1465,8 +1487,8 @@ }, "spec-node": { "type": "registry", - "version": "0.0.2", - "integrity": "sha256-2SZRy6QjokHms6+d150pShlbnOg+9XWYkrUUdX/QDjc=", + "version": "0.0.3", + "integrity": "sha256-Bjzg6l4uOfMN/FV0SKuT1Mm8eMP9sloLGVcY/0MeMnI=", "dependencies": [ "aff", "argonaut-codecs", diff --git a/spago.yaml b/spago.yaml index 543715e..6c3a11c 100644 --- a/spago.yaml +++ b/spago.yaml @@ -1,6 +1,6 @@ workspace: packageSet: - registry: 60.2.1 + registry: 63.5.0 package: name: spec-discovery @@ -16,7 +16,7 @@ package: - foldable-traversable: ">=6.0.0 <7.0.0" - prelude: ">=6.0.1 <7.0.0" - spec: ">=8.0.0 <9.0.0" - - spec-node: ">=0.0.2 <0.0.3" + - spec-node: ">=0.0.3 <0.0.4" test: main: Test.Main dependencies: [] diff --git a/src/Test/Spec/Discovery.js b/src/Test/Spec/Discovery.js index 127313c..34489ed 100644 --- a/src/Test/Spec/Discovery.js +++ b/src/Test/Spec/Discovery.js @@ -12,7 +12,7 @@ if (import.meta.url === `file://${process.argv[1]}`) { ) } -export function getSpecs(pattern) { +export function getSpecs(pattern, mapToAff) { return (onError, onSuccess) => { const regex = new RegExp(pattern) const modulePromises = fs @@ -22,9 +22,16 @@ export function getSpecs(pattern) { const fullPath = __onWindows ? path.join('file://', __dirname, '..', name, 'index.js') : path.join(__dirname, '..', name, 'index.js') - return import(fullPath).then(module => - module && typeof module.spec !== 'undefined' ? module.spec : null - ) + return import(fullPath).then(module => { + const spec = module && module.spec; + if (!spec) return null; + + if (spec.constructor.name !== "Aff") { + return mapToAff(spec); + } + + return spec; + }) }) Promise.all(modulePromises) diff --git a/src/Test/Spec/Discovery.purs b/src/Test/Spec/Discovery.purs index 9484244..2a9430f 100644 --- a/src/Test/Spec/Discovery.purs +++ b/src/Test/Spec/Discovery.purs @@ -1,30 +1,43 @@ module Test.Spec.Discovery ( discover , discoverAndRunSpecs - ) - where + ) where import Prelude +import Data.Identity (Identity(..)) import Data.Traversable (sequence_) import Effect (Effect) -import Effect.Aff (launchAff_) +import Effect.Aff (Aff, launchAff_) import Effect.Aff.Class (class MonadAff, liftAff) -import Effect.Aff.Compat (EffectFn1, EffectFnAff, fromEffectFnAff, runEffectFn1) +import Effect.Aff.Compat (EffectFnAff, fromEffectFnAff) import Effect.Class (liftEffect) -import Test.Spec (Spec) +import Effect.Uncurried (EffectFn2, runEffectFn2) +import Test.Spec (Spec, SpecT, mapSpec) import Test.Spec.Runner (Reporter) -import Test.Spec.Runner.Node (runSpecAndExitProcess) +import Test.Spec.Runner.Node (runSpecAndExitProcess') +import Test.Spec.Runner.Node.Config (defaultConfig) -foreign import getSpecs :: EffectFn1 String (EffectFnAff (Array (Spec Unit))) +idToAff :: forall a. Identity a -> Aff a +idToAff (Identity a) = pure a -discover :: ∀ m. MonadAff m => String -> m (Spec Unit) +foreign import getSpecs + :: EffectFn2 String + ((Spec Unit) -> SpecT Aff Unit Aff Unit) + (EffectFnAff (Array (SpecT Aff Unit Aff Unit))) + +discover :: ∀ m. MonadAff m => String -> m (SpecT Aff Unit Aff Unit) discover pattern = do - runDiscover <- liftEffect $ runEffectFn1 getSpecs pattern + runDiscover <- liftEffect $ runEffectFn2 getSpecs pattern (mapSpec idToAff) specs <- liftAff $ fromEffectFnAff runDiscover pure $ sequence_ specs discoverAndRunSpecs :: Array Reporter -> String -> Effect Unit discoverAndRunSpecs reporters pattern = launchAff_ do specs <- discover pattern - liftEffect $ runSpecAndExitProcess reporters specs + liftEffect $ runSpecAndExitProcess' @Aff + { defaultConfig: defaultConfig + , parseCLIOptions: true + } + reporters + specs diff --git a/test/Test/Spec/DiscoveryAffSpec.purs b/test/Test/Spec/DiscoveryAffSpec.purs new file mode 100644 index 0000000..4f1e222 --- /dev/null +++ b/test/Test/Spec/DiscoveryAffSpec.purs @@ -0,0 +1,11 @@ +module Test.Spec.DiscoveryAffSpec where + +import Prelude + +import Effect.Aff (Aff) +import Test.Spec (describe, it, SpecT) + +spec :: SpecT Aff Unit Aff Unit +spec = + describe "discovery aff" do + it "discovers the specs in this project" $ pure unit