mirror of
https://github.com/penpot/penpot.git
synced 2026-10-29 05:50:35 +00:00
🚧 WIP Step 21 Refactor namespaces
This commit is contained in:
parent
23746893e6
commit
dc22e2d77f
@ -181,7 +181,7 @@
|
||||
{:target :node-script
|
||||
:output-to "target/renderer-benchmarks/runner.cjs"
|
||||
:output-dir "target/renderer-benchmarks/runner/"
|
||||
:main benches.render-wasm.runner/-main
|
||||
:main benches.render-wasm.node.runner/-main
|
||||
:devtools {:autoload false}
|
||||
|
||||
:compiler-options
|
||||
@ -199,7 +199,7 @@
|
||||
{:target :node-script
|
||||
:output-to "target/renderer-benchmarks/pilot.cjs"
|
||||
:output-dir "target/renderer-benchmarks/pilot/"
|
||||
:main benches.render-wasm.pilot/-main
|
||||
:main benches.render-wasm.node.pilot/-main
|
||||
:devtools {:autoload false}
|
||||
|
||||
:compiler-options
|
||||
@ -223,7 +223,7 @@
|
||||
|
||||
:modules
|
||||
{:browser
|
||||
{:exports {default benches.render-wasm.browser/bridge}}}
|
||||
{:exports {default benches.render-wasm.browser.bridge/bridge}}}
|
||||
|
||||
:compiler-options
|
||||
{:output-feature-set :es2020
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
;;
|
||||
;; Copyright (c) KALEIDOS SUBSIDIARY SL
|
||||
|
||||
(ns benches.render-wasm.browser
|
||||
(ns benches.render-wasm.browser.bridge
|
||||
"Browser bridge for the benchmarks.
|
||||
|
||||
Lifecycle here mirrors the editor cold-load path
|
||||
@ -27,12 +27,12 @@
|
||||
;; at load
|
||||
[app.render-wasm.api.enums]
|
||||
[app.render-wasm.api.webgl :as webgl]
|
||||
[benches.render-wasm.browser.upload :as upload]
|
||||
[benches.render-wasm.cases]
|
||||
[benches.render-wasm.declarations :as decl]
|
||||
[benches.render-wasm.failures :as fail]
|
||||
[benches.render-wasm.protocol :as protocol]
|
||||
[benches.render-wasm.scenes.common :as scenes]
|
||||
[benches.render-wasm.scenes.core :as core]
|
||||
[benches.render-wasm.upload :as upload]))
|
||||
[benches.render-wasm.runtime.protocol :as protocol]
|
||||
[benches.render-wasm.snapshot :as scenes]))
|
||||
|
||||
;; Forward decls
|
||||
(declare now guard-current! read-graphics)
|
||||
@ -346,9 +346,9 @@
|
||||
{:error (fail/fail-data {:phase "invalid-args"
|
||||
:message "load-scene needs a Transit request with case"})}
|
||||
(let [case-desc (:case params)
|
||||
checked (core/check-collected-case case-desc)
|
||||
scene (core/registered-scene (:scene checked))
|
||||
local (core/registered-case (:id checked))]
|
||||
checked (decl/check-collected-case case-desc)
|
||||
scene (decl/registered-scene (:scene checked))
|
||||
local (decl/registered-case (:id checked))]
|
||||
(when (nil? scene)
|
||||
(throw (ex-info (str "unknown scene: " (:scene checked))
|
||||
{:phase "invalid-args"})))
|
||||
@ -373,7 +373,7 @@
|
||||
(let [epoch (swap! owner-epoch* inc)]
|
||||
(release-owner-resources!)
|
||||
(reset! module-promise* nil)
|
||||
(let [viewport (core/resolve-viewport (:view case-desc))]
|
||||
(let [viewport (decl/resolve-viewport (:view case-desc))]
|
||||
{:epoch epoch
|
||||
:dims viewport
|
||||
:hooks (browser-hooks epoch (+ (now) attempt-ms-budget))
|
||||
@ -4,7 +4,7 @@
|
||||
;;
|
||||
;; Copyright (c) KALEIDOS SUBSIDIARY SL
|
||||
|
||||
(ns benches.render-wasm.upload
|
||||
(ns benches.render-wasm.browser.upload
|
||||
"Benchmark scene upload.
|
||||
|
||||
In order to emulate editor behaviour, `upload-scene!` derives
|
||||
@ -18,7 +18,7 @@
|
||||
(`benches.render-wasm.cases`)"
|
||||
(:require
|
||||
[app.common.render-wasm.serialize-shape :as serialize-shape]
|
||||
[benches.render-wasm.scenes.common :as common]))
|
||||
[benches.render-wasm.snapshot :as common]))
|
||||
|
||||
(defn prepare-scene
|
||||
"Derives the parent-before-child shape vector from a validated `snapshot`.
|
||||
@ -32,7 +32,7 @@
|
||||
|
||||
- `snapshot` is `{:objects {uuid shape} :refs {label uuid}}` per the ticket02
|
||||
contract; it must already be validated (see
|
||||
`benches.render-wasm.scenes.common/validate!`).
|
||||
`benches.render-wasm.snapshot/validate!`).
|
||||
- `opts` carries `:include-layout?` and `:include-fills-strokes?` through to
|
||||
the batch writer.
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
;;
|
||||
;; Copyright (c) KALEIDOS SUBSIDIARY SL
|
||||
|
||||
(ns benches.render-wasm.scenes.builder
|
||||
(ns benches.render-wasm.builder
|
||||
"Construction macros for renderer benchmark scenes.
|
||||
|
||||
Runtime helpers and scope state live in the sibling `builder.cljs`.
|
||||
@ -40,11 +40,11 @@
|
||||
"Runs `body` in a scene scope and returns the validated snapshot."
|
||||
[params & body]
|
||||
`(let [params# ~params
|
||||
state# (benches.render-wasm.scenes.builder/start params#)]
|
||||
(binding [benches.render-wasm.scenes.builder/*state* state#
|
||||
benches.render-wasm.scenes.builder/*defaults* (:defaults params#)]
|
||||
state# (benches.render-wasm.builder/start params#)]
|
||||
(binding [benches.render-wasm.builder/*state* state#
|
||||
benches.render-wasm.builder/*defaults* (:defaults params#)]
|
||||
~@body
|
||||
(benches.render-wasm.scenes.builder/finish! state#))))
|
||||
(benches.render-wasm.builder/finish! state#))))
|
||||
|
||||
(defmacro rect
|
||||
"Adds one rectangle to the current scene scope and returns its uuid.
|
||||
@ -55,23 +55,23 @@
|
||||
the instance `:refs`; duplicates and other label types are rejected. `attrs`
|
||||
override the defaults attribute by attribute."
|
||||
([]
|
||||
`(benches.render-wasm.scenes.builder/rect!
|
||||
benches.render-wasm.scenes.builder/*state*
|
||||
benches.render-wasm.scenes.builder/*defaults*
|
||||
`(benches.render-wasm.builder/rect!
|
||||
benches.render-wasm.builder/*state*
|
||||
benches.render-wasm.builder/*defaults*
|
||||
nil
|
||||
{}))
|
||||
|
||||
([label-or-attrs]
|
||||
`(benches.render-wasm.scenes.builder/rect!
|
||||
benches.render-wasm.scenes.builder/*state*
|
||||
benches.render-wasm.scenes.builder/*defaults*
|
||||
`(benches.render-wasm.builder/rect!
|
||||
benches.render-wasm.builder/*state*
|
||||
benches.render-wasm.builder/*defaults*
|
||||
~label-or-attrs
|
||||
{}))
|
||||
|
||||
([label attrs]
|
||||
`(benches.render-wasm.scenes.builder/rect!
|
||||
benches.render-wasm.scenes.builder/*state*
|
||||
benches.render-wasm.scenes.builder/*defaults*
|
||||
`(benches.render-wasm.builder/rect!
|
||||
benches.render-wasm.builder/*state*
|
||||
benches.render-wasm.builder/*defaults*
|
||||
~label
|
||||
~attrs)))
|
||||
|
||||
@ -85,21 +85,21 @@
|
||||
override the defaults attribute by attribute.
|
||||
"
|
||||
([]
|
||||
`(benches.render-wasm.scenes.builder/path!
|
||||
benches.render-wasm.scenes.builder/*state*
|
||||
benches.render-wasm.scenes.builder/*defaults*
|
||||
`(benches.render-wasm.builder/path!
|
||||
benches.render-wasm.builder/*state*
|
||||
benches.render-wasm.builder/*defaults*
|
||||
nil
|
||||
{}))
|
||||
([label-or-attrs]
|
||||
`(benches.render-wasm.scenes.builder/path!
|
||||
benches.render-wasm.scenes.builder/*state*
|
||||
benches.render-wasm.scenes.builder/*defaults*
|
||||
`(benches.render-wasm.builder/path!
|
||||
benches.render-wasm.builder/*state*
|
||||
benches.render-wasm.builder/*defaults*
|
||||
~label-or-attrs
|
||||
{}))
|
||||
([label attrs]
|
||||
`(benches.render-wasm.scenes.builder/path!
|
||||
benches.render-wasm.scenes.builder/*state*
|
||||
benches.render-wasm.scenes.builder/*defaults*
|
||||
`(benches.render-wasm.builder/path!
|
||||
benches.render-wasm.builder/*state*
|
||||
benches.render-wasm.builder/*defaults*
|
||||
~label
|
||||
~attrs)))
|
||||
|
||||
@ -112,23 +112,23 @@
|
||||
the instance `:refs`; duplicates and other label types are rejected. `attrs`
|
||||
override the defaults attribute by attribute."
|
||||
([]
|
||||
`(benches.render-wasm.scenes.builder/circle!
|
||||
benches.render-wasm.scenes.builder/*state*
|
||||
benches.render-wasm.scenes.builder/*defaults*
|
||||
`(benches.render-wasm.builder/circle!
|
||||
benches.render-wasm.builder/*state*
|
||||
benches.render-wasm.builder/*defaults*
|
||||
nil
|
||||
{}))
|
||||
|
||||
([label-or-attrs]
|
||||
`(benches.render-wasm.scenes.builder/circle!
|
||||
benches.render-wasm.scenes.builder/*state*
|
||||
benches.render-wasm.scenes.builder/*defaults*
|
||||
`(benches.render-wasm.builder/circle!
|
||||
benches.render-wasm.builder/*state*
|
||||
benches.render-wasm.builder/*defaults*
|
||||
~label-or-attrs
|
||||
{}))
|
||||
|
||||
([label attrs]
|
||||
`(benches.render-wasm.scenes.builder/circle!
|
||||
benches.render-wasm.scenes.builder/*state*
|
||||
benches.render-wasm.scenes.builder/*defaults*
|
||||
`(benches.render-wasm.builder/circle!
|
||||
benches.render-wasm.builder/*state*
|
||||
benches.render-wasm.builder/*defaults*
|
||||
~label
|
||||
~attrs)))
|
||||
|
||||
@ -142,12 +142,12 @@
|
||||
coordinates. Empty frames are allowed."
|
||||
[label-or-attrs & body]
|
||||
(if (or (keyword? label-or-attrs) (vector? label-or-attrs))
|
||||
`(benches.render-wasm.scenes.builder/with-container
|
||||
`(benches.render-wasm.builder/with-container
|
||||
:frame
|
||||
~(first body)
|
||||
~label-or-attrs
|
||||
(fn [] ~@(rest body)))
|
||||
`(benches.render-wasm.scenes.builder/with-container
|
||||
`(benches.render-wasm.builder/with-container
|
||||
:frame
|
||||
~label-or-attrs
|
||||
nil
|
||||
@ -164,12 +164,12 @@
|
||||
one child."
|
||||
[label-or-attrs & body]
|
||||
(if (or (keyword? label-or-attrs) (vector? label-or-attrs))
|
||||
`(benches.render-wasm.scenes.builder/with-container
|
||||
`(benches.render-wasm.builder/with-container
|
||||
:group
|
||||
~(first body)
|
||||
~label-or-attrs
|
||||
(fn [] ~@(rest body)))
|
||||
`(benches.render-wasm.scenes.builder/with-container
|
||||
`(benches.render-wasm.builder/with-container
|
||||
:group
|
||||
~label-or-attrs
|
||||
nil
|
||||
@ -191,12 +191,12 @@
|
||||
frames."
|
||||
[label-or-attrs & body]
|
||||
(if (or (keyword? label-or-attrs) (vector? label-or-attrs))
|
||||
`(benches.render-wasm.scenes.builder/with-container
|
||||
`(benches.render-wasm.builder/with-container
|
||||
:bool
|
||||
~(first body)
|
||||
~label-or-attrs
|
||||
(fn [] ~@(rest body)))
|
||||
`(benches.render-wasm.scenes.builder/with-container
|
||||
`(benches.render-wasm.builder/with-container
|
||||
:bool
|
||||
~label-or-attrs
|
||||
nil
|
||||
@ -4,7 +4,7 @@
|
||||
;;
|
||||
;; Copyright (c) KALEIDOS SUBSIDIARY SL
|
||||
|
||||
(ns benches.render-wasm.scenes.builder
|
||||
(ns benches.render-wasm.builder
|
||||
"Construction of benchmark scenes.
|
||||
|
||||
A `scene` consists of one seeded generator, one object map, and one label
|
||||
@ -41,7 +41,7 @@
|
||||
[app.common.types.shape :as cts]
|
||||
[app.common.types.shape-tree :as ctst]
|
||||
[app.common.uuid :as uuid]
|
||||
[benches.render-wasm.scenes.common :as common]))
|
||||
[benches.render-wasm.snapshot :as common]))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Poor-man's seeded PRNG
|
||||
@ -39,7 +39,7 @@
|
||||
{:id :rects/zoom ...}]"
|
||||
(:require
|
||||
[app.common.schema :as sm]
|
||||
[benches.render-wasm.scenes.core :as core]
|
||||
[benches.render-wasm.declarations :as decl]
|
||||
benches.render-wasm.scenes.masks
|
||||
benches.render-wasm.scenes.paths
|
||||
benches.render-wasm.scenes.plus
|
||||
@ -64,7 +64,7 @@
|
||||
(thunk)
|
||||
(catch :default cause
|
||||
(let [data (ex-data cause)]
|
||||
(if (contains? #{::core/invalid-case ::core/non-serializable-case} (:type data))
|
||||
(if (contains? #{::decl/invalid-case ::decl/non-serializable-case} (:type data))
|
||||
(throw (ex-info (ex-message cause)
|
||||
(assoc data :type ::invalid-case)
|
||||
cause))
|
||||
@ -95,7 +95,7 @@
|
||||
{:type ::invalid-case
|
||||
:id id
|
||||
:scene scene})))
|
||||
(as-invalid-case! #(core/check-registered-case! registered))
|
||||
(as-invalid-case! #(decl/check-registered-case! registered))
|
||||
(check-params! id scene (:params-schema entry) params)
|
||||
registered))
|
||||
|
||||
@ -104,23 +104,23 @@
|
||||
version/description/seed attached, internal keys stripped, transit wire
|
||||
checked."
|
||||
[master-seed registered scene-entry]
|
||||
(let [projected (-> (core/project-case registered)
|
||||
(let [projected (-> (decl/project-case registered)
|
||||
(assoc :scene-version (:version scene-entry)
|
||||
:scene-description (:description scene-entry)
|
||||
:scene-seed (core/derive-seed master-seed
|
||||
:scene-seed (decl/derive-seed master-seed
|
||||
(:scene registered)
|
||||
(:params registered))))]
|
||||
(as-invalid-case! #(core/check-collected-case projected))))
|
||||
(as-invalid-case! #(decl/check-collected-case projected))))
|
||||
|
||||
(defn scene-ids
|
||||
"Registered scene ids in declaration order."
|
||||
[]
|
||||
(mapv :id (core/scenes)))
|
||||
(mapv :id (decl/scenes)))
|
||||
|
||||
(defn case-ids
|
||||
"Registered case ids in declaration order."
|
||||
[]
|
||||
(mapv :id (core/cases)))
|
||||
(mapv :id (decl/cases)))
|
||||
|
||||
(defn collect-cases
|
||||
"Selected benchmark cases as plain data.
|
||||
@ -130,10 +130,10 @@
|
||||
[{:keys [master-seed] :as options}]
|
||||
(check-master-seed! master-seed)
|
||||
(let [pattern (:filter options)
|
||||
scene-by-id (into {} (map (juxt :id identity)) (core/scenes))]
|
||||
(doseq [scene (core/scenes)]
|
||||
(core/check-registered-scene! scene))
|
||||
(let [selected (->> (core/cases)
|
||||
scene-by-id (into {} (map (juxt :id identity)) (decl/scenes))]
|
||||
(doseq [scene (decl/scenes)]
|
||||
(decl/check-registered-scene! scene))
|
||||
(let [selected (->> (decl/cases)
|
||||
(map #(validate-case! % scene-by-id))
|
||||
(filter (fn [registered]
|
||||
(or (str/blank? pattern)
|
||||
|
||||
@ -4,11 +4,11 @@
|
||||
;;
|
||||
;; Copyright (c) KALEIDOS SUBSIDIARY SL
|
||||
|
||||
(ns benches.render-wasm.scenes.core
|
||||
(ns benches.render-wasm.declarations
|
||||
"Registration macros for renderer benchmark scenes and cases.
|
||||
|
||||
The macros expand to calls to `register-scene!`/`register-case!` in
|
||||
`core.cljs`. Registration is done there so it can be inspected and tested.")
|
||||
`declarations.cljs`. Registration is done there so it can be inspected and tested.")
|
||||
|
||||
(defmacro defscene
|
||||
"Registers a scene and returns its id.
|
||||
@ -18,7 +18,7 @@
|
||||
`:params-schema`.
|
||||
- `build` resolves to a one-argument function of the scene parameters."
|
||||
[id opts build]
|
||||
`(benches.render-wasm.scenes.core/register-scene!
|
||||
`(benches.render-wasm.declarations/register-scene!
|
||||
(assoc ~opts :id ~id :ns ~(str *ns*) :build ~build)))
|
||||
|
||||
(defn- one-argument-fn-form?
|
||||
@ -43,9 +43,9 @@
|
||||
`(let [~options ~opts]
|
||||
(when (contains? ~options :run!)
|
||||
(throw (ex-info (str "defcase " ~id " requires its run function as the fourth argument")
|
||||
{:type :benches.render-wasm.scenes.core/invalid-run-function
|
||||
{:type :benches.render-wasm.declarations/invalid-run-function
|
||||
:id ~id})))
|
||||
(benches.render-wasm.scenes.core/register-case!
|
||||
(benches.render-wasm.declarations/register-case!
|
||||
(assoc ~options :id ~id :scene ~scene :ns ~(str *ns*)
|
||||
~@(when run-fn [:run! run-fn]))))))
|
||||
|
||||
@ -4,11 +4,11 @@
|
||||
;;
|
||||
;; Copyright (c) KALEIDOS SUBSIDIARY SL
|
||||
|
||||
(ns benches.render-wasm.scenes.core
|
||||
(ns benches.render-wasm.declarations
|
||||
"Registry and contract for renderer benchmark scenes and cases.
|
||||
|
||||
Scene namespaces register themselves through the `defscene` and
|
||||
`defcase` macros in `core.clj`. This namespace imports no browser or
|
||||
`defcase` macros in `declarations.clj`. This namespace imports no browser or
|
||||
renderer code.
|
||||
|
||||
- A scene declares an id, a version, a human description, a closed
|
||||
@ -4,7 +4,7 @@
|
||||
;;
|
||||
;; Copyright (c) KALEIDOS SUBSIDIARY SL
|
||||
|
||||
(ns benches.render-wasm.pilot
|
||||
(ns benches.render-wasm.node.pilot
|
||||
"Interim diagnostic: loads `:rects/load` in headless Chromium and prints
|
||||
a Transit record with the bridge result on stdout.
|
||||
|
||||
@ -146,7 +146,7 @@
|
||||
root (frontend-root)
|
||||
bundle (path/join root "target" "renderer-benchmarks" "browser")
|
||||
js-dir (path/join root "resources" "public" "js")
|
||||
html (path/join root "test" "benches" "render_wasm" "pilot.html")
|
||||
html (path/join root "test" "benches" "render_wasm" "browser" "pilot.html")
|
||||
seed (:seed opts)
|
||||
selected (some #(when (= (:id %) (:case-id opts)) %)
|
||||
(cases/collect-cases {:master-seed seed}))
|
||||
@ -4,7 +4,7 @@
|
||||
;;
|
||||
;; Copyright (c) KALEIDOS SUBSIDIARY SL
|
||||
|
||||
(ns benches.render-wasm.runner
|
||||
(ns benches.render-wasm.node.runner
|
||||
"Node CLI entry for the CLJS renderer benchmark suite.
|
||||
|
||||
Scaffolding only. Commands, options, result reporting and failure
|
||||
@ -4,7 +4,7 @@
|
||||
;;
|
||||
;; Copyright (c) KALEIDOS SUBSIDIARY SL
|
||||
|
||||
(ns benches.render-wasm.scenes.camera
|
||||
(ns benches.render-wasm.runtime.camera
|
||||
"Standard load, pan and zoom bodies for renderer benchmark cases.
|
||||
|
||||
## Concepts
|
||||
@ -46,14 +46,14 @@
|
||||
## Related code
|
||||
|
||||
Scene declarations such as `scenes/rects.cljs` call these functions from
|
||||
their `:run!` bodies. `scenes/core.cljs` registers those bodies.
|
||||
`browser.cljs` supplies `rtx` and prepares reused cases. `protocol.cljs`
|
||||
their `:run!` bodies. `declarations.cljs` registers those bodies.
|
||||
`browser/bridge.cljs` supplies `rtx` and prepares reused cases. `runtime/protocol.cljs`
|
||||
owns the render drain and camera session; its `Metrics reported` section
|
||||
defines the measurement fields. Node reads case declarations without running
|
||||
their bodies. This namespace loads there because renderer effects come
|
||||
through the browser-supplied `:hooks`."
|
||||
(:require
|
||||
[benches.render-wasm.protocol :as protocol]))
|
||||
[benches.render-wasm.runtime.protocol :as protocol]))
|
||||
|
||||
(defn load!
|
||||
"Drains the uploaded scene until the renderer reports Full completion.
|
||||
@ -4,7 +4,7 @@
|
||||
;;
|
||||
;; Copyright (c) KALEIDOS SUBSIDIARY SL
|
||||
|
||||
(ns benches.render-wasm.protocol
|
||||
(ns benches.render-wasm.runtime.protocol
|
||||
"Shared render-completion protocol for the renderer benchmarks.
|
||||
|
||||
The WASM renderer finishes progressively in tile budgets: one `_render`
|
||||
@ -7,9 +7,9 @@
|
||||
(ns benches.render-wasm.scenes.masks
|
||||
"Fixed grid of masked groups with circle masks and ordered descendants."
|
||||
(:require
|
||||
[benches.render-wasm.scenes.builder :as sb :include-macros true]
|
||||
[benches.render-wasm.scenes.camera :as camera]
|
||||
[benches.render-wasm.scenes.core :as core :include-macros true]))
|
||||
[benches.render-wasm.builder :as sb :include-macros true]
|
||||
[benches.render-wasm.declarations :as decl :include-macros true]
|
||||
[benches.render-wasm.runtime.camera :as camera]))
|
||||
|
||||
(def ^:private default-params
|
||||
{:width 1920 :height 1080})
|
||||
@ -37,7 +37,7 @@
|
||||
:height 205
|
||||
:fills [{:fill-color (if (even? j) "#1254b8" "#ff8b38")}]}))))))))
|
||||
|
||||
(core/defscene :masks
|
||||
(decl/defscene :masks
|
||||
{:version 1
|
||||
:description "Twenty-four circle masks with ordered striped descendants"
|
||||
:params-schema schema:params}
|
||||
@ -45,16 +45,16 @@
|
||||
|
||||
(def ^:private base-view {:scale 1 :x 0 :y 0})
|
||||
|
||||
(core/defcase :masks/load :masks
|
||||
(decl/defcase :masks/load :masks
|
||||
{:params default-params :view base-view :context :fresh}
|
||||
(fn [rtx] (camera/load! rtx)))
|
||||
|
||||
(core/defcase :masks/pan :masks
|
||||
(decl/defcase :masks/pan :masks
|
||||
{:params default-params :view base-view :context :reuse
|
||||
:operation {:steps 20 :dx 120 :dy 40 :settle-ms 100}}
|
||||
(fn [rtx] (camera/pan! rtx)))
|
||||
|
||||
(core/defcase :masks/zoom :masks
|
||||
(decl/defcase :masks/zoom :masks
|
||||
{:params default-params :view base-view :context :reuse
|
||||
:operation {:steps 20 :factor 1.6 :settle-ms 100}}
|
||||
(fn [rtx] (camera/zoom! rtx)))
|
||||
|
||||
@ -9,9 +9,9 @@
|
||||
(:require
|
||||
[app.common.schema :as sm]
|
||||
[app.common.types.path :as path]
|
||||
[benches.render-wasm.scenes.builder :as sb :include-macros true]
|
||||
[benches.render-wasm.scenes.camera :as camera]
|
||||
[benches.render-wasm.scenes.core :as core :include-macros true]))
|
||||
[benches.render-wasm.builder :as sb :include-macros true]
|
||||
[benches.render-wasm.declarations :as decl :include-macros true]
|
||||
[benches.render-wasm.runtime.camera :as camera]))
|
||||
|
||||
(def ^:private default-params
|
||||
{:count 1000 :width 1920 :height 1080})
|
||||
@ -49,7 +49,7 @@
|
||||
(doseq [_ (range (:count params))]
|
||||
(sb/path)))))
|
||||
|
||||
(core/defscene :paths
|
||||
(decl/defscene :paths
|
||||
{:version 1
|
||||
:description "Curved paths"
|
||||
:params-schema schema:params}
|
||||
@ -57,16 +57,16 @@
|
||||
|
||||
(def ^:private base-view {:scale 1 :x 0 :y 0})
|
||||
|
||||
(core/defcase :paths/load :paths
|
||||
(decl/defcase :paths/load :paths
|
||||
{:params default-params :view base-view :context :fresh}
|
||||
(fn [rtx] (camera/load! rtx)))
|
||||
|
||||
(core/defcase :paths/pan :paths
|
||||
(decl/defcase :paths/pan :paths
|
||||
{:params default-params :view base-view :context :reuse
|
||||
:operation {:steps 20 :dx 160 :dy 40 :settle-ms 100}}
|
||||
(fn [rtx] (camera/pan! rtx)))
|
||||
|
||||
(core/defcase :paths/zoom :paths
|
||||
(decl/defcase :paths/zoom :paths
|
||||
{:params default-params :view base-view :context :reuse
|
||||
:operation {:steps 20 :factor 1.5 :settle-ms 100}}
|
||||
(fn [rtx] (camera/zoom! rtx)))
|
||||
|
||||
@ -8,9 +8,9 @@
|
||||
"Plus signs made of two open line subpaths"
|
||||
(:require
|
||||
[app.common.types.path :as path]
|
||||
[benches.render-wasm.scenes.builder :as sb :include-macros true]
|
||||
[benches.render-wasm.scenes.camera :as camera]
|
||||
[benches.render-wasm.scenes.core :as core :include-macros true]))
|
||||
[benches.render-wasm.builder :as sb :include-macros true]
|
||||
[benches.render-wasm.declarations :as decl :include-macros true]
|
||||
[benches.render-wasm.runtime.camera :as camera]))
|
||||
|
||||
(def ^:private default-params
|
||||
{:count 1000 :width 1920 :height 1080})
|
||||
@ -44,7 +44,7 @@
|
||||
(doseq [_ (range (:count params))]
|
||||
(sb/path)))))
|
||||
|
||||
(core/defscene :plus
|
||||
(decl/defscene :plus
|
||||
{:version 1
|
||||
:description "Plus signs made of two open line subpaths"
|
||||
:params-schema schema:params}
|
||||
@ -52,16 +52,16 @@
|
||||
|
||||
(def ^:private base-view {:scale 1 :x 0 :y 0})
|
||||
|
||||
(core/defcase :plus/load :plus
|
||||
(decl/defcase :plus/load :plus
|
||||
{:params default-params :view base-view :context :fresh}
|
||||
(fn [rtx] (camera/load! rtx)))
|
||||
|
||||
(core/defcase :plus/pan :plus
|
||||
(decl/defcase :plus/pan :plus
|
||||
{:params default-params :view base-view :context :reuse
|
||||
:operation {:steps 20 :dx 140 :dy 60 :settle-ms 100}}
|
||||
(fn [rtx] (camera/pan! rtx)))
|
||||
|
||||
(core/defcase :plus/zoom :plus
|
||||
(decl/defcase :plus/zoom :plus
|
||||
{:params default-params :view base-view :context :reuse
|
||||
:operation {:steps 20 :factor 1.4 :settle-ms 100}}
|
||||
(fn [rtx] (camera/zoom! rtx)))
|
||||
|
||||
@ -15,14 +15,14 @@
|
||||
browser executor; collection keeps only plain descriptors."
|
||||
(:require
|
||||
[app.common.schema :as sm]
|
||||
[benches.render-wasm.scenes.builder :as sb :include-macros true]
|
||||
[benches.render-wasm.scenes.camera :as camera]
|
||||
[benches.render-wasm.scenes.core :as core :include-macros true]))
|
||||
[benches.render-wasm.builder :as sb :include-macros true]
|
||||
[benches.render-wasm.declarations :as decl :include-macros true]
|
||||
[benches.render-wasm.runtime.camera :as camera]))
|
||||
|
||||
;; This namespace is also loaded by Node discovery. Keep operation helpers
|
||||
;; portable: browser API/helper imports belong in browser adapters supplied
|
||||
;; through rtx, not in this require list or its transitive dependencies.
|
||||
;; See scenes.core's dependency contract before adding a capability.
|
||||
;; See declarations' dependency contract before adding a capability.
|
||||
|
||||
(def ^:private default-params
|
||||
{:count 1000
|
||||
@ -74,7 +74,7 @@
|
||||
(doseq [_ (range (:count params))]
|
||||
(sb/rect)))))
|
||||
|
||||
(core/defscene :rects
|
||||
(decl/defscene :rects
|
||||
{:version 1
|
||||
:description "Seeded rectangles with translucent fills and centered strokes"
|
||||
:params-schema schema:params}
|
||||
@ -83,13 +83,13 @@
|
||||
(def ^:private base-view
|
||||
{:scale 1 :x 0 :y 0})
|
||||
|
||||
(core/defcase :rects/load :rects
|
||||
(decl/defcase :rects/load :rects
|
||||
{:params default-params
|
||||
:view base-view
|
||||
:context :fresh}
|
||||
(fn [rtx] (camera/load! rtx)))
|
||||
|
||||
(core/defcase :rects/pan :rects
|
||||
(decl/defcase :rects/pan :rects
|
||||
{:params default-params
|
||||
:view base-view
|
||||
:context :reuse
|
||||
@ -97,7 +97,7 @@
|
||||
:operation {:steps 20 :dx 200 :dy 0 :settle-ms 100}}
|
||||
(fn [rtx] (camera/pan! rtx)))
|
||||
|
||||
(core/defcase :rects/zoom :rects
|
||||
(decl/defcase :rects/zoom :rects
|
||||
{:params default-params
|
||||
:view base-view
|
||||
:context :reuse
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
;;
|
||||
;; Copyright (c) KALEIDOS SUBSIDIARY SL
|
||||
|
||||
(ns benches.render-wasm.scenes.common
|
||||
(ns benches.render-wasm.snapshot
|
||||
"Utilities shared by generated and saved-page scenes.
|
||||
|
||||
A scene snapshot is
|
||||
@ -11,8 +11,8 @@
|
||||
[app.common.types.path :as path]
|
||||
[app.common.types.path.segment :as segm]
|
||||
[app.common.uuid :as uuid]
|
||||
[benches.render-wasm.scenes.builder :as b :include-macros true]
|
||||
[benches.render-wasm.scenes.common :as common]
|
||||
[benches.render-wasm.builder :as b :include-macros true]
|
||||
[benches.render-wasm.snapshot :as common]
|
||||
[cljs.test :as t :include-macros true]
|
||||
[frontend-tests.benches.test-helpers :as helpers]))
|
||||
|
||||
|
||||
@ -7,9 +7,9 @@
|
||||
(ns frontend-tests.benches.builder-test
|
||||
(:require
|
||||
[app.common.uuid :as uuid]
|
||||
[benches.render-wasm.scenes.builder :as b :include-macros true]
|
||||
[benches.render-wasm.scenes.common :as common]
|
||||
[benches.render-wasm.builder :as b :include-macros true]
|
||||
[benches.render-wasm.scenes.rects :as rects]
|
||||
[benches.render-wasm.snapshot :as common]
|
||||
[cljs.test :as t :include-macros true]
|
||||
[frontend-tests.benches.test-helpers :as helpers]))
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
(ns frontend-tests.benches.containers-test
|
||||
(:require
|
||||
[app.common.uuid :as uuid]
|
||||
[benches.render-wasm.scenes.builder :as builder :include-macros true]
|
||||
[benches.render-wasm.builder :as builder :include-macros true]
|
||||
[cljs.test :as t :include-macros true]
|
||||
[frontend-tests.benches.test-helpers :as helpers]))
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
[app.common.schema :as sm]
|
||||
[app.common.transit :as transit]
|
||||
[benches.render-wasm.cases :as cases]
|
||||
[benches.render-wasm.scenes.core :as core :include-macros true]
|
||||
[benches.render-wasm.declarations :as decl :include-macros true]
|
||||
[cljs.test :as t :include-macros true]))
|
||||
|
||||
(defrecord Point [x y])
|
||||
@ -22,13 +22,13 @@
|
||||
(swap! body-calls conj :touched)
|
||||
rtx)
|
||||
|
||||
(core/defscene :contracts-scene
|
||||
(decl/defscene :contracts-scene
|
||||
{:version 1
|
||||
:description "Synthetic scene for contract tests"
|
||||
:params-schema [:map {:closed true}]}
|
||||
(fn [params] params))
|
||||
|
||||
(core/defcase :contracts-scene/case :contracts-scene
|
||||
(decl/defcase :contracts-scene/case :contracts-scene
|
||||
{:params {}
|
||||
:view {:scale 1 :x 0 :y 0}
|
||||
:context :fresh}
|
||||
@ -51,13 +51,13 @@
|
||||
"Registers a synthetic scene and case under `scene-id`, runs `f`, then
|
||||
unregisters both so the live registry survives."
|
||||
[scene-id case-params f]
|
||||
(core/register-scene! {:id scene-id
|
||||
(decl/register-scene! {:id scene-id
|
||||
:ns "contracts-test"
|
||||
:version 1
|
||||
:description "synthetic"
|
||||
:params-schema [:map {:closed true} [:count [:int {:min 1 :max 100000}]]]
|
||||
:build (fn [params] params)})
|
||||
(core/register-case! {:id (keyword (name scene-id) "case")
|
||||
(decl/register-case! {:id (keyword (name scene-id) "case")
|
||||
:scene scene-id
|
||||
:ns "contracts-test"
|
||||
:params case-params
|
||||
@ -66,11 +66,11 @@
|
||||
(try
|
||||
(f)
|
||||
(finally
|
||||
(core/unregister-case! (keyword (name scene-id) "case"))
|
||||
(core/unregister-scene! scene-id))))
|
||||
(decl/unregister-case! (keyword (name scene-id) "case"))
|
||||
(decl/unregister-scene! scene-id))))
|
||||
|
||||
(t/deftest defscene-registers-metadata-and-build
|
||||
(let [scene (core/registered-scene :rects)]
|
||||
(let [scene (decl/registered-scene :rects)]
|
||||
(t/is (= :rects (:id scene)))
|
||||
(t/is (= "benches.render-wasm.scenes.rects" (:ns scene)))
|
||||
(t/is (= 1 (:version scene)))
|
||||
@ -85,7 +85,7 @@
|
||||
|
||||
(t/deftest real-rectangle-bodies-stay-out-of-node-descriptors
|
||||
(let [ids [:rects/load :rects/pan :rects/zoom]]
|
||||
(t/is (every? #(fn? (:run! (core/registered-case %))) ids))
|
||||
(t/is (every? #(fn? (:run! (decl/registered-case %))) ids))
|
||||
(t/is (= ids (mapv :id (rect-cases)))
|
||||
"collection succeeds with the executable bodies present")
|
||||
(t/is (every? #(not (contains? % :run!)) (rect-cases)))))
|
||||
@ -94,7 +94,7 @@
|
||||
(doseq [case-desc (rect-cases)]
|
||||
(t/is (not (contains? case-desc :run!)) (str (:id case-desc)))
|
||||
(t/is (not (contains? case-desc :ns)) (str (:id case-desc)))
|
||||
(t/is (core/transit-round-trips? case-desc) (str (:id case-desc)))))
|
||||
(t/is (decl/transit-round-trips? case-desc) (str (:id case-desc)))))
|
||||
|
||||
(t/deftest rects-cases-carry-declared-view-context-and-completion
|
||||
(let [collected (rect-cases)]
|
||||
@ -122,19 +122,19 @@
|
||||
|
||||
(t/deftest derive-seed-depends-on-scene-and-params-only
|
||||
(let [params {:count 1000 :width 1920 :height 1080 :min-size 20 :max-size 100}
|
||||
base (core/derive-seed 42 :rects params)]
|
||||
base (decl/derive-seed 42 :rects params)]
|
||||
(t/is (= 2602546180 base))
|
||||
(t/is (= base (core/derive-seed 42 :rects (into {} (reverse (seq params))))))
|
||||
(t/is (= 2993218129 (core/derive-seed 43 :rects params)))
|
||||
(t/is (not= base (core/derive-seed 42 :rects (assoc params :count 10))))
|
||||
(t/is (not= base (core/derive-seed 42 :paths params)))))
|
||||
(t/is (= base (decl/derive-seed 42 :rects (into {} (reverse (seq params))))))
|
||||
(t/is (= 2993218129 (decl/derive-seed 43 :rects params)))
|
||||
(t/is (not= base (decl/derive-seed 42 :rects (assoc params :count 10))))
|
||||
(t/is (not= base (decl/derive-seed 42 :paths params)))))
|
||||
|
||||
(t/deftest derive-seed-rejects-keys-it-cannot-tell-apart
|
||||
(t/is (= ::core/invalid-params
|
||||
(:type (failure-data #(core/derive-seed 42 :rects {"count" 1})))))
|
||||
(t/is (= ::core/invalid-params
|
||||
(:type (failure-data #(core/derive-seed 42 :rects {:rects/count 1})))))
|
||||
(t/is (= :rects (:scene (failure-data #(core/derive-seed 42 :rects {"count" 1}))))))
|
||||
(t/is (= ::decl/invalid-params
|
||||
(:type (failure-data #(decl/derive-seed 42 :rects {"count" 1})))))
|
||||
(t/is (= ::decl/invalid-params
|
||||
(:type (failure-data #(decl/derive-seed 42 :rects {:rects/count 1})))))
|
||||
(t/is (= :rects (:scene (failure-data #(decl/derive-seed 42 :rects {"count" 1}))))))
|
||||
|
||||
(t/deftest unknown-params-are-rejected
|
||||
(with-synthetic-scene :contracts-unknown-params {:count 1 :bogus 2}
|
||||
@ -155,7 +155,7 @@
|
||||
(t/is (some? (::sm/explain data)))))))
|
||||
|
||||
(t/deftest rects-workload-ranges-are-rejected
|
||||
(let [schema (:params-schema (core/registered-scene :rects))
|
||||
(let [schema (:params-schema (decl/registered-scene :rects))
|
||||
good {:count 1000 :width 1920 :height 1080 :min-size 20 :max-size 100}]
|
||||
(t/is (true? (sm/validate schema good)))
|
||||
(t/testing "reversed size range"
|
||||
@ -169,16 +169,16 @@
|
||||
|
||||
(t/deftest view-coordinates-are-finite
|
||||
(let [good {:scale 1 :x 0 :y 0}]
|
||||
(t/is (true? (sm/validate core/schema:view good)))
|
||||
(t/is (true? (sm/validate decl/schema:view good)))
|
||||
(doseq [bad [(assoc good :scale js/Infinity)
|
||||
(assoc good :x js/NaN)
|
||||
(assoc good :y js/Infinity)
|
||||
(assoc good :viewport {:width js/NaN})]]
|
||||
(t/is (false? (sm/validate core/schema:view bad)) (pr-str bad)))))
|
||||
(t/is (false? (sm/validate decl/schema:view bad)) (pr-str bad)))))
|
||||
|
||||
(t/deftest transit-rejects-unencodable-values
|
||||
(t/is (false? (core/transit-round-trips? {:v (fn [] 1)})))
|
||||
(t/is (false? (core/transit-round-trips? {:point (->Point 1 2)}))))
|
||||
(t/is (false? (decl/transit-round-trips? {:v (fn [] 1)})))
|
||||
(t/is (false? (decl/transit-round-trips? {:point (->Point 1 2)}))))
|
||||
|
||||
(t/deftest transit-wire-preserves-json-lossy-shapes
|
||||
(doseq [value [{:foo 1 "foo" 2}
|
||||
@ -198,21 +198,21 @@
|
||||
(t/is (js/Number.isNaN (:nan decoded)))
|
||||
(t/is (= js/Infinity (:positive decoded)))
|
||||
(t/is (= js/-Infinity (:negative decoded)))
|
||||
(t/is (core/transit-round-trips? value))
|
||||
(t/is (nil? (failure-data #(core/check-collected-case case-desc))))))
|
||||
(t/is (decl/transit-round-trips? value))
|
||||
(t/is (nil? (failure-data #(decl/check-collected-case case-desc))))))
|
||||
|
||||
(t/deftest unencodable-collected-values-are-rejected
|
||||
(let [good (first (rect-cases))]
|
||||
(doseq [bad [(assoc good :operation {:run (fn [] 1)})
|
||||
(assoc good :operation {:point (->Point 1 2)})]]
|
||||
(t/is (= ::core/non-serializable-case
|
||||
(:type (failure-data #(core/check-collected-case bad))))
|
||||
(t/is (= ::decl/non-serializable-case
|
||||
(:type (failure-data #(decl/check-collected-case bad))))
|
||||
(pr-str bad)))))
|
||||
|
||||
(t/deftest duplicate-scene-id-from-another-namespace-is-rejected
|
||||
(t/is (= ::core/duplicate-scene
|
||||
(t/is (= ::decl/duplicate-scene
|
||||
(:type (failure-data
|
||||
#(core/register-scene! {:id :rects
|
||||
#(decl/register-scene! {:id :rects
|
||||
:ns "another-namespace"
|
||||
:version 1
|
||||
:description "x"
|
||||
@ -221,51 +221,51 @@
|
||||
|
||||
(t/deftest same-namespace-registration-replaces
|
||||
(try
|
||||
(core/register-scene! {:id :contracts-replaced
|
||||
(decl/register-scene! {:id :contracts-replaced
|
||||
:ns "contracts-test"
|
||||
:version 1
|
||||
:description "first"
|
||||
:params-schema [:map]
|
||||
:build (fn [params] params)})
|
||||
(core/register-scene! {:id :contracts-replaced
|
||||
(decl/register-scene! {:id :contracts-replaced
|
||||
:ns "contracts-test"
|
||||
:version 2
|
||||
:description "second"
|
||||
:params-schema [:map]
|
||||
:build (fn [params] params)})
|
||||
(t/is (= "second" (:description (core/registered-scene :contracts-replaced))))
|
||||
(t/is (= "second" (:description (decl/registered-scene :contracts-replaced))))
|
||||
(finally
|
||||
(core/unregister-scene! :contracts-replaced))))
|
||||
(decl/unregister-scene! :contracts-replaced))))
|
||||
|
||||
(t/deftest duplicate-case-id-from-another-namespace-is-rejected
|
||||
(try
|
||||
(core/register-scene! {:id :contracts-dup
|
||||
(decl/register-scene! {:id :contracts-dup
|
||||
:ns "contracts-test"
|
||||
:version 1
|
||||
:description "x"
|
||||
:params-schema [:map]
|
||||
:build (fn [params] params)})
|
||||
(core/register-case! {:id :contracts-dup/case
|
||||
(decl/register-case! {:id :contracts-dup/case
|
||||
:scene :contracts-dup
|
||||
:ns "contracts-test"
|
||||
:params {}
|
||||
:view {:scale 1 :x 0 :y 0}
|
||||
:context :fresh})
|
||||
(t/is (= ::core/duplicate-case
|
||||
(t/is (= ::decl/duplicate-case
|
||||
(:type (failure-data
|
||||
#(core/register-case! {:id :contracts-dup/case
|
||||
#(decl/register-case! {:id :contracts-dup/case
|
||||
:scene :contracts-dup
|
||||
:ns "another-namespace"
|
||||
:params {}
|
||||
:view {:scale 1 :x 0 :y 0}
|
||||
:context :fresh})))))
|
||||
(finally
|
||||
(core/unregister-case! :contracts-dup/case)
|
||||
(core/unregister-scene! :contracts-dup))))
|
||||
(decl/unregister-case! :contracts-dup/case)
|
||||
(decl/unregister-scene! :contracts-dup))))
|
||||
|
||||
(t/deftest unknown-scene-reference-is-rejected
|
||||
(try
|
||||
(core/register-case! {:id :contracts-missing/case
|
||||
(decl/register-case! {:id :contracts-missing/case
|
||||
:scene :contracts-missing
|
||||
:ns "contracts-test"
|
||||
:params {}
|
||||
@ -276,17 +276,17 @@
|
||||
#(cases/collect-cases {:master-seed 42
|
||||
:filter "contracts-missing/"})))))
|
||||
(finally
|
||||
(core/unregister-case! :contracts-missing/case))))
|
||||
(decl/unregister-case! :contracts-missing/case))))
|
||||
|
||||
(t/deftest case-id-must-be-namespaced-by-its-scene
|
||||
(try
|
||||
(core/register-scene! {:id :contracts-other
|
||||
(decl/register-scene! {:id :contracts-other
|
||||
:ns "contracts-test"
|
||||
:version 1
|
||||
:description "x"
|
||||
:params-schema [:map]
|
||||
:build (fn [params] params)})
|
||||
(core/register-case! {:id :contracts-other/case
|
||||
(decl/register-case! {:id :contracts-other/case
|
||||
:scene :rects
|
||||
:ns "contracts-test"
|
||||
:params {}
|
||||
@ -297,47 +297,47 @@
|
||||
#(cases/collect-cases {:master-seed 42
|
||||
:filter "contracts-other/"})))))
|
||||
(finally
|
||||
(core/unregister-case! :contracts-other/case)
|
||||
(core/unregister-scene! :contracts-other))))
|
||||
(decl/unregister-case! :contracts-other/case)
|
||||
(decl/unregister-scene! :contracts-other))))
|
||||
|
||||
(t/deftest scene-without-params-schema-is-rejected
|
||||
(try
|
||||
(core/register-scene! {:id :contracts-noschema
|
||||
(decl/register-scene! {:id :contracts-noschema
|
||||
:ns "contracts-test"
|
||||
:version 1
|
||||
:description "x"
|
||||
:build (fn [params] params)})
|
||||
(t/is (= ::core/invalid-scene
|
||||
(t/is (= ::decl/invalid-scene
|
||||
(:type (failure-data #(cases/collect-cases {:master-seed 42})))))
|
||||
(finally
|
||||
(core/unregister-scene! :contracts-noschema))))
|
||||
(decl/unregister-scene! :contracts-noschema))))
|
||||
|
||||
(t/deftest malformed-params-schema-is-rejected
|
||||
(try
|
||||
(core/register-scene! {:id :contracts-badschema
|
||||
(decl/register-scene! {:id :contracts-badschema
|
||||
:ns "contracts-test"
|
||||
:version 1
|
||||
:description "x"
|
||||
:params-schema [:map [:count]]
|
||||
:build (fn [params] params)})
|
||||
(let [data (failure-data #(cases/collect-cases {:master-seed 42}))]
|
||||
(t/is (= ::core/invalid-scene (:type data)))
|
||||
(t/is (= ::decl/invalid-scene (:type data)))
|
||||
(t/is (= :contracts-badschema (:id data))))
|
||||
(finally
|
||||
(core/unregister-scene! :contracts-badschema))))
|
||||
(decl/unregister-scene! :contracts-badschema))))
|
||||
|
||||
(t/deftest qualified-scene-id-is-rejected
|
||||
(try
|
||||
(core/register-scene! {:id :contracts-ns/scene
|
||||
(decl/register-scene! {:id :contracts-ns/scene
|
||||
:ns "contracts-test"
|
||||
:version 1
|
||||
:description "x"
|
||||
:params-schema [:map]
|
||||
:build (fn [params] params)})
|
||||
(t/is (= ::core/invalid-scene
|
||||
(t/is (= ::decl/invalid-scene
|
||||
(:type (failure-data #(cases/collect-cases {:master-seed 42})))))
|
||||
(finally
|
||||
(core/unregister-scene! :contracts-ns/scene))))
|
||||
(decl/unregister-scene! :contracts-ns/scene))))
|
||||
|
||||
(t/deftest invalid-declarations-fail-outside-the-filter
|
||||
(with-synthetic-scene :contracts-global {:count 1 :bogus 2}
|
||||
@ -348,13 +348,13 @@
|
||||
|
||||
(t/deftest incomplete-case-declaration-is-rejected
|
||||
(try
|
||||
(core/register-scene! {:id :contracts-incomplete
|
||||
(decl/register-scene! {:id :contracts-incomplete
|
||||
:ns "contracts-test"
|
||||
:version 1
|
||||
:description "x"
|
||||
:params-schema [:map]
|
||||
:build (fn [params] params)})
|
||||
(core/register-case! {:id :contracts-incomplete/case
|
||||
(decl/register-case! {:id :contracts-incomplete/case
|
||||
:scene :contracts-incomplete
|
||||
:ns "contracts-test"
|
||||
:params {}
|
||||
@ -363,41 +363,41 @@
|
||||
(:type (failure-data #(cases/collect-cases {:master-seed 42
|
||||
:filter "contracts-incomplete/"})))))
|
||||
(finally
|
||||
(core/unregister-case! :contracts-incomplete/case)
|
||||
(core/unregister-scene! :contracts-incomplete))))
|
||||
(decl/unregister-case! :contracts-incomplete/case)
|
||||
(decl/unregister-scene! :contracts-incomplete))))
|
||||
|
||||
(t/deftest records-do-not-survive-the-wire
|
||||
(let [point (->Point 1 2)]
|
||||
(t/is (false? (core/transit-round-trips? point)))
|
||||
(t/is (false? (core/transit-round-trips? {:point point})))))
|
||||
(t/is (false? (decl/transit-round-trips? point)))
|
||||
(t/is (false? (decl/transit-round-trips? {:point point})))))
|
||||
|
||||
(t/deftest case-replacement-preserves-order-and-unregister-removes
|
||||
(try
|
||||
(core/register-scene! {:id :contracts-replacecase
|
||||
(decl/register-scene! {:id :contracts-replacecase
|
||||
:ns "contracts-test"
|
||||
:version 1
|
||||
:description "x"
|
||||
:params-schema [:map]
|
||||
:build (fn [params] params)})
|
||||
(core/register-case! {:id :contracts-replacecase/case
|
||||
(decl/register-case! {:id :contracts-replacecase/case
|
||||
:scene :contracts-replacecase
|
||||
:ns "contracts-test"
|
||||
:params {}
|
||||
:view {:scale 1 :x 0 :y 0}
|
||||
:context :fresh})
|
||||
(core/register-case! {:id :contracts-replacecase/case
|
||||
(decl/register-case! {:id :contracts-replacecase/case
|
||||
:scene :contracts-replacecase
|
||||
:ns "contracts-test"
|
||||
:params {}
|
||||
:view {:scale 2 :x 0 :y 0}
|
||||
:context :fresh})
|
||||
(t/is (= 1 (count (filter #(= :contracts-replacecase/case (:id %)) (core/cases)))))
|
||||
(t/is (= {:scale 2 :x 0 :y 0} (:view (core/registered-case :contracts-replacecase/case))))
|
||||
(core/unregister-case! :contracts-replacecase/case)
|
||||
(t/is (nil? (core/registered-case :contracts-replacecase/case)))
|
||||
(t/is (= 1 (count (filter #(= :contracts-replacecase/case (:id %)) (decl/cases)))))
|
||||
(t/is (= {:scale 2 :x 0 :y 0} (:view (decl/registered-case :contracts-replacecase/case))))
|
||||
(decl/unregister-case! :contracts-replacecase/case)
|
||||
(t/is (nil? (decl/registered-case :contracts-replacecase/case)))
|
||||
(finally
|
||||
(core/unregister-case! :contracts-replacecase/case)
|
||||
(core/unregister-scene! :contracts-replacecase))))
|
||||
(decl/unregister-case! :contracts-replacecase/case)
|
||||
(decl/unregister-scene! :contracts-replacecase))))
|
||||
|
||||
(t/deftest invalid-master-seed-is-rejected
|
||||
(doseq [seed [-1 4294967296 "42"]]
|
||||
@ -420,17 +420,17 @@
|
||||
(let [collected (cases/collect-cases {:master-seed 42 :filter "contracts-scene/"})]
|
||||
(t/is (= [:contracts-scene/case] (mapv :id collected)))
|
||||
(t/is (not (contains? (first collected) :run!)))
|
||||
(t/is (core/transit-round-trips? (first collected))))
|
||||
(t/is (decl/transit-round-trips? (first collected))))
|
||||
(t/is (empty? @body-calls))
|
||||
(let [entry (core/registered-case :contracts-scene/case)]
|
||||
(let [entry (decl/registered-case :contracts-scene/case)]
|
||||
(t/is (= "frontend-tests.benches.contracts-test" (:ns entry)))
|
||||
(t/is (fn? (:run! entry)))
|
||||
(t/is (= :runtime ((:run! entry) :runtime)))
|
||||
(t/is (= [:touched] @body-calls))))
|
||||
|
||||
(t/deftest defcase-rejects-run-function-in-options
|
||||
(t/is (= :benches.render-wasm.scenes.core/invalid-run-function
|
||||
(t/is (= :benches.render-wasm.declarations/invalid-run-function
|
||||
(:type (failure-data
|
||||
#(core/defcase :contracts-scene/unchecked :contracts-scene
|
||||
#(decl/defcase :contracts-scene/unchecked :contracts-scene
|
||||
{:run! (fn [x y] [x y])})))))
|
||||
(t/is (nil? (core/registered-case :contracts-scene/unchecked))))
|
||||
(t/is (nil? (decl/registered-case :contracts-scene/unchecked))))
|
||||
|
||||
@ -9,10 +9,10 @@
|
||||
[app.common.types.path :as path]
|
||||
[app.common.uuid :as uuid]
|
||||
[benches.render-wasm.cases :as cases]
|
||||
[benches.render-wasm.scenes.common :as common]
|
||||
[benches.render-wasm.scenes.masks :as masks]
|
||||
[benches.render-wasm.scenes.paths :as paths]
|
||||
[benches.render-wasm.scenes.plus :as plus]
|
||||
[benches.render-wasm.snapshot :as common]
|
||||
[cljs.test :as t :include-macros true]
|
||||
[frontend-tests.benches.test-helpers :as helpers]))
|
||||
|
||||
|
||||
@ -13,9 +13,9 @@
|
||||
(:require
|
||||
[app.common.render-wasm.wasm :as wasm]
|
||||
[app.common.transit :as transit]
|
||||
[benches.render-wasm.browser :as browser]
|
||||
[benches.render-wasm.browser.bridge :as browser]
|
||||
[benches.render-wasm.cases :as cases]
|
||||
[benches.render-wasm.scenes.core :as core]
|
||||
[benches.render-wasm.declarations :as decl]
|
||||
[cljs.test :as t :include-macros true]))
|
||||
|
||||
;; Forward declaration: entry-test helpers below build args against the
|
||||
@ -96,14 +96,14 @@
|
||||
(t/deftest wrong-scene-body-fails-before-claim
|
||||
(let [id :rects/wrong-scene
|
||||
descriptor (load-case)]
|
||||
(core/register-case! {:id id :scene :other :ns "lifecycle-test"
|
||||
(decl/register-case! {:id id :scene :other :ns "lifecycle-test"
|
||||
:run! (fn [_] nil)})
|
||||
(try
|
||||
(let [request (transit/encode-str {:case (assoc descriptor :id id)})
|
||||
parsed (@#'browser/parse-load-request request)]
|
||||
(t/is (= "invalid-args" (get-in parsed [:error :phase]))))
|
||||
(finally
|
||||
(core/unregister-case! id)))))
|
||||
(decl/unregister-case! id)))))
|
||||
|
||||
(t/deftest non-finite-view-values-fail-before-timers
|
||||
(t/async done
|
||||
@ -119,9 +119,9 @@
|
||||
|
||||
(t/deftest viewport-defaults-apply-at-use
|
||||
(t/is (= {:width 1920 :height 1080 :dpr 2}
|
||||
(core/resolve-viewport {:scale 1 :x 0 :y 0})))
|
||||
(decl/resolve-viewport {:scale 1 :x 0 :y 0})))
|
||||
(t/is (= {:width 800 :height 600 :dpr 2}
|
||||
(core/resolve-viewport {:scale 1 :x 0 :y 0
|
||||
(decl/resolve-viewport {:scale 1 :x 0 :y 0
|
||||
:viewport {:width 800 :height 600}}))))
|
||||
|
||||
(t/deftest dispose-resets-lifecycle-state
|
||||
@ -470,7 +470,7 @@
|
||||
vector, wire contract, failing fn name, fake message and WASM code."
|
||||
[cause fn-name message-pattern]
|
||||
(t/is (vector? cause) "cause is plain-data vector")
|
||||
(t/is (core/transit-round-trips? cause) "cause satisfies wire contract")
|
||||
(t/is (decl/transit-round-trips? cause) "cause satisfies wire contract")
|
||||
(t/is (some #(= fn-name (:fn %)) cause) "cause names the failing WASM fn")
|
||||
(t/is (some #(and (string? (:message %))
|
||||
(re-find message-pattern (:message %)))
|
||||
@ -539,7 +539,7 @@
|
||||
(t/is (= "aborted" (:phase m)))
|
||||
(t/is (= "boom" (:message m)) "top message stays as-is")
|
||||
(t/is (vector? cause) "cause is plain-data vector")
|
||||
(t/is (core/transit-round-trips? cause) "hostile values become strings")
|
||||
(t/is (decl/transit-round-trips? cause) "hostile values become strings")
|
||||
(t/is (every? (fn [entry]
|
||||
(every? (fn [[_ v]]
|
||||
(or (not (string? v)) (<= (count v) 500)))
|
||||
@ -568,7 +568,7 @@
|
||||
cause (:cause m)
|
||||
outer (first cause)]
|
||||
(t/is (= "failed" (:status m)))
|
||||
(t/is (core/transit-round-trips? cause) "throwing value still crosses the wire")
|
||||
(t/is (decl/transit-round-trips? cause) "throwing value still crosses the wire")
|
||||
(t/is (= "unrenderable value" (:fn outer))
|
||||
"stringification failure falls back")))
|
||||
(t/testing "causes pr-str cannot render fall back to plain strings"
|
||||
@ -583,7 +583,7 @@
|
||||
m result
|
||||
cause (:cause m)]
|
||||
(t/is (= "failed" (:status m)))
|
||||
(t/is (core/transit-round-trips? cause) "throwing cause still crosses the wire")
|
||||
(t/is (decl/transit-round-trips? cause) "throwing cause still crosses the wire")
|
||||
(t/is (= "unrenderable cause" (:message (first cause)))
|
||||
"level fallback holds"))))
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
Browser entry tests cover load and warm pan with a fake module."
|
||||
(:require
|
||||
[app.common.render-wasm.wasm :as wasm]
|
||||
[benches.render-wasm.protocol :as protocol]
|
||||
[benches.render-wasm.runtime.protocol :as protocol]
|
||||
[cljs.test :as t :include-macros true]))
|
||||
|
||||
(defn- fake-clock
|
||||
@ -114,7 +114,7 @@
|
||||
(t/is false (str "must reject for frame type " bad))
|
||||
(done)))
|
||||
(.catch (fn [cause]
|
||||
(t/is (= :benches.render-wasm.protocol/unexpected-frame-type
|
||||
(t/is (= :benches.render-wasm.runtime.protocol/unexpected-frame-type
|
||||
(:type (ex-data cause)))
|
||||
(str "frame type " bad))
|
||||
(step (rest remaining))))))))]
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
[app.common.schema :as sm]
|
||||
[app.common.types.shape :as cts]
|
||||
[app.common.uuid :as uuid]
|
||||
[benches.render-wasm.scenes.common :as common]
|
||||
[benches.render-wasm.snapshot :as common]
|
||||
[cljs.test :as t :include-macros true]))
|
||||
|
||||
(defn- sample-snapshot
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
test namespace tells a complete story without copying bodies."
|
||||
(:require
|
||||
[app.common.uuid :as uuid]
|
||||
[benches.render-wasm.scenes.builder :as builder]))
|
||||
[benches.render-wasm.builder :as builder]))
|
||||
|
||||
(defn failure-data
|
||||
"Returns the ex-data of the thrown failure, or nil when `f` passes."
|
||||
|
||||
@ -5,18 +5,18 @@
|
||||
;; Copyright (c) KALEIDOS SUBSIDIARY SL
|
||||
|
||||
(ns frontend-tests.benches.upload-test
|
||||
"Test routing contract for `benches.render-wasm.upload/upload-scene!`.
|
||||
"Test routing contract for `benches.render-wasm.browser.upload/upload-scene!`.
|
||||
|
||||
Byte layouts are proven by `frontend-tests.render-wasm.serialization-test`
|
||||
and `process-objects-test`; this suite pins: the order comes from
|
||||
`scenes.common/upload-order`, the batch helper is called exactly once with
|
||||
`snapshot/upload-order`, the batch helper is called exactly once with
|
||||
the caller's opts, and the prepared vector is returned in order."
|
||||
(:require
|
||||
[app.common.render-wasm.api.upload :as upload]
|
||||
[app.common.types.shape :as cts]
|
||||
[app.common.uuid :as uuid]
|
||||
[benches.render-wasm.scenes.common :as common]
|
||||
[benches.render-wasm.upload :as bench-upload]
|
||||
[benches.render-wasm.browser.upload :as bench-upload]
|
||||
[benches.render-wasm.snapshot :as common]
|
||||
[cljs.test :as t :include-macros true]))
|
||||
|
||||
(defn- sample-snapshot
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user