mirror of
https://github.com/status-im/reagent.git
synced 2025-01-12 21:05:20 +00:00
Merge pull request #313 from reagent-project/new-test-runner
New test runner
This commit is contained in:
commit
c63fe944fd
10
.gitignore
vendored
10
.gitignore
vendored
@ -4,18 +4,14 @@ pom.xml
|
|||||||
pom.xml.asc
|
pom.xml.asc
|
||||||
.nrepl-port
|
.nrepl-port
|
||||||
demo/empty.cljs
|
demo/empty.cljs
|
||||||
outsite/public/index.html
|
|
||||||
outsite/public/js
|
|
||||||
outsite/public/news
|
|
||||||
outsite/public/css
|
|
||||||
out
|
out
|
||||||
|
tmp
|
||||||
figwheel_server.log
|
figwheel_server.log
|
||||||
|
|
||||||
reagent.iml
|
reagent.iml
|
||||||
.idea
|
.idea
|
||||||
.lein-failures
|
.lein-failures
|
||||||
|
|
||||||
outsite/bundle.js
|
|
||||||
outsite/bundle.min.js
|
|
||||||
node_modules
|
node_modules
|
||||||
pre-render
|
|
||||||
|
test-environments/*/junit
|
||||||
|
145
Makefile
145
Makefile
@ -1,145 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
PROF =
|
|
||||||
PORT = 3449
|
|
||||||
|
|
||||||
SITEDIR = outsite/public
|
|
||||||
OUTPUTDIR = $(SITEDIR)/js/out
|
|
||||||
|
|
||||||
|
|
||||||
# convenience shortcuts for continous building
|
|
||||||
##############################################
|
|
||||||
|
|
||||||
# development build with auto-reloading
|
|
||||||
run: figwheel
|
|
||||||
|
|
||||||
# development build with auto-reloading and site generation
|
|
||||||
runsite:
|
|
||||||
@$(MAKE) run PROF=+site,$(PROF)
|
|
||||||
|
|
||||||
# development build with auto-reloading and webpacked source
|
|
||||||
runpack: target/webpack/bundle.js
|
|
||||||
@$(MAKE) run PROF=+webpack,$(PROF)
|
|
||||||
|
|
||||||
# development build with figwheel, but no tests
|
|
||||||
runnotest:
|
|
||||||
@$(MAKE) run PROF=dev-notest,$(PROF)
|
|
||||||
|
|
||||||
# production build with auto-rebuild
|
|
||||||
runprod: clean
|
|
||||||
@$(MAKE) serve-site PROF=prod,$(PROF)
|
|
||||||
|
|
||||||
# production build with auto-rebuild and webpacked source
|
|
||||||
runprodpack: clean target/webpack/bundle.js
|
|
||||||
@$(MAKE) serve-site PROF=prod,webpack,$(PROF)
|
|
||||||
|
|
||||||
# production build with auto-rebuild and testing
|
|
||||||
runprodtest: clean
|
|
||||||
@$(MAKE) serve-site PROF=prod-test,$(PROF)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
lein clean
|
|
||||||
|
|
||||||
|
|
||||||
## Subtargets
|
|
||||||
|
|
||||||
figwheel: trigger-build
|
|
||||||
@echo "Will start figwheel server at: http://127.0.0.1:$(PORT)\n"
|
|
||||||
lein with-profile $(PROF), figwheel
|
|
||||||
|
|
||||||
serve-site: trigger-build
|
|
||||||
@echo "Starting site at: http://127.0.0.1:$(PORT)/public\n"
|
|
||||||
( trap "kill 0" SIGINT SIGTERM EXIT; \
|
|
||||||
( cd $(SITEDIR)/.. && python -m SimpleHTTPServer $(PORT) & ); \
|
|
||||||
lein with-profile $(PROF), cljsbuild auto )
|
|
||||||
|
|
||||||
trigger-build:
|
|
||||||
# always trigger build to make sure page-generation works
|
|
||||||
@echo "(ns empty.generated.ns)" > demo/empty.cljs
|
|
||||||
@(echo "/* Generated, do not modify */\n\n" && \
|
|
||||||
cat examples/todomvc/todos.css examples/simple/example.css) \
|
|
||||||
> site/public/css/examples.css
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## gh-pages support
|
|
||||||
###################
|
|
||||||
|
|
||||||
# build site and push upstream to the gh-pages branch
|
|
||||||
push-gh-pages: build-gh-pages
|
|
||||||
git push origin gh-pages:gh-pages
|
|
||||||
|
|
||||||
# build site and push to reagent-project's doc site
|
|
||||||
push-project-docs: gen-site gen-docs
|
|
||||||
# sanity check
|
|
||||||
test -f $(SITEDIR)/index.html
|
|
||||||
test ! -e $(OUTPUTDIR)
|
|
||||||
rm -fr tmp
|
|
||||||
git clone git@github.com:reagent-project/reagent-project.github.io.git tmp
|
|
||||||
rm -fr tmp/*
|
|
||||||
cp -r $(SITEDIR)/* tmp/
|
|
||||||
mkdir -p tmp/docs/master/
|
|
||||||
cp -r target/doc/* tmp/docs/master/
|
|
||||||
cd tmp && \
|
|
||||||
git add . && git commit -m "Updated" && \
|
|
||||||
git push
|
|
||||||
rm -rf tmp
|
|
||||||
|
|
||||||
# build site into a gh-pages branch
|
|
||||||
build-gh-pages: gen-site gh-pages-add
|
|
||||||
|
|
||||||
gen-site: clean
|
|
||||||
lein with-profile prod cljsbuild once
|
|
||||||
lein with-profile prerender cljsbuild once
|
|
||||||
|
|
||||||
gen-docs: clean
|
|
||||||
lein codox
|
|
||||||
|
|
||||||
# copy contents of $(SITEDIR) to branch gh-pages
|
|
||||||
gh-pages-add:
|
|
||||||
# sanity check
|
|
||||||
test -f $(SITEDIR)/index.html
|
|
||||||
test ! -e $(OUTPUTDIR)
|
|
||||||
# make sure gh-pages branch exists
|
|
||||||
git show-branch gh-pages || true | git mktree | \
|
|
||||||
xargs git commit-tree | xargs git branch gh-pages
|
|
||||||
# clone gh-pages branch, and commit site to that
|
|
||||||
cd $(SITEDIR) && \
|
|
||||||
rm -rf .git tmp && \
|
|
||||||
git clone ../.. -lnb gh-pages tmp && \
|
|
||||||
mv tmp/.git . && \
|
|
||||||
git add . && git commit -m "Updated" && \
|
|
||||||
git push && rm -rf .git tmp
|
|
||||||
|
|
||||||
|
|
||||||
## Webpack
|
|
||||||
##########
|
|
||||||
|
|
||||||
target/webpack/bundle.js: node_modules lib/modules.js package.json Makefile
|
|
||||||
npm run bundle
|
|
||||||
|
|
||||||
node_modules:
|
|
||||||
npm install
|
|
||||||
|
|
||||||
|
|
||||||
## Misc utilities
|
|
||||||
#################
|
|
||||||
|
|
||||||
show-outdated:
|
|
||||||
lein ancient :all
|
|
||||||
|
|
||||||
VERSION := `sed -n -e '/(defproject reagent/ s/.*"\(.*\)"/\1/p' project.clj`
|
|
||||||
|
|
||||||
setversion:
|
|
||||||
version=$(VERSION); \
|
|
||||||
find . -name project.clj -o -name README.md | \
|
|
||||||
xargs -n1 sed -i "" -e 's,\(reagent "\)\([^"]*\)",\1'"$$version"'"',g
|
|
||||||
|
|
||||||
tag: setversion
|
|
||||||
if git rev-parse v$(VERSION) 2>/dev/null; then \
|
|
||||||
echo "Tag already exists"; \
|
|
||||||
exit 1; \
|
|
||||||
else \
|
|
||||||
git commit --allow-empty -a -v -e -m"Version "$(VERSION) && \
|
|
||||||
git tag v$(VERSION); \
|
|
||||||
fi
|
|
@ -14,7 +14,7 @@ Reagent provides a way to write efficient React components using (almost) nothin
|
|||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
|
|
||||||
* [JDK](http://www.azul.com/downloads/zulu/)
|
* Java JDK
|
||||||
* [Leiningen](http://leiningen.org/)
|
* [Leiningen](http://leiningen.org/)
|
||||||
|
|
||||||
### Usage
|
### Usage
|
||||||
@ -36,7 +36,7 @@ To use Reagent in an existing project you add this to your dependencies in `proj
|
|||||||
|
|
||||||
This is all you need to do if you want the standard version of React. If you want the version of React with addons, you'd use something like this instead:
|
This is all you need to do if you want the standard version of React. If you want the version of React with addons, you'd use something like this instead:
|
||||||
|
|
||||||
[reagent "0.6.0" :exclusions [cljsjs/react]]
|
[reagent "0.7.0" :exclusions [cljsjs/react]]
|
||||||
[cljsjs/react-with-addons "15.4.2-2"]
|
[cljsjs/react-with-addons "15.4.2-2"]
|
||||||
|
|
||||||
If you want to use your own build of React (or React from a CDN), you have to use `:exclusions` variant of the dependency, and also provide a file named "cljsjs/react.cljs", containing just `(ns cljsjs.react)`, in your project.
|
If you want to use your own build of React (or React from a CDN), you have to use `:exclusions` variant of the dependency, and also provide a file named "cljsjs/react.cljs", containing just `(ns cljsjs.react)`, in your project.
|
||||||
|
@ -1,42 +0,0 @@
|
|||||||
|
|
||||||
var fs = require("fs");
|
|
||||||
var vm = require("vm");
|
|
||||||
var path = require("path");
|
|
||||||
|
|
||||||
var run = function (src) {
|
|
||||||
global.require = require;
|
|
||||||
vm.runInThisContext(fs.readFileSync(src), src);
|
|
||||||
}
|
|
||||||
|
|
||||||
var imported = {};
|
|
||||||
|
|
||||||
var loadSrc = function (mainFile, outputDir, devFile) {
|
|
||||||
var googDir = path.join(outputDir, "goog");
|
|
||||||
var optNone = false;
|
|
||||||
if (outputDir) {
|
|
||||||
optNone = fs.existsSync(path.join(googDir, "deps.js"));
|
|
||||||
}
|
|
||||||
if (optNone) {
|
|
||||||
var cwd = process.cwd();
|
|
||||||
if (!global.goog) {
|
|
||||||
global.goog = {};
|
|
||||||
}
|
|
||||||
global.CLOSURE_IMPORT_SCRIPT = function (src) {
|
|
||||||
var s = path.resolve(path.resolve(cwd, path.join(googDir, src)));
|
|
||||||
if (!(s in imported)) {
|
|
||||||
imported[s] = true;
|
|
||||||
run(s);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
run(path.join(googDir, "base.js"));
|
|
||||||
run(path.join(outputDir, "cljs_deps.js"));
|
|
||||||
run(path.join(outputDir, devFile));
|
|
||||||
} else {
|
|
||||||
run(mainFile);
|
|
||||||
}
|
|
||||||
return optNone;
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.load = loadSrc;
|
|
@ -1,40 +0,0 @@
|
|||||||
|
|
||||||
var cljsLoad = require("./cljs-load");
|
|
||||||
|
|
||||||
var srcFile = "pre-render/main.js";
|
|
||||||
var outputDirectory = "outsite/public/js/out";
|
|
||||||
var devFile = "reagenttest/runtests.js";
|
|
||||||
|
|
||||||
var beep = "\u0007";
|
|
||||||
|
|
||||||
if (typeof location === "undefined") {
|
|
||||||
// figwheel wants js/location to exist, even if it doesn't run,
|
|
||||||
// for some reason
|
|
||||||
global.location = {};
|
|
||||||
}
|
|
||||||
var gensite = function () {
|
|
||||||
console.log("Pre-rendering or testing...");
|
|
||||||
var optNone = cljsLoad.load(srcFile, outputDirectory, devFile);
|
|
||||||
sitetools.server.genpages({"opt-none": optNone});
|
|
||||||
}
|
|
||||||
|
|
||||||
var compileFail = function () {
|
|
||||||
var msg = process.argv[process.argv.length - 1];
|
|
||||||
if (msg && msg.match(/failed/)) {
|
|
||||||
console.log("Compilation failed" + beep);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
process.env.NODE_ENV = "production";
|
|
||||||
|
|
||||||
if (!compileFail()) {
|
|
||||||
try {
|
|
||||||
gensite();
|
|
||||||
} catch (e) {
|
|
||||||
console.log(e + beep);
|
|
||||||
console.error(e.stack);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
process.exit(0);
|
|
39
build-example-site.sh
Executable file
39
build-example-site.sh
Executable file
@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
SHA=$(git rev-parse HEAD)
|
||||||
|
|
||||||
|
# sanity check
|
||||||
|
rm -fr tmp
|
||||||
|
git clone git@github.com:reagent-project/reagent-project.github.io.git tmp
|
||||||
|
rm -fr tmp/*
|
||||||
|
|
||||||
|
# Prerendering seems to work best on React 16
|
||||||
|
cd test-environments/browser-node-react-16
|
||||||
|
|
||||||
|
lein do clean, cljsbuild once prod
|
||||||
|
|
||||||
|
cp -r target/cljsbuild/prod/public/* ../../tmp/
|
||||||
|
|
||||||
|
lein cljsbuild once prerender
|
||||||
|
node target/cljsbuild/prerender/main.js
|
||||||
|
cp -r target/prerender/public/* ../../tmp/
|
||||||
|
|
||||||
|
cd ../..
|
||||||
|
|
||||||
|
test -f tmp/index.html
|
||||||
|
test -f tmp/js/main.js
|
||||||
|
test ! -e tmp/js/out
|
||||||
|
|
||||||
|
lein codox
|
||||||
|
|
||||||
|
mkdir -p tmp/docs/master/
|
||||||
|
cp -r target/doc/* tmp/docs/master/
|
||||||
|
|
||||||
|
cd tmp
|
||||||
|
git checkout -- README.md
|
||||||
|
git add .
|
||||||
|
git commit -m "Built site from $SHA"
|
||||||
|
git push
|
||||||
|
rm -rf tmp
|
28
circle.yml
28
circle.yml
@ -1,17 +1,21 @@
|
|||||||
machine:
|
machine:
|
||||||
node:
|
node:
|
||||||
version: v8.2.0
|
version: v8.2.0
|
||||||
|
environment:
|
||||||
|
JVM_OPTS: "-Xms512m -Xmx1024m"
|
||||||
|
dependencies:
|
||||||
|
override:
|
||||||
|
- lein deps
|
||||||
|
- npm install -g karma-cli
|
||||||
|
- ./prepare-tests.sh
|
||||||
|
cache_directories:
|
||||||
|
- test-environments/browser-node/node_modules
|
||||||
|
- test-environments/browser-node-react-16/node_modules
|
||||||
test:
|
test:
|
||||||
override:
|
override:
|
||||||
# Run tests against Cljsjs
|
- ./run-tests.sh
|
||||||
- mv node_modules node_modules_disabled
|
deployment:
|
||||||
- lein with-profile dev do clean, cljsbuild once
|
master:
|
||||||
- node bin/gen-site.js
|
branch: master
|
||||||
- test -f outsite/public/js/out/cljsjs/react/development/react.inc.js
|
commands:
|
||||||
- lein with-profile prod-test do clean, cljsbuild once
|
- ./build-example-site.sh
|
||||||
# Run tests against Node Modules
|
|
||||||
- mv node_modules_disabled
|
|
||||||
- lein clean
|
|
||||||
- lein with-profile dev do clean, cljsbuild once
|
|
||||||
- node bin/gen-site.js
|
|
||||||
- test -f outsite/public/js/out/node_modules/react/react.js
|
|
||||||
|
@ -7,8 +7,6 @@
|
|||||||
[reagentdemo.news :as news]
|
[reagentdemo.news :as news]
|
||||||
[reagent.debug :refer-macros [dbg println]]))
|
[reagent.debug :refer-macros [dbg println]]))
|
||||||
|
|
||||||
(def test-results (r/atom nil))
|
|
||||||
|
|
||||||
(def github {:href "https://github.com/reagent-project/reagent"})
|
(def github {:href "https://github.com/reagent-project/reagent"})
|
||||||
|
|
||||||
(defn github-badge []
|
(defn github-badge []
|
||||||
@ -23,8 +21,7 @@
|
|||||||
|
|
||||||
(tools/register-page index-page [#'intro/main] title)
|
(tools/register-page index-page [#'intro/main] title)
|
||||||
|
|
||||||
|
(defn demo [& [test-component]]
|
||||||
(defn demo []
|
|
||||||
[:div
|
[:div
|
||||||
[:div.nav>ul.nav
|
[:div.nav>ul.nav
|
||||||
[:li.brand [link {:href index-page} "Reagent:"]]
|
[:li.brand [link {:href index-page} "Reagent:"]]
|
||||||
@ -32,14 +29,12 @@
|
|||||||
[:li [link {:href news/url} "News"]]
|
[:li [link {:href news/url} "News"]]
|
||||||
[:li>a github "GitHub"]
|
[:li>a github "GitHub"]
|
||||||
[:li [:a {:href "http://reagent-project.github.io/docs/master/"} "API"]]]
|
[:li [:a {:href "http://reagent-project.github.io/docs/master/"} "API"]]]
|
||||||
[:div @test-results]
|
[:div test-component]
|
||||||
[tools/main-content]
|
[tools/main-content]
|
||||||
[github-badge]])
|
[github-badge]])
|
||||||
|
|
||||||
(defn init! []
|
(defn init! [& [test-component]]
|
||||||
(tools/start! {:body [#'demo]
|
(tools/start! {:body [#'demo test-component]
|
||||||
:title-prefix "Reagent: "
|
:title-prefix "Reagent: "
|
||||||
:css-infiles ["site/public/css/examples.css"
|
:css-infiles ["site/public/css/examples.css"
|
||||||
"site/public/css/main.css"]}))
|
"site/public/css/main.css"]}))
|
||||||
|
|
||||||
(init!)
|
|
||||||
|
9
demo/reagentdemo/dev.cljs
Normal file
9
demo/reagentdemo/dev.cljs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
(ns reagentdemo.dev
|
||||||
|
"Initializes the demo app, and runs the tests."
|
||||||
|
(:require [reagentdemo.core :as core]
|
||||||
|
[reagenttest.runtests :as tests]))
|
||||||
|
|
||||||
|
(defn init! []
|
||||||
|
(core/init! (tests/init!)))
|
||||||
|
|
||||||
|
(init!)
|
@ -1,4 +0,0 @@
|
|||||||
(ns reagentdemo.server
|
|
||||||
"Used to pre-render HTML files."
|
|
||||||
(:require [reagentdemo.core]
|
|
||||||
[sitetools.server]))
|
|
@ -16,7 +16,7 @@
|
|||||||
(defonce config (r/atom {:body [#'main-content]
|
(defonce config (r/atom {:body [#'main-content]
|
||||||
:pages {"/index.html" {:content [:div]
|
:pages {"/index.html" {:content [:div]
|
||||||
:title ""}}
|
:title ""}}
|
||||||
:site-dir "outsite/public"
|
:site-dir "target/prerender/public/"
|
||||||
:css-infiles ["site/public/css/main.css"]
|
:css-infiles ["site/public/css/main.css"]
|
||||||
:css-file "css/built.css"
|
:css-file "css/built.css"
|
||||||
:js-file "js/main.js"
|
:js-file "js/main.js"
|
||||||
|
20
demo/sitetools/prerender.cljs
Normal file
20
demo/sitetools/prerender.cljs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
(ns sitetools.prerender
|
||||||
|
(:require [reagent.debug :refer-macros [log]]
|
||||||
|
[sitetools.core :as tools]
|
||||||
|
[sitetools.server :as server]
|
||||||
|
[reagentdemo.core :as demo]))
|
||||||
|
|
||||||
|
(defn -main [& args]
|
||||||
|
(log "Generating site")
|
||||||
|
(demo/init!)
|
||||||
|
(let [conf @tools/config
|
||||||
|
conf (assoc conf :timestamp (str "?" (js/Date.now)))
|
||||||
|
{:keys [site-dir pages]} conf]
|
||||||
|
(doseq [f (keys pages)]
|
||||||
|
(server/write-file (->> f tools/to-relative (server/path-join site-dir))
|
||||||
|
(server/gen-page f conf)))
|
||||||
|
(server/write-resources site-dir conf))
|
||||||
|
(log "Wrote site")
|
||||||
|
(js/process.exit 0))
|
||||||
|
|
||||||
|
(set! *main-cli-fn* -main)
|
@ -57,6 +57,7 @@
|
|||||||
($ (fs) mkdirSync d))))
|
($ (fs) mkdirSync d))))
|
||||||
|
|
||||||
(defn write-file [f content]
|
(defn write-file [f content]
|
||||||
|
(log "Write" f)
|
||||||
(mkdirs ($ (path) dirname f))
|
(mkdirs ($ (path) dirname f))
|
||||||
($ (fs) writeFileSync f content))
|
($ (fs) writeFileSync f content))
|
||||||
|
|
||||||
@ -68,16 +69,3 @@
|
|||||||
(->> css-infiles
|
(->> css-infiles
|
||||||
(map #($ (fs) readFileSync %))
|
(map #($ (fs) readFileSync %))
|
||||||
(string/join "\n"))))
|
(string/join "\n"))))
|
||||||
|
|
||||||
;;; Main entry points
|
|
||||||
|
|
||||||
(defn ^:export genpages [opts]
|
|
||||||
(log "Generating site")
|
|
||||||
(let [conf (swap! tools/config merge (js->clj opts :keywordize-keys true))
|
|
||||||
conf (assoc conf :timestamp (str "?" (js/Date.now)))
|
|
||||||
{:keys [site-dir pages]} conf]
|
|
||||||
(doseq [f (keys pages)]
|
|
||||||
(write-file (->> f tools/to-relative (path-join site-dir))
|
|
||||||
(gen-page f conf)))
|
|
||||||
(write-resources site-dir conf))
|
|
||||||
(log "Wrote site"))
|
|
||||||
|
31
docs/development.md
Normal file
31
docs/development.md
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# Reagent development
|
||||||
|
|
||||||
|
## Running tests
|
||||||
|
|
||||||
|
To prepare different environments for tests run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./prepare-test.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
After this, you can run the full test set:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./run-tests.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Running all the tests can take a while, so while developing Reagent,
|
||||||
|
you might want to focus on one test environment, and use Figwheel to
|
||||||
|
run tests on your browser:
|
||||||
|
|
||||||
|
```
|
||||||
|
cd test-environments/browser-umd-react-16
|
||||||
|
# If build requires e.g. Lein profiles or such,
|
||||||
|
# the folder contains figwheel.sh script:
|
||||||
|
./figwheel.sh
|
||||||
|
# Else, just run figwheel normally:
|
||||||
|
lein figwheel
|
||||||
|
|
||||||
|
# Open http://0.0.0.0:3449 on a browser
|
||||||
|
# Check console for test output
|
||||||
|
```
|
2482
package-lock.json
generated
2482
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
16
package.json
16
package.json
@ -1,15 +1,9 @@
|
|||||||
{
|
{
|
||||||
"dependencies": {
|
"private": true,
|
||||||
"@cljs-oss/module-deps": "1.1.1",
|
|
||||||
"create-react-class": "^15.6.2",
|
|
||||||
"react": "^15.6.1",
|
|
||||||
"react-dom": "^15.6.1"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"bundle": "webpack && NODE_ENV=production webpack -p"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"babel-core": "^5.8.25",
|
"karma": "^1.7.1",
|
||||||
"webpack": "^1.12.2"
|
"karma-chrome-launcher": "^2.2.0",
|
||||||
|
"karma-cljs-test": "^0.1.0",
|
||||||
|
"karma-junit-reporter": "^1.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
23
prepare-tests.sh
Executable file
23
prepare-tests.sh
Executable file
@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
npm install
|
||||||
|
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Symlinked node_modules, package.json and package-lock.json
|
||||||
|
# are used to share node_modules between environments that
|
||||||
|
# use the same packages.
|
||||||
|
|
||||||
|
for env in test-environments/*; do
|
||||||
|
name=$(basename "$env")
|
||||||
|
(
|
||||||
|
cd "$env"
|
||||||
|
if [[ ! -L node_modules ]]; then
|
||||||
|
echo "Install $name packages"
|
||||||
|
npm install
|
||||||
|
else
|
||||||
|
echo "$name uses $(readlink node_modules)"
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
echo
|
||||||
|
done
|
153
project.clj
153
project.clj
@ -4,7 +4,7 @@
|
|||||||
:description "A simple ClojureScript interface to React"
|
:description "A simple ClojureScript interface to React"
|
||||||
|
|
||||||
:dependencies [[org.clojure/clojure "1.8.0"]
|
:dependencies [[org.clojure/clojure "1.8.0"]
|
||||||
[org.clojure/clojurescript "1.9.908"]
|
[org.clojure/clojurescript "1.9.946"]
|
||||||
;; If :npm-deps enabled, these are used only for externs.
|
;; If :npm-deps enabled, these are used only for externs.
|
||||||
;; Without direct react dependency, other packages,
|
;; Without direct react dependency, other packages,
|
||||||
;; like react-leaflet might have closer dependency to a other version.
|
;; like react-leaflet might have closer dependency to a other version.
|
||||||
@ -14,7 +14,9 @@
|
|||||||
[cljsjs/create-react-class "15.6.2-0"]]
|
[cljsjs/create-react-class "15.6.2-0"]]
|
||||||
|
|
||||||
:plugins [[lein-cljsbuild "1.1.7"]
|
:plugins [[lein-cljsbuild "1.1.7"]
|
||||||
[lein-codox "0.10.3"]]
|
[lein-doo "0.1.8"]
|
||||||
|
[lein-codox "0.10.3"]
|
||||||
|
[lein-figwheel "0.5.14"]]
|
||||||
|
|
||||||
:source-paths ["src"]
|
:source-paths ["src"]
|
||||||
|
|
||||||
@ -22,89 +24,86 @@
|
|||||||
:exclude clojure.string
|
:exclude clojure.string
|
||||||
:source-paths ["src"]}
|
:source-paths ["src"]}
|
||||||
|
|
||||||
:profiles {:test {:cljsbuild
|
:profiles {:react-16 {:dependencies [[cljsjs/react "16.0.0-0"]
|
||||||
{:builds {:client {:source-paths ["test"]
|
[cljsjs/react-dom "16.0.0-0"]
|
||||||
:notify-command ["node" "bin/gen-site.js"]
|
[cljsjs/react-dom-server "16.0.0-0"]]}
|
||||||
:compiler
|
|
||||||
{:main "reagenttest.runtests"}}}}}
|
|
||||||
|
|
||||||
:fig [{:dependencies [[figwheel "0.5.13"]]
|
:dev {:dependencies [[figwheel "0.5.14"]
|
||||||
:plugins [[lein-figwheel "0.5.13"]]
|
[doo "0.1.8"]]
|
||||||
:source-paths ["demo"] ;; for lighttable
|
:source-paths ["demo" "examples/todomvc/src" "examples/simple/src" "examples/geometry/src"]
|
||||||
:resource-paths ["site" "outsite"]
|
:resource-paths ["site" "target/cljsbuild/client"]}}
|
||||||
:figwheel {:css-dirs ["site/public/css"]}
|
|
||||||
|
:clean-targets ^{:protect false} [:target-path :compile-path "out"]
|
||||||
|
|
||||||
|
:figwheel {:http-server-root "public" ;; assumes "resources"
|
||||||
|
:css-dirs ["site/public/css"]
|
||||||
|
:repl false}
|
||||||
|
|
||||||
|
;; No profiles and merging - just manual configuration for each build type
|
||||||
:cljsbuild
|
:cljsbuild
|
||||||
{:builds
|
{:builds
|
||||||
{:client
|
{:client
|
||||||
{:figwheel true
|
{:source-paths ["demo" "test"]
|
||||||
:compiler {:source-map true
|
:figwheel true
|
||||||
|
:compiler {:parallel-build true
|
||||||
|
:source-map true
|
||||||
:optimizations :none
|
:optimizations :none
|
||||||
;; :recompile-dependents false
|
; :main "reagentdemo.core"
|
||||||
:output-dir "outsite/public/js/out"
|
:main "reagentdemo.dev"
|
||||||
:asset-path "js/out"}}}}}]
|
:output-dir "target/cljsbuild/client/public/js/out"
|
||||||
|
:output-to "target/cljsbuild/client/public/js/main.js"
|
||||||
|
:asset-path "js/out"
|
||||||
|
;; add process.env.node_env preload
|
||||||
|
:process-shim true}}
|
||||||
|
|
||||||
:site {:resource-paths ^:replace ["outsite"]
|
:test
|
||||||
:figwheel {:css-dirs ^:replace ["outsite/public/css"]}}
|
{:source-paths ["test"]
|
||||||
|
:compiler {:parallel-build true
|
||||||
|
:source-map true
|
||||||
|
:optimizations :none
|
||||||
|
:main "reagenttest.runtests"
|
||||||
|
:asset-path "js/out"
|
||||||
|
:output-dir "target/cljsbuild/test/out"
|
||||||
|
:output-to "target/cljsbuild/test/main.js"
|
||||||
|
;; add process.env.node_env preload
|
||||||
|
:process-shim true}}
|
||||||
|
|
||||||
:prod [:site
|
:prerender
|
||||||
{:cljsbuild
|
{:source-paths ["demo"]
|
||||||
{:builds {:client
|
:compiler {:main "sitetools.prerender"
|
||||||
{:compiler {:optimizations :advanced
|
:target :nodejs
|
||||||
|
:process-shim false
|
||||||
|
:output-dir "target/cljsbuild/prerender/out"
|
||||||
|
:output-to "target/cljsbuild/prerender/main.js"}}
|
||||||
|
|
||||||
|
:node-test
|
||||||
|
{:source-paths ["test"]
|
||||||
|
:compiler {:main "reagenttest.runtests"
|
||||||
|
:target :nodejs
|
||||||
|
:parallel-build true
|
||||||
|
:source-map true
|
||||||
|
:optimizations :none
|
||||||
|
:output-dir "target/cljsbuild/node-test/out"
|
||||||
|
:output-to "target/cljsbuild/node-test/main.js"}}
|
||||||
|
|
||||||
|
:prod
|
||||||
|
{:source-paths ["demo"]
|
||||||
|
:compiler {:main "reagentdemo.core"
|
||||||
|
:optimizations :advanced
|
||||||
:elide-asserts true
|
:elide-asserts true
|
||||||
:pretty-print false
|
:pretty-print false
|
||||||
;; :pseudo-names true
|
;; :pseudo-names true
|
||||||
:output-dir "target/client"}}}}}]
|
:output-to "target/cljsbuild/prod/public/js/main.js"
|
||||||
|
:output-dir "target/cljsbuild/prod/out" ;; Outside of public, not published
|
||||||
|
:closure-warnings {:global-this :off}}}
|
||||||
|
|
||||||
:prerender [:prod
|
:prod-test
|
||||||
{:cljsbuild
|
{:source-paths ["demo"]
|
||||||
{:builds {:client
|
:compiler {:main "reagenttest.runtests"
|
||||||
{:compiler {:main "reagentdemo.server"
|
:optimizations :advanced
|
||||||
:output-to "pre-render/main.js"
|
:elide-asserts true
|
||||||
:output-dir "pre-render/out"}
|
:pretty-print false
|
||||||
:notify-command ["node" "bin/gen-site.js"] }}}}]
|
;; :pseudo-names true
|
||||||
|
:output-to "target/cljsbuild/prod-test/main.js"
|
||||||
:webpack {:cljsbuild
|
:output-dir "target/cljsbuild/prod-test/out"
|
||||||
{:builds {:client
|
:closure-warnings {:global-this :off}}}}})
|
||||||
{:compiler
|
|
||||||
{:foreign-libs
|
|
||||||
[{:file "target/webpack/bundle.js"
|
|
||||||
:file-min "target/webpack/bundle.min.js"
|
|
||||||
:provides ["cljsjs.react.dom"
|
|
||||||
"cljsjs.react.dom.server"
|
|
||||||
"cljsjs.react"]
|
|
||||||
:requires []}]}}}}}
|
|
||||||
|
|
||||||
:prod-test [:prod :test]
|
|
||||||
|
|
||||||
:dev [:fig :test]
|
|
||||||
|
|
||||||
:dev-notest [:fig]}
|
|
||||||
|
|
||||||
:clean-targets ^{:protect false} [:target-path :compile-path
|
|
||||||
"outsite/public/js"
|
|
||||||
"outsite/public/site"
|
|
||||||
"outsite/public/news"
|
|
||||||
"outsite/public/css"
|
|
||||||
"outsite/public/index.html"
|
|
||||||
"out"
|
|
||||||
"pre-render"]
|
|
||||||
|
|
||||||
:cljsbuild {:builds {:client
|
|
||||||
{:source-paths ["src"
|
|
||||||
"demo"
|
|
||||||
"examples/todomvc/src"
|
|
||||||
"examples/simple/src"
|
|
||||||
"examples/geometry/src"]
|
|
||||||
:compiler {:parallel-build true
|
|
||||||
:main "reagentdemo.core"
|
|
||||||
:output-to "outsite/public/js/main.js"
|
|
||||||
:language-in :ecmascript6
|
|
||||||
:language-out :ecmascript3
|
|
||||||
;; Add process.env.NODE_ENV preload
|
|
||||||
:process-shim true
|
|
||||||
:npm-deps {:react "15.6.1"
|
|
||||||
:react-dom "15.6.1"
|
|
||||||
:create-react-class "15.6.2"}}}}}
|
|
||||||
|
|
||||||
:figwheel {:http-server-root "public" ;; assumes "resources"
|
|
||||||
:repl false})
|
|
||||||
|
39
run-tests.sh
Executable file
39
run-tests.sh
Executable file
@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Kill all subshells with ctrl-c
|
||||||
|
trap "kill 0" SIGINT
|
||||||
|
|
||||||
|
reset='\033[0m'
|
||||||
|
red='\033[0;31m'
|
||||||
|
green='\033[0;32m'
|
||||||
|
blue='\033[0;34m'
|
||||||
|
|
||||||
|
EXIT=0
|
||||||
|
|
||||||
|
SUMMARY="$blue##\n## SUMMARY\n##$reset\n\n"
|
||||||
|
|
||||||
|
for env in test-environments/*; do
|
||||||
|
name=$(basename "$env")
|
||||||
|
(
|
||||||
|
cd "$env"
|
||||||
|
echo -e "$blue##"
|
||||||
|
echo -e "## TESTING $name"
|
||||||
|
echo -e "##$reset"
|
||||||
|
echo
|
||||||
|
./test.sh
|
||||||
|
)
|
||||||
|
if [[ $? != "0" ]]; then
|
||||||
|
echo
|
||||||
|
echo -e "${red}FAIL $name$reset"
|
||||||
|
SUMMARY="$SUMMARY${red}FAIL $name$reset\n"
|
||||||
|
EXIT=1
|
||||||
|
else
|
||||||
|
SUMMARY="$SUMMARY${green}OK $name$reset\n"
|
||||||
|
fi
|
||||||
|
echo
|
||||||
|
echo
|
||||||
|
done
|
||||||
|
|
||||||
|
echo -e "$SUMMARY"
|
||||||
|
|
||||||
|
exit $EXIT
|
@ -199,6 +199,10 @@
|
|||||||
(when-not (nil? f)
|
(when-not (nil? f)
|
||||||
(.call f c c))))
|
(.call f c c))))
|
||||||
|
|
||||||
|
:componentDidCatch
|
||||||
|
(fn componentDidCatch [error info]
|
||||||
|
(this-as c (.call f c c error info)))
|
||||||
|
|
||||||
nil))
|
nil))
|
||||||
|
|
||||||
(defn get-wrapper [key f name]
|
(defn get-wrapper [key f name]
|
||||||
@ -267,10 +271,25 @@
|
|||||||
cljsify
|
cljsify
|
||||||
create-react-class))
|
create-react-class))
|
||||||
|
|
||||||
|
(defn fiber-component-path [fiber]
|
||||||
|
(let [name (some-> fiber
|
||||||
|
($ :type)
|
||||||
|
($ :displayName))
|
||||||
|
parent (some-> fiber
|
||||||
|
($ :return))
|
||||||
|
path (some-> parent
|
||||||
|
fiber-component-path
|
||||||
|
(str " > "))
|
||||||
|
res (str path name)]
|
||||||
|
(when-not (empty? res) res)))
|
||||||
|
|
||||||
(defn component-path [c]
|
(defn component-path [c]
|
||||||
(let [elem (some-> (or (some-> c ($ :_reactInternalInstance))
|
;; Alternative branch for React 16
|
||||||
|
(if-let [fiber (some-> c ($ :_reactInternalFiber))]
|
||||||
|
(fiber-component-path fiber)
|
||||||
|
(let [elem (or (some-> (or (some-> c ($ :_reactInternalInstance))
|
||||||
c)
|
c)
|
||||||
($ :_currentElement))
|
($ :_currentElement)))
|
||||||
name (some-> elem
|
name (some-> elem
|
||||||
($ :type)
|
($ :type)
|
||||||
($ :displayName))
|
($ :displayName))
|
||||||
@ -279,7 +298,7 @@
|
|||||||
component-path
|
component-path
|
||||||
(str " > "))
|
(str " > "))
|
||||||
res (str path name)]
|
res (str path name)]
|
||||||
(when-not (empty? res) res)))
|
(when-not (empty? res) res))))
|
||||||
|
|
||||||
(defn comp-name []
|
(defn comp-name []
|
||||||
(if (dev?)
|
(if (dev?)
|
||||||
|
1
test-environments/browser-node-react-16/demo
Symbolic link
1
test-environments/browser-node-react-16/demo
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../demo
|
1
test-environments/browser-node-react-16/examples
Symbolic link
1
test-environments/browser-node-react-16/examples
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../examples
|
2056
test-environments/browser-node-react-16/package-lock.json
generated
Normal file
2056
test-environments/browser-node-react-16/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
14
test-environments/browser-node-react-16/package.json
Normal file
14
test-environments/browser-node-react-16/package.json
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"@cljs-oss/module-deps": "1.1.1",
|
||||||
|
"create-react-class": "^15.6.2",
|
||||||
|
"react": "^16.0.0",
|
||||||
|
"react-dom": "^16.0.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"karma": "^1.7.1",
|
||||||
|
"karma-chrome-launcher": "^2.2.0",
|
||||||
|
"karma-cljs-test": "^0.1.0",
|
||||||
|
"karma-junit-reporter": "^1.2.0"
|
||||||
|
}
|
||||||
|
}
|
1
test-environments/browser-node-react-16/project.clj
Symbolic link
1
test-environments/browser-node-react-16/project.clj
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../project.clj
|
1
test-environments/browser-node-react-16/site
Symbolic link
1
test-environments/browser-node-react-16/site
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../site
|
1
test-environments/browser-node-react-16/src
Symbolic link
1
test-environments/browser-node-react-16/src
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../src
|
1
test-environments/browser-node-react-16/test
Symbolic link
1
test-environments/browser-node-react-16/test
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../test
|
4
test-environments/browser-node-react-16/test.sh
Executable file
4
test-environments/browser-node-react-16/test.sh
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -ex
|
||||||
|
lein do clean, doo chrome-headless test once
|
||||||
|
test -f target/cljsbuild/test/out/node_modules/react/index.js
|
1
test-environments/browser-node/demo
Symbolic link
1
test-environments/browser-node/demo
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../demo
|
1
test-environments/browser-node/examples
Symbolic link
1
test-environments/browser-node/examples
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../examples
|
2057
test-environments/browser-node/package-lock.json
generated
Normal file
2057
test-environments/browser-node/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
14
test-environments/browser-node/package.json
Normal file
14
test-environments/browser-node/package.json
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"@cljs-oss/module-deps": "1.1.1",
|
||||||
|
"create-react-class": "^15.6.2",
|
||||||
|
"react": "^15.6.2",
|
||||||
|
"react-dom": "^15.6.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"karma": "^1.7.1",
|
||||||
|
"karma-chrome-launcher": "^2.2.0",
|
||||||
|
"karma-cljs-test": "^0.1.0",
|
||||||
|
"karma-junit-reporter": "^1.2.0"
|
||||||
|
}
|
||||||
|
}
|
1
test-environments/browser-node/project.clj
Symbolic link
1
test-environments/browser-node/project.clj
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../project.clj
|
1
test-environments/browser-node/site
Symbolic link
1
test-environments/browser-node/site
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../site
|
1
test-environments/browser-node/src
Symbolic link
1
test-environments/browser-node/src
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../src
|
1
test-environments/browser-node/test
Symbolic link
1
test-environments/browser-node/test
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../test
|
4
test-environments/browser-node/test.sh
Executable file
4
test-environments/browser-node/test.sh
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -ex
|
||||||
|
lein do clean, doo chrome-headless test once
|
||||||
|
test -f target/cljsbuild/test/out/node_modules/react/react.js
|
1
test-environments/browser-umd-prod/demo
Symbolic link
1
test-environments/browser-umd-prod/demo
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../demo
|
1
test-environments/browser-umd-prod/examples
Symbolic link
1
test-environments/browser-umd-prod/examples
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../examples
|
1
test-environments/browser-umd-prod/node_modules
Symbolic link
1
test-environments/browser-umd-prod/node_modules
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../browser-umd/node_modules
|
1
test-environments/browser-umd-prod/package-lock.json
generated
Symbolic link
1
test-environments/browser-umd-prod/package-lock.json
generated
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../browser-umd/package-lock.json
|
1
test-environments/browser-umd-prod/package.json
Symbolic link
1
test-environments/browser-umd-prod/package.json
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../browser-umd/package.json
|
1
test-environments/browser-umd-prod/project.clj
Symbolic link
1
test-environments/browser-umd-prod/project.clj
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../project.clj
|
1
test-environments/browser-umd-prod/site
Symbolic link
1
test-environments/browser-umd-prod/site
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../site
|
1
test-environments/browser-umd-prod/src
Symbolic link
1
test-environments/browser-umd-prod/src
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../src
|
1
test-environments/browser-umd-prod/test
Symbolic link
1
test-environments/browser-umd-prod/test
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../test
|
4
test-environments/browser-umd-prod/test.sh
Executable file
4
test-environments/browser-umd-prod/test.sh
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -x
|
||||||
|
lein do clean, doo chrome-headless prod-test once
|
||||||
|
test -f target/cljsbuild/prod-test/main.js
|
1
test-environments/browser-umd-react-16/demo
Symbolic link
1
test-environments/browser-umd-react-16/demo
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../demo
|
1
test-environments/browser-umd-react-16/examples
Symbolic link
1
test-environments/browser-umd-react-16/examples
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../examples
|
3
test-environments/browser-umd-react-16/figwheel.sh
Executable file
3
test-environments/browser-umd-react-16/figwheel.sh
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -x
|
||||||
|
lein with-profile react-16 figwheel
|
1
test-environments/browser-umd-react-16/node_modules
Symbolic link
1
test-environments/browser-umd-react-16/node_modules
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../browser-umd/node_modules
|
1
test-environments/browser-umd-react-16/package-lock.json
generated
Symbolic link
1
test-environments/browser-umd-react-16/package-lock.json
generated
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../browser-umd/package-lock.json
|
1
test-environments/browser-umd-react-16/package.json
Symbolic link
1
test-environments/browser-umd-react-16/package.json
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../browser-umd/package.json
|
1
test-environments/browser-umd-react-16/project.clj
Symbolic link
1
test-environments/browser-umd-react-16/project.clj
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../project.clj
|
1
test-environments/browser-umd-react-16/site
Symbolic link
1
test-environments/browser-umd-react-16/site
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../site
|
1
test-environments/browser-umd-react-16/src
Symbolic link
1
test-environments/browser-umd-react-16/src
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../src
|
1
test-environments/browser-umd-react-16/test
Symbolic link
1
test-environments/browser-umd-react-16/test
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../test
|
4
test-environments/browser-umd-react-16/test.sh
Executable file
4
test-environments/browser-umd-react-16/test.sh
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -ex
|
||||||
|
lein with-profile dev,react-16 do clean, doo chrome-headless test once
|
||||||
|
test -f target/cljsbuild/test/out/cljsjs/react/development/react.inc.js
|
1
test-environments/browser-umd/demo
Symbolic link
1
test-environments/browser-umd/demo
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../demo
|
1
test-environments/browser-umd/examples
Symbolic link
1
test-environments/browser-umd/examples
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../examples
|
1
test-environments/browser-umd/node_modules
Symbolic link
1
test-environments/browser-umd/node_modules
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../node_modules
|
1
test-environments/browser-umd/package-lock.json
generated
Symbolic link
1
test-environments/browser-umd/package-lock.json
generated
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../package-lock.json
|
1
test-environments/browser-umd/package.json
Symbolic link
1
test-environments/browser-umd/package.json
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../package.json
|
1
test-environments/browser-umd/project.clj
Symbolic link
1
test-environments/browser-umd/project.clj
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../project.clj
|
1
test-environments/browser-umd/site
Symbolic link
1
test-environments/browser-umd/site
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../site
|
1
test-environments/browser-umd/src
Symbolic link
1
test-environments/browser-umd/src
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../src
|
1
test-environments/browser-umd/test
Symbolic link
1
test-environments/browser-umd/test
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../test
|
4
test-environments/browser-umd/test.sh
Executable file
4
test-environments/browser-umd/test.sh
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -ex
|
||||||
|
lein do clean, doo chrome-headless test once
|
||||||
|
test -f target/cljsbuild/test/out/cljsjs/react/development/react.inc.js
|
1
test-environments/node/demo
Symbolic link
1
test-environments/node/demo
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../demo
|
1
test-environments/node/examples
Symbolic link
1
test-environments/node/examples
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../examples
|
1
test-environments/node/node_modules
Symbolic link
1
test-environments/node/node_modules
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../browser-node/node_modules
|
1
test-environments/node/package-lock.json
generated
Symbolic link
1
test-environments/node/package-lock.json
generated
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../browser-node/package-lock.json
|
1
test-environments/node/package.json
Symbolic link
1
test-environments/node/package.json
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../browser-node/package.json
|
1
test-environments/node/project.clj
Symbolic link
1
test-environments/node/project.clj
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../project.clj
|
1
test-environments/node/site
Symbolic link
1
test-environments/node/site
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../site
|
1
test-environments/node/src
Symbolic link
1
test-environments/node/src
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../src
|
1
test-environments/node/test
Symbolic link
1
test-environments/node/test
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../test
|
5
test-environments/node/test.sh
Executable file
5
test-environments/node/test.sh
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -ex
|
||||||
|
lein do clean, doo node node-test once
|
||||||
|
test ! -f target/cljsbuild/node-test/out/node_modules/react/index.js
|
||||||
|
grep "reagent.impl.template.node\$module\$react = require('react')" target/cljsbuild/node-test/out/reagent/impl/template.js
|
@ -8,9 +8,9 @@
|
|||||||
[reagenttest.testwithlet]
|
[reagenttest.testwithlet]
|
||||||
[reagenttest.testwrap]
|
[reagenttest.testwrap]
|
||||||
[cljs.test :as test :include-macros true]
|
[cljs.test :as test :include-macros true]
|
||||||
|
[doo.runner :as doo :refer-macros [doo-tests]]
|
||||||
[reagent.core :as r]
|
[reagent.core :as r]
|
||||||
[reagent.debug :refer-macros [dbg log]]
|
[reagent.debug :refer-macros [dbg log]]
|
||||||
[reagentdemo.core :as demo]
|
|
||||||
[sitetools.server]))
|
[sitetools.server]))
|
||||||
|
|
||||||
(enable-console-print!)
|
(enable-console-print!)
|
||||||
@ -50,9 +50,18 @@
|
|||||||
"testing")]))
|
"testing")]))
|
||||||
|
|
||||||
(defn init! []
|
(defn init! []
|
||||||
|
;; This function is only used when running tests from the demo app.
|
||||||
|
;; Which is why exit-point is set manually.
|
||||||
(when (some? (test/deftest empty-test))
|
(when (some? (test/deftest empty-test))
|
||||||
;; Only run with :load-tests true
|
(doo/set-exit-point! (fn [success?] nil))
|
||||||
(reset! demo/test-results [#'test-output-mini])
|
(run-tests)
|
||||||
(run-tests)))
|
[#'test-output-mini]))
|
||||||
|
|
||||||
(init!)
|
(doo-tests 'reagenttest.testreagent
|
||||||
|
'reagenttest.testcursor
|
||||||
|
'reagenttest.testinterop
|
||||||
|
'reagenttest.testratom
|
||||||
|
'reagenttest.testratomasync
|
||||||
|
'reagenttest.testtrack
|
||||||
|
'reagenttest.testwithlet
|
||||||
|
'reagenttest.testwrap)
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
(ns reagenttest.testreagent
|
(ns reagenttest.testreagent
|
||||||
(:require [cljs.test :as t :refer-macros [is deftest testing]]
|
(:require [cljs.test :as t :refer-macros [is deftest testing]]
|
||||||
|
[react :as react]
|
||||||
[create-react-class :as create-react-class]
|
[create-react-class :as create-react-class]
|
||||||
[reagent.ratom :as rv :refer-macros [reaction]]
|
[reagent.ratom :as rv :refer-macros [reaction]]
|
||||||
[reagent.debug :as debug :refer-macros [dbg println log dev?]]
|
[reagent.debug :as debug :refer-macros [dbg println log dev?]]
|
||||||
@ -23,21 +24,15 @@
|
|||||||
|
|
||||||
(def rflush r/flush)
|
(def rflush r/flush)
|
||||||
|
|
||||||
(defn add-test-div [name]
|
|
||||||
(let [doc js/document
|
|
||||||
body (.-body js/document)
|
|
||||||
div (.createElement doc "div")]
|
|
||||||
(.appendChild body div)
|
|
||||||
div))
|
|
||||||
|
|
||||||
(defn with-mounted-component [comp f]
|
(defn with-mounted-component [comp f]
|
||||||
(when isClient
|
(when isClient
|
||||||
(let [div (add-test-div "_testreagent")]
|
(let [div (.createElement js/document "div")]
|
||||||
|
(try
|
||||||
(let [c (r/render comp div)]
|
(let [c (r/render comp div)]
|
||||||
(f c div)
|
(f c div))
|
||||||
|
(finally
|
||||||
(r/unmount-component-at-node div)
|
(r/unmount-component-at-node div)
|
||||||
(r/flush)
|
(r/flush))))))
|
||||||
(.removeChild (.-body js/document) div)))))
|
|
||||||
|
|
||||||
(defn found-in [re div]
|
(defn found-in [re div]
|
||||||
(let [res (.-innerHTML div)]
|
(let [res (.-innerHTML div)]
|
||||||
@ -282,16 +277,18 @@
|
|||||||
(deftest data-aria-test []
|
(deftest data-aria-test []
|
||||||
(is (re-find #"data-foo"
|
(is (re-find #"data-foo"
|
||||||
(as-string [:div {:data-foo "x"}])))
|
(as-string [:div {:data-foo "x"}])))
|
||||||
(is (re-find #"aria-foo"
|
(is (re-find #"aria-labelledby"
|
||||||
(as-string [:div {:aria-foo "x"}])))
|
(as-string [:div {:aria-labelledby "x"}])))
|
||||||
;; Skip test: produces warning in new React
|
;; Skip test: produces warning in new React
|
||||||
;; (is (not (re-find #"enctype"
|
;; (is (not (re-find #"enctype"
|
||||||
;; (as-string [:div {"enc-type" "x"}])))
|
;; (as-string [:div {"enc-type" "x"}])))
|
||||||
;; "Strings are passed through to React.")
|
;; "Strings are passed through to React.")
|
||||||
(is (re-find #"enctype"
|
;; FIXME: For some reason UMD module returns everything in
|
||||||
|
;; lowercase, and CommonJS with upper T
|
||||||
|
(is (re-find #"enc[tT]ype"
|
||||||
(as-string [:div {"encType" "x"}]))
|
(as-string [:div {"encType" "x"}]))
|
||||||
"Strings are passed through to React, and have to be camelcase.")
|
"Strings are passed through to React, and have to be camelcase.")
|
||||||
(is (re-find #"enctype"
|
(is (re-find #"enc[tT]ype"
|
||||||
(as-string [:div {:enc-type "x"}]))
|
(as-string [:div {:enc-type "x"}]))
|
||||||
"Strings are passed through to React, and have to be camelcase."))
|
"Strings are passed through to React, and have to be camelcase."))
|
||||||
|
|
||||||
@ -906,6 +903,29 @@
|
|||||||
(defn foo []
|
(defn foo []
|
||||||
[:div])
|
[:div])
|
||||||
|
|
||||||
|
(defn log-error [& f]
|
||||||
|
(debug/error (apply str f)))
|
||||||
|
|
||||||
|
(defn wrap-capture-window-error [f]
|
||||||
|
(fn []
|
||||||
|
(let [org js/console.onerror]
|
||||||
|
(set! js/window.onerror (fn [e]
|
||||||
|
(log-error e)
|
||||||
|
true))
|
||||||
|
(try
|
||||||
|
(f)
|
||||||
|
(finally
|
||||||
|
(set! js/window.onerror org))))))
|
||||||
|
|
||||||
|
(defn wrap-capture-console-error [f]
|
||||||
|
(fn []
|
||||||
|
(let [org js/console.error]
|
||||||
|
(set! js/console.error log-error)
|
||||||
|
(try
|
||||||
|
(f)
|
||||||
|
(finally
|
||||||
|
(set! js/console.error org))))))
|
||||||
|
|
||||||
(deftest test-err-messages
|
(deftest test-err-messages
|
||||||
(when (dev?)
|
(when (dev?)
|
||||||
(is (thrown-with-msg?
|
(is (thrown-with-msg?
|
||||||
@ -939,24 +959,27 @@
|
|||||||
pkg "reagenttest.testreagent."
|
pkg "reagenttest.testreagent."
|
||||||
stack1 (str "in " pkg "comp1")
|
stack1 (str "in " pkg "comp1")
|
||||||
stack2 (str "in " pkg "comp2 > " pkg "comp1")
|
stack2 (str "in " pkg "comp2 > " pkg "comp1")
|
||||||
lstr (fn [& s] (list (apply str s)))
|
|
||||||
re (fn [& s]
|
re (fn [& s]
|
||||||
(re-pattern (apply str s)))
|
(re-pattern (apply str s)))
|
||||||
rend (fn [x]
|
rend (fn [x]
|
||||||
(with-mounted-component x identity))]
|
(with-mounted-component x identity))]
|
||||||
(let [e (debug/track-warnings
|
(let [e (debug/track-warnings
|
||||||
|
(wrap-capture-window-error
|
||||||
|
(wrap-capture-console-error
|
||||||
#(is (thrown-with-msg?
|
#(is (thrown-with-msg?
|
||||||
:default (re "Invalid tag: 'div.' \\(" stack2 "\\)")
|
:default (re "Invalid tag: 'div.' \\(" stack2 "\\)")
|
||||||
(rend [comp2 [:div. "foo"]]))))]
|
(rend [comp2 [:div. "foo"]]))))))]
|
||||||
(is (= e
|
(is (= (last (:error e))
|
||||||
{:error (lstr "Error rendering component (" stack2 ")")})))
|
(str "Error rendering component (" stack2 ")"))))
|
||||||
|
|
||||||
(let [e (debug/track-warnings
|
(let [e (debug/track-warnings
|
||||||
|
(wrap-capture-window-error
|
||||||
|
(wrap-capture-console-error
|
||||||
#(is (thrown-with-msg?
|
#(is (thrown-with-msg?
|
||||||
:default (re "Invalid tag: 'div.' \\(" stack1 "\\)")
|
:default (re "Invalid tag: 'div.' \\(" stack1 "\\)")
|
||||||
(rend [comp1 [:div. "foo"]]))))]
|
(rend [comp1 [:div. "foo"]]))))))]
|
||||||
(is (= e
|
(is (= (last (:error e))
|
||||||
{:error (lstr "Error rendering component (" stack1 ")")})))
|
(str "Error rendering component (" stack1 ")"))))
|
||||||
|
|
||||||
(let [e (debug/track-warnings #(r/as-element [nat]))]
|
(let [e (debug/track-warnings #(r/as-element [nat]))]
|
||||||
(is (re-find #"Using native React classes directly"
|
(is (re-find #"Using native React classes directly"
|
||||||
@ -972,6 +995,29 @@
|
|||||||
(is (re-find #"Every element in a seq should have a unique :key"
|
(is (re-find #"Every element in a seq should have a unique :key"
|
||||||
(-> e :warn first))))))))
|
(-> e :warn first))))))))
|
||||||
|
|
||||||
|
(deftest test-error-boundary
|
||||||
|
(when (>= (js/parseInt react/version) 16)
|
||||||
|
(let [error (r/atom nil)
|
||||||
|
error-boundary (fn error-boundary [comp]
|
||||||
|
(r/create-class
|
||||||
|
{:component-did-catch (fn [this e info]
|
||||||
|
(reset! error e))
|
||||||
|
:reagent-render (fn [comp]
|
||||||
|
(if @error
|
||||||
|
[:div "Something went wrong."]
|
||||||
|
comp))}))
|
||||||
|
comp1 (fn comp1 []
|
||||||
|
($ nil :foo)
|
||||||
|
[:div "foo"])]
|
||||||
|
(debug/track-warnings
|
||||||
|
(wrap-capture-window-error
|
||||||
|
(wrap-capture-console-error
|
||||||
|
#(with-mounted-component [error-boundary [comp1]]
|
||||||
|
(fn [c div]
|
||||||
|
(r/flush)
|
||||||
|
(is (= "Cannot read property 'foo' of null" (.-message @error)))
|
||||||
|
(is (found-in #"Something went wrong\." div))))))))))
|
||||||
|
|
||||||
(deftest test-dom-node
|
(deftest test-dom-node
|
||||||
(let [node (atom nil)
|
(let [node (atom nil)
|
||||||
ref (atom nil)
|
ref (atom nil)
|
||||||
@ -1032,6 +1078,6 @@
|
|||||||
(is (= @node nil))))
|
(is (= @node nil))))
|
||||||
|
|
||||||
(deftest style-property-names-are-camel-cased
|
(deftest style-property-names-are-camel-cased
|
||||||
(is (= "<div style=\"text-align:center;\">foo</div>"
|
(is (re-find #"<div style=\"text-align:center(;?)\">foo</div>"
|
||||||
(server/render-to-static-markup
|
(server/render-to-static-markup
|
||||||
[:div {:style {:text-align "center"}} "foo"]))))
|
[:div {:style {:text-align "center"}} "foo"]))))
|
||||||
|
@ -3,20 +3,32 @@
|
|||||||
[reagent.debug :refer-macros [dbg println log]]
|
[reagent.debug :refer-macros [dbg println log]]
|
||||||
[reagent.core :as r]))
|
[reagent.core :as r]))
|
||||||
|
|
||||||
(defn add-test-div [name]
|
|
||||||
(let [doc js/document
|
|
||||||
body (.-body js/document)
|
|
||||||
div (.createElement doc "div")]
|
|
||||||
(.appendChild body div)
|
|
||||||
div))
|
|
||||||
|
|
||||||
(defn with-mounted-component [comp f]
|
(defn with-mounted-component [comp f]
|
||||||
(when r/is-client
|
(when r/is-client
|
||||||
(let [div (add-test-div "_testreagent")]
|
(let [div (.createElement js/document "div")]
|
||||||
(let [comp (r/render comp div #(f comp div))]
|
(try
|
||||||
|
(let [c (r/render comp div)]
|
||||||
|
(f c div))
|
||||||
|
(finally
|
||||||
|
(r/unmount-component-at-node div)
|
||||||
|
(r/flush))))))
|
||||||
|
|
||||||
|
(defn with-mounted-component-async [comp done f]
|
||||||
|
(when r/is-client
|
||||||
|
(let [div (.createElement js/document "div")
|
||||||
|
c (r/render comp div)]
|
||||||
|
(f c div (fn []
|
||||||
(r/unmount-component-at-node div)
|
(r/unmount-component-at-node div)
|
||||||
(r/flush)
|
(r/flush)
|
||||||
(.removeChild (.-body js/document) div)))))
|
(done))))))
|
||||||
|
|
||||||
|
(defn run-fns-after-render [& fs]
|
||||||
|
((reduce (fn [cb f]
|
||||||
|
(fn []
|
||||||
|
(r/after-render (fn []
|
||||||
|
(f)
|
||||||
|
(cb)))))
|
||||||
|
(reverse fs))))
|
||||||
|
|
||||||
(defn found-in [re div]
|
(defn found-in [re div]
|
||||||
(let [res (.-innerHTML div)]
|
(let [res (.-innerHTML div)]
|
||||||
@ -129,52 +141,54 @@
|
|||||||
parent (fn []
|
parent (fn []
|
||||||
[child (r/wrap (:foo @state)
|
[child (r/wrap (:foo @state)
|
||||||
swap! state assoc :foo)])]
|
swap! state assoc :foo)])]
|
||||||
(with-mounted-component [parent]
|
(t/async done
|
||||||
(fn [c div]
|
(with-mounted-component-async [parent] done
|
||||||
|
(fn [c div done]
|
||||||
|
(run-fns-after-render
|
||||||
|
(fn []
|
||||||
(is (found-in #"value:1:" div))
|
(is (found-in #"value:1:" div))
|
||||||
(is (= @ran 1))
|
(is (= @ran 1))
|
||||||
|
|
||||||
(reset! @grand-state {:foobar 2})
|
(reset! @grand-state {:foobar 2}))
|
||||||
|
(fn []
|
||||||
(is (= @state {:foo {:bar {:foobar 2}}}))
|
(is (= @state {:foo {:bar {:foobar 2}}}))
|
||||||
(r/flush)
|
|
||||||
(is (= @ran 2))
|
(is (= @ran 2))
|
||||||
(is (found-in #"value:2:" div))
|
(is (found-in #"value:2:" div))
|
||||||
|
|
||||||
(swap! state update-in [:foo :bar] assoc :foobar 3)
|
(swap! state update-in [:foo :bar] assoc :foobar 3))
|
||||||
(r/flush)
|
(fn []
|
||||||
(is (= @ran 3))
|
(is (= @ran 3))
|
||||||
(is (found-in #"value:3:" div))
|
(is (found-in #"value:3:" div))
|
||||||
|
|
||||||
(reset! state {:foo {:bar {:foobar 3}}
|
(reset! state {:foo {:bar {:foobar 3}}
|
||||||
:foo1 {}})
|
:foo1 {}}))
|
||||||
(r/flush)
|
(fn []
|
||||||
(is (= @ran 3))
|
(is (= @ran 3))
|
||||||
|
(reset! @grand-state {:foobar 3}))
|
||||||
(reset! @grand-state {:foobar 3})
|
(fn []
|
||||||
(r/flush)
|
|
||||||
(is (= @ran 3))
|
(is (= @ran 3))
|
||||||
|
|
||||||
(reset! state {:foo {:bar {:foobar 2}}
|
(reset! state {:foo {:bar {:foobar 2}}
|
||||||
:foo2 {}})
|
:foo2 {}}))
|
||||||
(r/flush)
|
(fn []
|
||||||
(is (found-in #"value:2:" div))
|
(is (found-in #"value:2:" div))
|
||||||
(is (= @ran 4))
|
(is (= @ran 4))
|
||||||
|
|
||||||
(reset! @grand-state {:foobar 2})
|
(reset! @grand-state {:foobar 2}))
|
||||||
(r/flush)
|
(fn []
|
||||||
(is (found-in #"value:2:" div))
|
(is (found-in #"value:2:" div))
|
||||||
(is (= @ran 5))
|
(is (= @ran 5))
|
||||||
|
|
||||||
(reset! state {:foo {:bar {:foobar 4}}})
|
(reset! state {:foo {:bar {:foobar 4}}})
|
||||||
(reset! @grand-state {:foobar 4})
|
(reset! @grand-state {:foobar 4}))
|
||||||
(r/flush)
|
(fn []
|
||||||
(is (found-in #"value:4:" div))
|
(is (found-in #"value:4:" div))
|
||||||
(is (= @ran 6))
|
(is (= @ran 6))
|
||||||
|
|
||||||
(reset! @grand-state {:foobar 4})
|
(reset! @grand-state {:foobar 4}))
|
||||||
(r/flush)
|
(fn []
|
||||||
(is (found-in #"value:4:" div))
|
(is (found-in #"value:4:" div))
|
||||||
(is (= @ran 7)))))))
|
(is (= @ran 7)))
|
||||||
|
done)))))))
|
||||||
|
|
||||||
(deftest test-cursor
|
(deftest test-cursor
|
||||||
(let [state (r/atom {:a {:v 1}
|
(let [state (r/atom {:a {:v 1}
|
||||||
@ -188,27 +202,31 @@
|
|||||||
[:div
|
[:div
|
||||||
[derefer (r/cursor state [:a]) a-count]
|
[derefer (r/cursor state [:a]) a-count]
|
||||||
[derefer (r/cursor state [:b]) b-count]])]
|
[derefer (r/cursor state [:b]) b-count]])]
|
||||||
(with-mounted-component [comp]
|
(t/async done
|
||||||
(fn [c div]
|
(with-mounted-component-async [comp] done
|
||||||
|
(fn [c div done]
|
||||||
|
(run-fns-after-render
|
||||||
|
(fn []
|
||||||
(is (= @a-count 1))
|
(is (= @a-count 1))
|
||||||
(is (= @b-count 1))
|
(is (= @b-count 1))
|
||||||
|
|
||||||
|
|
||||||
(swap! state update-in [:a :v] inc)
|
(swap! state update-in [:a :v] inc)
|
||||||
(is (= @a-count 1))
|
(is (= @a-count 1)))
|
||||||
|
(fn []
|
||||||
(r/flush)
|
|
||||||
(is (= @a-count 2))
|
(is (= @a-count 2))
|
||||||
(is (= @b-count 1))
|
(is (= @b-count 1))
|
||||||
|
|
||||||
(reset! state {:a {:v 2} :b {:v 2}})
|
(reset! state {:a {:v 2} :b {:v 2}}))
|
||||||
(r/flush)
|
(fn []
|
||||||
(is (= @a-count 2))
|
(is (= @a-count 2))
|
||||||
(is (= @b-count 1))
|
(is (= @b-count 1))
|
||||||
|
|
||||||
(reset! state {:a {:v 3} :b {:v 2}})
|
(reset! state {:a {:v 3} :b {:v 2}}))
|
||||||
(r/flush)
|
(fn []
|
||||||
(is (= @a-count 3))
|
(is (= @a-count 3))
|
||||||
(is (= @b-count 1))))))
|
(is (= @b-count 1)))
|
||||||
|
done))))))
|
||||||
|
|
||||||
(deftest test-fn-cursor
|
(deftest test-fn-cursor
|
||||||
(let [state (r/atom {:a {:v 1}
|
(let [state (r/atom {:a {:v 1}
|
||||||
|
35
test/runners/karma.conf.js
Normal file
35
test/runners/karma.conf.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/* jshint strict: false */
|
||||||
|
/* globals configData */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Doo reads this file from classpath runners/karma.conf.js
|
||||||
|
* This sets up junit reporter.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var path = require('path');
|
||||||
|
|
||||||
|
// Doo writes this file to /tmp, so can't use relative require directly
|
||||||
|
var logger = require(process.cwd() + '/node_modules/karma/lib/logger.js');
|
||||||
|
|
||||||
|
module.exports = function(config) {
|
||||||
|
|
||||||
|
var suite = path.basename(process.cwd());
|
||||||
|
|
||||||
|
// Hide two unncessary warnings
|
||||||
|
logger.create('web-server', 'error');
|
||||||
|
logger.create('watcher', 'error');
|
||||||
|
|
||||||
|
configData.plugins = ['karma-*'];
|
||||||
|
|
||||||
|
configData.logLevel = config.LOG_WARN;
|
||||||
|
|
||||||
|
configData.reporters = ['dots', 'junit'];
|
||||||
|
configData.junitReporter = {
|
||||||
|
outputDir: (process.env.CIRCLE_TEST_REPORTS || 'junit'),
|
||||||
|
outputFile: suite + '.xml',
|
||||||
|
suite: suite, // suite will become the package name attribute in xml testsuite element
|
||||||
|
useBrowserName: false // add browser name to report and classes names
|
||||||
|
};
|
||||||
|
|
||||||
|
config.set(configData);
|
||||||
|
};
|
@ -1,23 +0,0 @@
|
|||||||
var path = require('path');
|
|
||||||
var webpack = require('webpack');
|
|
||||||
|
|
||||||
var prod = process.env.NODE_ENV === "production";
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
entry: './lib/modules.js',
|
|
||||||
output: {
|
|
||||||
path: "./target/webpack/",
|
|
||||||
filename: prod ? 'bundle.min.js' : 'bundle.js'
|
|
||||||
},
|
|
||||||
module: {
|
|
||||||
loaders: [
|
|
||||||
{ test: /.jsx?$/, loader: 'babel-loader', include: "./lib" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
new webpack.DefinePlugin(
|
|
||||||
{'process.env': { 'NODE_ENV': prod ? '"production"' : '"development"'}})
|
|
||||||
]
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user