diff --git a/test/spec/ci_spec.rb b/test/spec/ci_spec.rb new file mode 100644 index 0000000..9053e15 --- /dev/null +++ b/test/spec/ci_spec.rb @@ -0,0 +1,183 @@ +# frozen_string_literal: true + +require_relative 'spec_helper' + +RSpec.describe 'Clojure buildpack' do + it 'runs tests on Heroku CI' do + new_default_hatchet_runner('lein-2.x-with-uberjar').tap do |app| + app.run_ci do |test_run| + # First CI run should build from scratch + expect(clean_output(test_run.output)).to eq(<<~OUTPUT) + -----> Clojure (Leiningen 2) app detected + -----> Installing Azul Zulu OpenJDK $VERSION + -----> Installing Clojure 1.10.0.411 CLI tools + Downloading and expanding tar + Installing libs into /app/.heroku/clj/lib/clojure + Installing clojure and clj into /app/.heroku/clj/bin + Installing man pages into /app/.heroku/clj/share/man/man1 + Removing download + Use clj -h for help. + -----> Installing Leiningen + Downloading: leiningen-2.9.1-standalone.jar + Writing: lein script + -----> Building with Leiningen + Running: lein deps + Downloading Leiningen to /app/.lein/self-installs/leiningen-2.9.1-standalone.jar now... + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + Retrieving $DEPENDENCY from $REPO + -----> No test-setup command provided. Skipping. + -----> Running Clojure (Leiningen 2) buildpack tests... + Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 -XX:MaxRAM=2684354560 -XX:MaxRAMPercentage=80.0 + OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release. + Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 -XX:MaxRAM=2684354560 -XX:MaxRAMPercentage=80.0 + Compiling com.heroku.ci.core + $TIMESTAMP:INFO::main: Logging initialized @$TIMEms to org.eclipse.jetty.util.log.StdErrLog + Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 -XX:MaxRAM=2684354560 -XX:MaxRAMPercentage=80.0 + $TIMESTAMP:INFO::main: Logging initialized @$TIMEms to org.eclipse.jetty.util.log.StdErrLog + + lein test com.heroku.ci.core-test + + Ran 2 tests containing 2 assertions. + 0 failures, 0 errors. + -----> Clojure (Leiningen 2) buildpack tests completed successfully + OUTPUT + + test_run.run_again + + # Second CI run should use cached artifacts + expect(clean_output(test_run.output)).to eq(<<~OUTPUT) + -----> Clojure (Leiningen 2) app detected + -----> Installing Azul Zulu OpenJDK $VERSION + -----> Installing Clojure 1.10.0.411 CLI tools + Downloading and expanding tar + Installing libs into /app/.heroku/clj/lib/clojure + Installing clojure and clj into /app/.heroku/clj/bin + Installing man pages into /app/.heroku/clj/share/man/man1 + Removing download + Use clj -h for help. + -----> Using cached Leiningen 2.9.1 + Writing: lein script + -----> Building with Leiningen + Running: lein deps + Downloading Leiningen to /app/.lein/self-installs/leiningen-2.9.1-standalone.jar now... + -----> No test-setup command provided. Skipping. + -----> Running Clojure (Leiningen 2) buildpack tests... + Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 -XX:MaxRAM=2684354560 -XX:MaxRAMPercentage=80.0 + OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release. + Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 -XX:MaxRAM=2684354560 -XX:MaxRAMPercentage=80.0 + Compiling com.heroku.ci.core + $TIMESTAMP:INFO::main: Logging initialized @$TIMEms to org.eclipse.jetty.util.log.StdErrLog + Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 -XX:MaxRAM=2684354560 -XX:MaxRAMPercentage=80.0 + $TIMESTAMP:INFO::main: Logging initialized @$TIMEms to org.eclipse.jetty.util.log.StdErrLog + + lein test com.heroku.ci.core-test + + Ran 2 tests containing 2 assertions. + 0 failures, 0 errors. + -----> Clojure (Leiningen 2) buildpack tests completed successfully + OUTPUT + end + end + end +end diff --git a/test/spec/cljs_spec.rb b/test/spec/cljs_spec.rb deleted file mode 100644 index b787e97..0000000 --- a/test/spec/cljs_spec.rb +++ /dev/null @@ -1,39 +0,0 @@ -# frozen_string_literal: true - -require_relative 'spec_helper' - -describe 'ClojureScript' do - context "when using jdk-#{DEFAULT_OPENJDK_VERSION}" do - it 'deploys clojurescript-example successfully' do - new_default_hatchet_runner('clojurescript-example').tap do |app| - app.before_deploy do - java_version(DEFAULT_OPENJDK_VERSION) - end - - app.deploy do - expect(app.output).to match(/Installing (Heroku|Azul Zulu) OpenJDK #{DEFAULT_OPENJDK_VERSION}/) - expect(app.output).to match(/Downloading: leiningen-2.[5-9].[0-9]-standalone.jar/) - expect(app.output).to include('Running: lein uberjar') - - expect(http_get(app)).to include('Welcome from ClojureScript') - end - end - end - - it 'deploys cljs-lein-npm-example successfully' do - new_default_hatchet_runner('cljs-lein-npm-example').tap do |app| - app.before_deploy do - java_version(DEFAULT_OPENJDK_VERSION) - end - - app.deploy do - expect(app.output).to match(/Installing (Heroku|Azul Zulu) OpenJDK #{DEFAULT_OPENJDK_VERSION}/) - expect(app.output).to match(/Downloading: leiningen-2.[5-9].[0-9]-standalone.jar/) - expect(app.output).to include('Running: lein with-profile production do deps, compile :all') - - expect(http_get(app)).to include('Jokes') - end - end - end - end -end diff --git a/test/spec/compile_spec.rb b/test/spec/compile_spec.rb index 8142993..08d4024 100644 --- a/test/spec/compile_spec.rb +++ b/test/spec/compile_spec.rb @@ -2,33 +2,382 @@ require_relative 'spec_helper' -describe "Heroku's Clojure Support" do - it 'compiles a project without :min-lein-version with the default JDK version' do - new_default_hatchet_runner('test/spec/fixtures/repos/lein-1-jdk-8').tap do |app| +describe 'Clojure' do + it 'works with lein 2.x uberjar' do + new_default_hatchet_runner('lein-2.x-with-uberjar').tap do |app| app.deploy do - expect(app.output).to include('Installing Azul Zulu OpenJDK 1.8') - expect(app.output).to include('No :min-lein-version found in project.clj; using 1.7.1.') - expect(app.output).to include('To use Leiningen 2.x, add this to project.clj: :min-lein-version "2.0.0"') - expect(app.output).to include('Downloading: leiningen-1.7.1-standalone.jar') + expect(clean_output(app.output)).to eq(<<~OUTPUT) + remote: -----> Clojure (Leiningen 2) app detected + remote: -----> Installing Azul Zulu OpenJDK $VERSION + remote: -----> Installing Clojure 1.10.0.411 CLI tools + remote: Downloading and expanding tar + remote: Installing libs into $BUILD_DIR/.heroku/clj/lib/clojure + remote: Installing clojure and clj into $BUILD_DIR/.heroku/clj/bin + remote: Installing man pages into $BUILD_DIR/.heroku/clj/share/man/man1 + remote: Removing download + remote: Use clj -h for help. + remote: -----> Installing Leiningen + remote: Downloading: leiningen-2.9.1-standalone.jar + remote: Writing: lein script + remote: -----> Building with Leiningen + remote: Running: lein uberjar + remote: Downloading Leiningen to /app/.lein/self-installs/leiningen-2.9.1-standalone.jar now... + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Compiling com.heroku.ci.core + remote: $TIMESTAMP:INFO::main: Logging initialized @$TIMEms to org.eclipse.jetty.util.log.StdErrLog + remote: Compiling com.heroku.ci.core + remote: Created $BUILD_DIR/target/heroku-minimal-clojure-0.1.0.jar + remote: Created $BUILD_DIR/target/app-standalone.jar + remote: -----> Discovering process types + remote: Procfile declares types -> (none) + remote: Default types for buildpack -> web + + remote: -----> Compressing... + remote: Done: 115.4M + OUTPUT + + app.commit! + app.push! + + # Second build should use cached artifacts and doesn't recompile previously compiled application files + expect(clean_output(app.output)).to eq(<<~OUTPUT) + remote: -----> Clojure (Leiningen 2) app detected + remote: -----> Installing Azul Zulu OpenJDK $VERSION + remote: -----> Installing Clojure 1.10.0.411 CLI tools + remote: Downloading and expanding tar + remote: Installing libs into $BUILD_DIR/.heroku/clj/lib/clojure + remote: Installing clojure and clj into $BUILD_DIR/.heroku/clj/bin + remote: Installing man pages into $BUILD_DIR/.heroku/clj/share/man/man1 + remote: Removing download + remote: Use clj -h for help. + remote: -----> Using cached Leiningen 2.9.1 + remote: Writing: lein script + remote: -----> Building with Leiningen + remote: Running: lein uberjar + remote: Downloading Leiningen to /app/.lein/self-installs/leiningen-2.9.1-standalone.jar now... + remote: Compiling com.heroku.ci.core + remote: $TIMESTAMP:INFO::main: Logging initialized @$TIMEms to org.eclipse.jetty.util.log.StdErrLog + remote: Compiling com.heroku.ci.core + remote: Created $BUILD_DIR/target/heroku-minimal-clojure-0.1.0.jar + remote: Created $BUILD_DIR/target/app-standalone.jar + remote: -----> Discovering process types + remote: Procfile declares types -> (none) + remote: Default types for buildpack -> web + + remote: -----> Compressing... + remote: Done: 115.4M + OUTPUT + end + end + end + + it 'works with lein 2.x without uberjar' do + new_default_hatchet_runner('lein-2.x-no-uberjar').tap do |app| + app.deploy do + expect(clean_output(app.output)).to eq(<<~OUTPUT) + remote: -----> Clojure (Leiningen 2) app detected + remote: -----> Installing Azul Zulu OpenJDK $VERSION + remote: -----> Installing Clojure 1.10.0.411 CLI tools + remote: Downloading and expanding tar + remote: Installing libs into $BUILD_DIR/.heroku/clj/lib/clojure + remote: Installing clojure and clj into $BUILD_DIR/.heroku/clj/bin + remote: Installing man pages into $BUILD_DIR/.heroku/clj/share/man/man1 + remote: Removing download + remote: Use clj -h for help. + remote: -----> Installing Leiningen + remote: Downloading: leiningen-2.9.1-standalone.jar + remote: Writing: lein script + remote: -----> Building with Leiningen + remote: Running: lein with-profile production compile :all + remote: Downloading Leiningen to /app/.lein/self-installs/leiningen-2.9.1-standalone.jar now... + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Retrieving $DEPENDENCY from $REPO + remote: Compiling com.heroku.ci.core + remote: $TIMESTAMP:INFO::main: Logging initialized @$TIMEms to org.eclipse.jetty.util.log.StdErrLog + remote: -----> Discovering process types + remote: Procfile declares types -> (none) + remote: Default types for buildpack -> web + + remote: -----> Compressing... + remote: Done: 125.5M + OUTPUT + + app.commit! + app.push! + + # Second build should use cached artifacts and doesn't recompile previously compiled application files + expect(clean_output(app.output)).to eq(<<~OUTPUT) + remote: -----> Clojure (Leiningen 2) app detected + remote: -----> Installing Azul Zulu OpenJDK $VERSION + remote: -----> Installing Clojure 1.10.0.411 CLI tools + remote: Downloading and expanding tar + remote: Installing libs into $BUILD_DIR/.heroku/clj/lib/clojure + remote: Installing clojure and clj into $BUILD_DIR/.heroku/clj/bin + remote: Installing man pages into $BUILD_DIR/.heroku/clj/share/man/man1 + remote: Removing download + remote: Use clj -h for help. + remote: -----> Using cached Leiningen 2.9.1 + remote: Writing: lein script + remote: -----> Building with Leiningen + remote: Running: lein with-profile production compile :all + remote: Downloading Leiningen to /app/.lein/self-installs/leiningen-2.9.1-standalone.jar now... + remote: Compiling com.heroku.ci.core + remote: $TIMESTAMP:INFO::main: Logging initialized @$TIMEms to org.eclipse.jetty.util.log.StdErrLog + remote: -----> Discovering process types + remote: Procfile declares types -> (none) + remote: Default types for buildpack -> web + + remote: -----> Compressing... + remote: Done: 125.5M + OUTPUT + end + end + end + + it 'uses custom bin/build script when present' do + new_default_hatchet_runner('lein-2.x-with-uberjar').tap do |app| + app.before_deploy do + Dir.mkdir('bin') unless Dir.exist?('bin') + File.write('bin/build', <<~SCRIPT) + #!/usr/bin/env bash + echo "Running custom build script" + lein deps + SCRIPT + File.chmod(0755, 'bin/build') + end + + app.deploy do + expect(clean_output(app.output)).to include('Found bin/build; running it instead of default lein invocation.') + expect(clean_output(app.output)).to include('Running: bin/build') + expect(clean_output(app.output)).to include('Running custom build script') end end end - it 'compiles a project with :min-lein-version set to 2.0.0 with the default JDK version' do - new_default_hatchet_runner('test/spec/fixtures/repos/lein-2-jdk-8').tap do |app| + it 'detects and uses vendored leiningen from bin/lein' do + buildpack_root = File.expand_path('../..', __dir__) + new_default_hatchet_runner('lein-2.x-with-uberjar').tap do |app| + app.before_deploy do + Dir.mkdir('bin') unless Dir.exist?('bin') + # Create a working lein script based on opt/lein2 + lein_template_path = File.join(buildpack_root, 'opt/lein2') + lein_content = File.read(lein_template_path) + # Replace the version placeholder with actual version + lein_content.gsub!('##LEIN_VERSION##', '2.9.1') + File.write('bin/lein', lein_content) + File.chmod(0755, 'bin/lein') + end + app.deploy do - expect(app.output).to include('Installing Azul Zulu OpenJDK 1.8') - expect(app.output).to include('Downloading: leiningen-2.9.1-standalone.jar') - expect(app.output).not_to include('WARNING: no :min-lein-version found in project.clj; using 1.7.1.') + expect(clean_output(app.output)).to include('Using vendored Leiningen at bin/lein') end end end - it 'runs `lein uberjar` when the project has a :uberjar-name setting' do - new_default_hatchet_runner('test/spec/fixtures/repos/lein-2-jdk-8-uberjar').tap do |app| + it 'fails the build when lein compilation fails' do + new_default_hatchet_runner('lein-2.x-with-uberjar', allow_failure: true).tap do |app| + app.before_deploy do + File.write('src/com/heroku/ci/core.clj', '(this will not compile') + end + app.deploy do - expect(app.output).to include('Installing Azul Zulu OpenJDK 1.8') - expect(app.output).to include('Running: lein uberjar') + expect(app).not_to be_deployed + expect(app.output).to include('Failed to build.') end end end diff --git a/test/spec/compojure_spec.rb b/test/spec/compojure_spec.rb deleted file mode 100644 index 512cac1..0000000 --- a/test/spec/compojure_spec.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -require_relative 'spec_helper' - -describe 'Compojure' do - context "when using jdk-#{DEFAULT_OPENJDK_VERSION}" do - it 'deploys clojure-minimal successfully' do - new_default_hatchet_runner('clojure-minimal').tap do |app| - app.before_deploy do - java_version(DEFAULT_OPENJDK_VERSION) - end - - app.deploy do - expect(app.output).to match(/Installing (Heroku|Azul Zulu) OpenJDK #{DEFAULT_OPENJDK_VERSION}/) - expect(app.output).to match(/Downloading: leiningen-2.[0-9].[0-9]-standalone.jar/) - expect(app.output).to include('Running: lein uberjar') - expect(http_get(app)).to include('["Hello" :from Heroku]') - end - end - end - end -end diff --git a/test/spec/config_spec.rb b/test/spec/config_spec.rb new file mode 100644 index 0000000..e107435 --- /dev/null +++ b/test/spec/config_spec.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +require_relative 'spec_helper' + +RSpec.describe 'Clojure buildpack configuration' do + it 'respects LEIN_BUILD_TASK environment variable override' do + new_default_hatchet_runner('lein-2.x-with-uberjar').tap do |app| + app.before_deploy do + app.set_config('LEIN_BUILD_TASK' => 'deps') + end + + app.deploy do + expect(clean_output(app.output)).to include('Running: lein deps') + expect(clean_output(app.output)).not_to include('Running: lein uberjar') + end + end + end + + it 'respects CLOJURE_CLI_VERSION environment variable' do + new_default_hatchet_runner('lein-2.x-with-uberjar').tap do |app| + app.before_deploy do + app.set_config('CLOJURE_CLI_VERSION' => '1.11.1.1347') + end + + app.deploy do + expect(clean_output(app.output)).to include('Installing Clojure 1.11.1.1347 CLI tools') + end + end + end + + it 'respects BUILD_COMMAND environment variable override' do + new_default_hatchet_runner('lein-2.x-with-uberjar').tap do |app| + app.before_deploy do + app.set_config('BUILD_COMMAND' => 'echo "Custom build command executed" && lein deps') + end + + app.deploy do + expect(clean_output(app.output)).to include('Running: echo "Custom build command executed" && lein deps') + expect(clean_output(app.output)).to include('Custom build command executed') + expect(clean_output(app.output)).not_to include('Running: lein uberjar') + end + end + end +end diff --git a/test/spec/detection_spec.rb b/test/spec/detection_spec.rb new file mode 100644 index 0000000..19fcb30 --- /dev/null +++ b/test/spec/detection_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require_relative 'spec_helper' + +RSpec.describe 'Clojure buildpack detection' do + it 'shows error message when project.clj is missing' do + Hatchet::Runner.new('non-clojure-app', allow_failure: true).tap do |app| + app.deploy do + expect(app).not_to be_deployed + expect(clean_output(app.output)).to eq(<<~OUTPUT) + remote: -----> App not compatible with buildpack: $BUILDPACK_URL + remote: Could not find a 'project.clj' file! Please ensure it exists and is checked into Git. + + remote: More info: https://devcenter.heroku.com/articles/buildpacks#detection-failure + + remote: ! Push failed + OUTPUT + end + end + end +end diff --git a/test/spec/fixtures/repos/cljs-lein-npm-example/.gitignore b/test/spec/fixtures/repos/cljs-lein-npm-example/.gitignore deleted file mode 100644 index d845904..0000000 --- a/test/spec/fixtures/repos/cljs-lein-npm-example/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -/target -/classes -/checkouts -pom.xml -pom.xml.asc -*.jar -*.class -*~ -/.lein-* -/.nrepl-port -/resources/public/js/out -/logs -/node_modules -npm-debug.log -main.js -package.json -.idea diff --git a/test/spec/fixtures/repos/cljs-lein-npm-example/LICENSE b/test/spec/fixtures/repos/cljs-lein-npm-example/LICENSE deleted file mode 100644 index bf00aa6..0000000 --- a/test/spec/fixtures/repos/cljs-lein-npm-example/LICENSE +++ /dev/null @@ -1,215 +0,0 @@ -THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC -LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM -CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. - - -1. DEFINITIONS - -"Contribution" means: - -a) in the case of the initial Contributor, the initial code and -documentation distributed under this Agreement, and - -b) in the case of each subsequent Contributor: - -i) changes to the Program, and - -ii) additions to the Program; - -where such changes and/or additions to the Program originate from and are -distributed by that particular Contributor. A Contribution 'originates' from -a Contributor if it was added to the Program by such Contributor itself or -anyone acting on such Contributor's behalf. Contributions do not include -additions to the Program which: (i) are separate modules of software -distributed in conjunction with the Program under their own license -agreement, and (ii) are not derivative works of the Program. - -"Contributor" means any person or entity that distributes the Program. - -"Licensed Patents" mean patent claims licensable by a Contributor which are -necessarily infringed by the use or sale of its Contribution alone or when -combined with the Program. - -"Program" means the Contributions distributed in accordance with this -Agreement. - -"Recipient" means anyone who receives the Program under this Agreement, -including all Contributors. - -2. GRANT OF RIGHTS - -a) Subject to the terms of this Agreement, each Contributor hereby grants -Recipient a non-exclusive, worldwide, royalty-free copyright license to -reproduce, prepare derivative works of, publicly display, publicly perform, -distribute and sublicense the Contribution of such Contributor, if any, and -such derivative works, in source code and object code form. - -b) Subject to the terms of this Agreement, each Contributor hereby grants -Recipient a non-exclusive, worldwide, royalty-free patent license under -Licensed Patents to make, use, sell, offer to sell, import and otherwise -transfer the Contribution of such Contributor, if any, in source code and -object code form. This patent license shall apply to the combination of the -Contribution and the Program if, at the time the Contribution is added by the -Contributor, such addition of the Contribution causes such combination to be -covered by the Licensed Patents. The patent license shall not apply to any -other combinations which include the Contribution. No hardware per se is -licensed hereunder. - -c) Recipient understands that although each Contributor grants the licenses -to its Contributions set forth herein, no assurances are provided by any -Contributor that the Program does not infringe the patent or other -intellectual property rights of any other entity. Each Contributor disclaims -any liability to Recipient for claims brought by any other entity based on -infringement of intellectual property rights or otherwise. As a condition to -exercising the rights and licenses granted hereunder, each Recipient hereby -assumes sole responsibility to secure any other intellectual property rights -needed, if any. For example, if a third party patent license is required to -allow Recipient to distribute the Program, it is Recipient's responsibility -to acquire that license before distributing the Program. - -d) Each Contributor represents that to its knowledge it has sufficient -copyright rights in its Contribution, if any, to grant the copyright license -set forth in this Agreement. - -3. REQUIREMENTS - -A Contributor may choose to distribute the Program in object code form under -its own license agreement, provided that: - -a) it complies with the terms and conditions of this Agreement; and - -b) its license agreement: - -i) effectively disclaims on behalf of all Contributors all warranties and -conditions, express and implied, including warranties or conditions of title -and non-infringement, and implied warranties or conditions of merchantability -and fitness for a particular purpose; - -ii) effectively excludes on behalf of all Contributors all liability for -damages, including direct, indirect, special, incidental and consequential -damages, such as lost profits; - -iii) states that any provisions which differ from this Agreement are offered -by that Contributor alone and not by any other party; and - -iv) states that source code for the Program is available from such -Contributor, and informs licensees how to obtain it in a reasonable manner on -or through a medium customarily used for software exchange. - -When the Program is made available in source code form: - -a) it must be made available under this Agreement; and - -b) a copy of this Agreement must be included with each copy of the Program. - -Contributors may not remove or alter any copyright notices contained within -the Program. - -Each Contributor must identify itself as the originator of its Contribution, -if any, in a manner that reasonably allows subsequent Recipients to identify -the originator of the Contribution. - -4. COMMERCIAL DISTRIBUTION - -Commercial distributors of software may accept certain responsibilities with -respect to end users, business partners and the like. While this license is -intended to facilitate the commercial use of the Program, the Contributor who -includes the Program in a commercial product offering should do so in a -manner which does not create potential liability for other Contributors. -Therefore, if a Contributor includes the Program in a commercial product -offering, such Contributor ("Commercial Contributor") hereby agrees to defend -and indemnify every other Contributor ("Indemnified Contributor") against any -losses, damages and costs (collectively "Losses") arising from claims, -lawsuits and other legal actions brought by a third party against the -Indemnified Contributor to the extent caused by the acts or omissions of such -Commercial Contributor in connection with its distribution of the Program in -a commercial product offering. The obligations in this section do not apply -to any claims or Losses relating to any actual or alleged intellectual -property infringement. In order to qualify, an Indemnified Contributor must: -a) promptly notify the Commercial Contributor in writing of such claim, and -b) allow the Commercial Contributor tocontrol, and cooperate with the -Commercial Contributor in, the defense and any related settlement -negotiations. The Indemnified Contributor may participate in any such claim -at its own expense. - -For example, a Contributor might include the Program in a commercial product -offering, Product X. That Contributor is then a Commercial Contributor. If -that Commercial Contributor then makes performance claims, or offers -warranties related to Product X, those performance claims and warranties are -such Commercial Contributor's responsibility alone. Under this section, the -Commercial Contributor would have to defend claims against the other -Contributors related to those performance claims and warranties, and if a -court requires any other Contributor to pay any damages as a result, the -Commercial Contributor must pay those damages. - -5. NO WARRANTY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON -AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER -EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR -CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A -PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the -appropriateness of using and distributing the Program and assumes all risks -associated with its exercise of rights under this Agreement , including but -not limited to the risks and costs of program errors, compliance with -applicable laws, damage to or loss of data, programs or equipment, and -unavailability or interruption of operations. - -6. DISCLAIMER OF LIABILITY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY -CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION -LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE -EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY -OF SUCH DAMAGES. - -7. GENERAL - -If any provision of this Agreement is invalid or unenforceable under -applicable law, it shall not affect the validity or enforceability of the -remainder of the terms of this Agreement, and without further action by the -parties hereto, such provision shall be reformed to the minimum extent -necessary to make such provision valid and enforceable. - -If Recipient institutes patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Program itself -(excluding combinations of the Program with other software or hardware) -infringes such Recipient's patent(s), then such Recipient's rights granted -under Section 2(b) shall terminate as of the date such litigation is filed. - -All Recipient's rights under this Agreement shall terminate if it fails to -comply with any of the material terms or conditions of this Agreement and -does not cure such failure in a reasonable period of time after becoming -aware of such noncompliance. If all Recipient's rights under this Agreement -terminate, Recipient agrees to cease use and distribution of the Program as -soon as reasonably practicable. However, Recipient's obligations under this -Agreement and any licenses granted by Recipient relating to the Program shall -continue and survive. - -Everyone is permitted to copy and distribute copies of this Agreement, but in -order to avoid inconsistency the Agreement is copyrighted and may only be -modified in the following manner. The Agreement Steward reserves the right to -publish new versions (including revisions) of this Agreement from time to -time. No one other than the Agreement Steward has the right to modify this -Agreement. The Eclipse Foundation is the initial Agreement Steward. The -Eclipse Foundation may assign the responsibility to serve as the Agreement -Steward to a suitable separate entity. Each new version of the Agreement will -be given a distinguishing version number. The Program (including -Contributions) may always be distributed subject to the version of the -Agreement under which it was received. In addition, after a new version of -the Agreement is published, Contributor may elect to distribute the Program -(including its Contributions) under the new version. Except as expressly -stated in Sections 2(a) and 2(b) above, Recipient receives no rights or -licenses to the intellectual property of any Contributor under this -Agreement, whether expressly, by implication, estoppel or otherwise. All -rights in the Program not expressly granted under this Agreement are -reserved. - -This Agreement is governed by the laws of the State of Washington and the -intellectual property laws of the United States of America. No party to this -Agreement will bring a legal action under this Agreement more than one year -after the cause of action arose. Each party waives its rights to a jury trial -in any resulting litigation. diff --git a/test/spec/fixtures/repos/cljs-lein-npm-example/Procfile b/test/spec/fixtures/repos/cljs-lein-npm-example/Procfile deleted file mode 100644 index 8fbd1b9..0000000 --- a/test/spec/fixtures/repos/cljs-lein-npm-example/Procfile +++ /dev/null @@ -1 +0,0 @@ -web: node main.js diff --git a/test/spec/fixtures/repos/cljs-lein-npm-example/app.json b/test/spec/fixtures/repos/cljs-lein-npm-example/app.json deleted file mode 100644 index 305d635..0000000 --- a/test/spec/fixtures/repos/cljs-lein-npm-example/app.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Clojure lein-npm Example", - "description": "Sample ClojureScript app that uses lein-npm on Heroku.", - "website": "https://devcenter.heroku.com/articles/using-node-js-with-clojure-and-clojurescript-applications", - "repository": "https://github.com/kissaten/cljs-lein-npm-example", -} diff --git a/test/spec/fixtures/repos/cljs-lein-npm-example/project.clj b/test/spec/fixtures/repos/cljs-lein-npm-example/project.clj deleted file mode 100644 index 35a8310..0000000 --- a/test/spec/fixtures/repos/cljs-lein-npm-example/project.clj +++ /dev/null @@ -1,87 +0,0 @@ -(defproject cljsnode "0.1.1-SNAPSHOT" - :description "FIXME: write description" - :url "http://example.com/FIXME" - :license {:name "Eclipse Public License" - :url "http://www.eclipse.org/legal/epl-v10.html"} - - :dependencies [[org.clojure/clojure "1.7.0"] - [org.clojure/clojurescript "1.7.48"] - [org.clojure/core.async "0.1.346.0-17112a-alpha"] - [reagent "0.5.1"] - [kioo "0.4.1"]] - - :npm {:dependencies [[express "4.13.3"] - [xmlhttprequest "*"] - [xmldom "0.1.19"] - [source-map-support "*"] - [react "0.13.3"]] - :root :root} - - :plugins [[lein-cljsbuild "1.1.0"] - [lein-npm "0.6.1"]] - - :min-lein-version "2.1.2" - - :hooks [leiningen.cljsbuild] - - :aliases {"start" ["npm" "start"]} - - :main "main.js" - - :source-paths ["src/cljs"] - - :clean-targets ^{:protect false} [[:cljsbuild :builds :server :compiler :output-to] - [:cljsbuild :builds :app :compiler :output-dir] - "node_modules" - :target-path :compile-path] - - :figwheel {:http-server-root "public" - :css-dirs ["resources/public/css"] - :server-logfile "logs/figwheel.log"} - - :cljsbuild {:builds - {:app - {:source-paths ["src/browser" "src/cljs"] - :compiler {:output-to "resources/public/js/out/app.js" - :output-dir "resources/public/js/out" - :asset-path "js/out" - :main app.start - :optimizations :none}} - - :server - {:source-paths ["src/node" "src/cljs"] - :compiler {:target :nodejs - :output-to "main.js" - :output-dir "target" - :main server.core - :optimizations :none} - }}} - - :profiles {:dev - {:plugins - [[lein-figwheel "0.3.9"]] - :cljsbuild - {:builds - {:app - {:compiler {:pretty-print true} - :source-map true - :figwheel true} - :server - {:compiler {:pretty-print true} - :source-map true - :figwheel {:heads-up-display false}}}} - :npm {:dependencies [[ws "*"]]}} - - :prod - {:env {:production true} - :cljsbuild - {:builds - {:server - {:compiler {:optimizations :simple - :foreign-libs [{:file "src/node/polyfill/simple.js" - :provides ["polyfill.simple"]}] - :pretty-print false}} - :app - {:compiler {:output-dir "target/app/out" - :optimizations :advanced - :pretty-print false}}}}}}) diff --git a/test/spec/fixtures/repos/cljs-lein-npm-example/resources/css b/test/spec/fixtures/repos/cljs-lein-npm-example/resources/css deleted file mode 120000 index 261ec12..0000000 --- a/test/spec/fixtures/repos/cljs-lein-npm-example/resources/css +++ /dev/null @@ -1 +0,0 @@ -public/css \ No newline at end of file diff --git a/test/spec/fixtures/repos/cljs-lein-npm-example/resources/public/css/custom.css b/test/spec/fixtures/repos/cljs-lein-npm-example/resources/public/css/custom.css deleted file mode 100644 index fbb2961..0000000 --- a/test/spec/fixtures/repos/cljs-lein-npm-example/resources/public/css/custom.css +++ /dev/null @@ -1,33 +0,0 @@ - -#forkme img { - position: absolute; - top: 0; - right: 0; - border: 0; - z-index: 100; - width: 15em; - opacity: 0.6; -} - -#jokes { - font-size: larger; - margin-top: 1em; -} - -#jokes .well { - font-weight: bold; - min-height: 20em; - margin-bottom: 1em; - position: relative; -} - -.joke { - margin: 0.5em; - position: absolute; - top: 50%; - transform: translate(0, -50%); -} - - - - diff --git a/test/spec/fixtures/repos/cljs-lein-npm-example/resources/template.html b/test/spec/fixtures/repos/cljs-lein-npm-example/resources/template.html deleted file mode 100644 index d690ed1..0000000 --- a/test/spec/fixtures/repos/cljs-lein-npm-example/resources/template.html +++ /dev/null @@ -1,37 +0,0 @@ - - -
- - - - -
-
- abc
hello
"); - -;;(def frag2 (html-from-string "hello
")) -;;(def nodes2 (.-childNodes frag2)) -;;;; (append-nodes! node nodes) -;;(def doc2 (.-ownerDocument frag2)) -;;(def old (.item nodes2 1)) -;;(def fresh (.importNode doc2 old true)) -;;(.appendChild node fresh) - -(defn proto [obj] ;; likely same as getPrototypeOf - (.-__proto__ obj)) - -(defn prototype-instantiate [p] - (let [inst (fn [])] - (set! (.-prototype inst) p) - (set! (.-__proto__ inst) p) - inst)) - -(defn override-prototype [obj prototype & [type]] - (set! (.-prototype obj) - (merge - (if type (type-prototype type) #{}) - prototype)) - (set! (.-__proto__ obj) - (merge - (if type (proto type) #{}) - prototype)) - obj) - -(defn clone-merge ; rename to mutate-prototype or merge-prototype - ;; ... use clone-merge for one with only create? - "The object merged with the js prototype" - [type prototype] - ;; Object.assign is possibly the better choice but not yet in Node - ;; ## need to validate that this actually mutate shared prototype - ;; ## which may not be the case vs override-prototype - ;; ## need to copy the merge into the original object? - (let [combo (.create js/Object prototype (type-prototype type))] - (override-prototype type (type-prototype combo)))) - -(defn prototype-constructor [p] - (.-constructor p)) - -;; js/Node (used in Hickory) -;; Node.prototype in dom.js of xmldom: - -(def document-prototype - (prototype-of doc)) - -(def node-prototype ; apparently correct so dont change - (-> document-prototype proto)) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(deftype Node [] Object) -(override-prototype Node node-prototype (aget js/global "Node")) -(set! js/Node Node) -;(set! js/Node -; (clone-merge (or (aget js/global "Node") Node) -; node-prototype)) - -; for testing - from hickory -(defn extend-type-with-seqable - [t] - (extend-type t - ISeqable - (-seq [array] (array-seq array)))) - -;; (def doc2 (.parseFromString (new dom-parser) xhtml "application/xml")) -;; (extend-type-with-seqable Node) -;; (map identity (Node.)) -;; Now even an existing document should be seqable: -;; (map identity doc2) -;; Yes! Works... - -;; js/NodeList (used in hickory.core) - -(def nodelist-prototype (prototype-of (.-childNodes doc))) - -(deftype NodeList [] Object) -(override-prototype NodeList nodelist-prototype (aget js/global "NodeList")) -(set! js/NodeList NodeList) -;;(set! js/NodeList -;; (clone-merge (if (= js/undefined (aget js/global "NodeList")) -;; NodeList -;; (aget js/global "NodeList")) -;; nodelist-prototype)) - -(extend-type-with-seqable js/NodeList) ; test - -; (set! (.-innerHTML node) "hello
") - -;; .createHTMLDocument -;; createhtmldocument used in hickory -;; http://www.w3.org/TR/domcore/#dom-domimplementation-createhtmldocument - -(def Document (prototype-constructor document-prototype)) - -(defn create-document [] - (Document.)) - -(defn create-html-document [implementation & [title]] - ;; Per specification - (let [html (default-html-markup title) - doctype (.createDocumentType implementation "html") - doc (.createDocument implementation "" nil)] - (.appendChild doc (.importNode doc doctype)) - (append-html doc html) - (aset doc "hasFeature" (fn [] true)) ; specify instead? - doc)) - -;; consider specify instead -;; (specify (type dom-implementation) -;; createHTMLDocument -(aset (proto dom-implementation) "createHTMLDocument" - #(this-as this (create-html-document this %1))) - -;;; TEST: - -(def test-html "There's no page at the address you requested. If you entered it - by hand, check for typos. If you followed a link or a bookmark, - it may need to be updated.
- - diff --git a/test/spec/fixtures/repos/clojure-minimal/resources/500.html b/test/spec/fixtures/repos/clojure-minimal/resources/500.html deleted file mode 100644 index cb6474f..0000000 --- a/test/spec/fixtures/repos/clojure-minimal/resources/500.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - -Something went wrong. Try again, and if the problem persists - please contact support.
- - diff --git a/test/spec/fixtures/repos/clojure-minimal/src/clojure_getting_started/web.clj b/test/spec/fixtures/repos/clojure-minimal/src/clojure_getting_started/web.clj deleted file mode 100644 index 1f53c5d..0000000 --- a/test/spec/fixtures/repos/clojure-minimal/src/clojure_getting_started/web.clj +++ /dev/null @@ -1,30 +0,0 @@ -(ns clojure-getting-started.web - (:require [compojure.core :refer [defroutes GET PUT POST DELETE ANY]] - [compojure.handler :refer [site]] - [compojure.route :as route] - [clojure.java.io :as io] - [ring.adapter.jetty :as jetty] - [environ.core :refer [env]])) - -(defn splash [] - {:status 200 - :headers {"Content-Type" "text/plain"} - :body (pr-str ["Hello" :from 'Heroku])}) - -(defn request-id-filter [request]) - -(defroutes app - (ANY "*" {:keys [headers params body] :as request} - (println (format "request_id=%s" (get headers "x-request-id")))) - (GET "/" [] - (splash)) - (ANY "*" [] - (route/not-found (slurp (io/resource "404.html"))))) - -(defn -main [& [port]] - (let [port (Integer. (or port (env :port) 5000))] - (jetty/run-jetty (site #'app) {:port port :join? false}))) - -;; For interactive development: -;; (.stop server) -;; (def server (-main)) diff --git a/test/spec/fixtures/repos/clojure-minimal/system.properties b/test/spec/fixtures/repos/clojure-minimal/system.properties deleted file mode 100644 index 221ae01..0000000 --- a/test/spec/fixtures/repos/clojure-minimal/system.properties +++ /dev/null @@ -1 +0,0 @@ -java.runtime.version=8 diff --git a/test/spec/fixtures/repos/clojure-minimal/test/clojure_getting_started/web_test.clj b/test/spec/fixtures/repos/clojure-minimal/test/clojure_getting_started/web_test.clj deleted file mode 100644 index ac12c8d..0000000 --- a/test/spec/fixtures/repos/clojure-minimal/test/clojure_getting_started/web_test.clj +++ /dev/null @@ -1,6 +0,0 @@ -(ns clojure-getting-started.web-test - (:require [clojure.test :refer :all] - [clojure-getting-started.web :refer :all])) - -(deftest first-test - (is false "Tests should be written")) diff --git a/test/spec/fixtures/repos/clojurescript-example/.gitignore b/test/spec/fixtures/repos/clojurescript-example/.gitignore deleted file mode 100644 index 7a153d3..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -/target -/classes -/checkouts -pom.xml -pom.xml.asc -*.jar -*.class -/.lein-* -/.nrepl-port -/resources/public/js -/out -/.repl diff --git a/test/spec/fixtures/repos/clojurescript-example/LICENSE b/test/spec/fixtures/repos/clojurescript-example/LICENSE deleted file mode 100644 index 7689f30..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/LICENSE +++ /dev/null @@ -1,214 +0,0 @@ -THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC -LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM -CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. - -1. DEFINITIONS - -"Contribution" means: - -a) in the case of the initial Contributor, the initial code and -documentation distributed under this Agreement, and - -b) in the case of each subsequent Contributor: - -i) changes to the Program, and - -ii) additions to the Program; - -where such changes and/or additions to the Program originate from and are -distributed by that particular Contributor. A Contribution 'originates' from -a Contributor if it was added to the Program by such Contributor itself or -anyone acting on such Contributor's behalf. Contributions do not include -additions to the Program which: (i) are separate modules of software -distributed in conjunction with the Program under their own license -agreement, and (ii) are not derivative works of the Program. - -"Contributor" means any person or entity that distributes the Program. - -"Licensed Patents" mean patent claims licensable by a Contributor which are -necessarily infringed by the use or sale of its Contribution alone or when -combined with the Program. - -"Program" means the Contributions distributed in accordance with this -Agreement. - -"Recipient" means anyone who receives the Program under this Agreement, -including all Contributors. - -2. GRANT OF RIGHTS - -a) Subject to the terms of this Agreement, each Contributor hereby grants -Recipient a non-exclusive, worldwide, royalty-free copyright license to -reproduce, prepare derivative works of, publicly display, publicly perform, -distribute and sublicense the Contribution of such Contributor, if any, and -such derivative works, in source code and object code form. - -b) Subject to the terms of this Agreement, each Contributor hereby grants -Recipient a non-exclusive, worldwide, royalty-free patent license under -Licensed Patents to make, use, sell, offer to sell, import and otherwise -transfer the Contribution of such Contributor, if any, in source code and -object code form. This patent license shall apply to the combination of the -Contribution and the Program if, at the time the Contribution is added by the -Contributor, such addition of the Contribution causes such combination to be -covered by the Licensed Patents. The patent license shall not apply to any -other combinations which include the Contribution. No hardware per se is -licensed hereunder. - -c) Recipient understands that although each Contributor grants the licenses -to its Contributions set forth herein, no assurances are provided by any -Contributor that the Program does not infringe the patent or other -intellectual property rights of any other entity. Each Contributor disclaims -any liability to Recipient for claims brought by any other entity based on -infringement of intellectual property rights or otherwise. As a condition to -exercising the rights and licenses granted hereunder, each Recipient hereby -assumes sole responsibility to secure any other intellectual property rights -needed, if any. For example, if a third party patent license is required to -allow Recipient to distribute the Program, it is Recipient's responsibility -to acquire that license before distributing the Program. - -d) Each Contributor represents that to its knowledge it has sufficient -copyright rights in its Contribution, if any, to grant the copyright license -set forth in this Agreement. - -3. REQUIREMENTS - -A Contributor may choose to distribute the Program in object code form under -its own license agreement, provided that: - -a) it complies with the terms and conditions of this Agreement; and - -b) its license agreement: - -i) effectively disclaims on behalf of all Contributors all warranties and -conditions, express and implied, including warranties or conditions of title -and non-infringement, and implied warranties or conditions of merchantability -and fitness for a particular purpose; - -ii) effectively excludes on behalf of all Contributors all liability for -damages, including direct, indirect, special, incidental and consequential -damages, such as lost profits; - -iii) states that any provisions which differ from this Agreement are offered -by that Contributor alone and not by any other party; and - -iv) states that source code for the Program is available from such -Contributor, and informs licensees how to obtain it in a reasonable manner on -or through a medium customarily used for software exchange. - -When the Program is made available in source code form: - -a) it must be made available under this Agreement; and - -b) a copy of this Agreement must be included with each copy of the Program. - -Contributors may not remove or alter any copyright notices contained within -the Program. - -Each Contributor must identify itself as the originator of its Contribution, -if any, in a manner that reasonably allows subsequent Recipients to identify -the originator of the Contribution. - -4. COMMERCIAL DISTRIBUTION - -Commercial distributors of software may accept certain responsibilities with -respect to end users, business partners and the like. While this license is -intended to facilitate the commercial use of the Program, the Contributor who -includes the Program in a commercial product offering should do so in a -manner which does not create potential liability for other Contributors. -Therefore, if a Contributor includes the Program in a commercial product -offering, such Contributor ("Commercial Contributor") hereby agrees to defend -and indemnify every other Contributor ("Indemnified Contributor") against any -losses, damages and costs (collectively "Losses") arising from claims, -lawsuits and other legal actions brought by a third party against the -Indemnified Contributor to the extent caused by the acts or omissions of such -Commercial Contributor in connection with its distribution of the Program in -a commercial product offering. The obligations in this section do not apply -to any claims or Losses relating to any actual or alleged intellectual -property infringement. In order to qualify, an Indemnified Contributor must: -a) promptly notify the Commercial Contributor in writing of such claim, and -b) allow the Commercial Contributor tocontrol, and cooperate with the -Commercial Contributor in, the defense and any related settlement -negotiations. The Indemnified Contributor may participate in any such claim -at its own expense. - -For example, a Contributor might include the Program in a commercial product -offering, Product X. That Contributor is then a Commercial Contributor. If -that Commercial Contributor then makes performance claims, or offers -warranties related to Product X, those performance claims and warranties are -such Commercial Contributor's responsibility alone. Under this section, the -Commercial Contributor would have to defend claims against the other -Contributors related to those performance claims and warranties, and if a -court requires any other Contributor to pay any damages as a result, the -Commercial Contributor must pay those damages. - -5. NO WARRANTY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON -AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER -EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR -CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A -PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the -appropriateness of using and distributing the Program and assumes all risks -associated with its exercise of rights under this Agreement , including but -not limited to the risks and costs of program errors, compliance with -applicable laws, damage to or loss of data, programs or equipment, and -unavailability or interruption of operations. - -6. DISCLAIMER OF LIABILITY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY -CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION -LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE -EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY -OF SUCH DAMAGES. - -7. GENERAL - -If any provision of this Agreement is invalid or unenforceable under -applicable law, it shall not affect the validity or enforceability of the -remainder of the terms of this Agreement, and without further action by the -parties hereto, such provision shall be reformed to the minimum extent -necessary to make such provision valid and enforceable. - -If Recipient institutes patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Program itself -(excluding combinations of the Program with other software or hardware) -infringes such Recipient's patent(s), then such Recipient's rights granted -under Section 2(b) shall terminate as of the date such litigation is filed. - -All Recipient's rights under this Agreement shall terminate if it fails to -comply with any of the material terms or conditions of this Agreement and -does not cure such failure in a reasonable period of time after becoming -aware of such noncompliance. If all Recipient's rights under this Agreement -terminate, Recipient agrees to cease use and distribution of the Program as -soon as reasonably practicable. However, Recipient's obligations under this -Agreement and any licenses granted by Recipient relating to the Program shall -continue and survive. - -Everyone is permitted to copy and distribute copies of this Agreement, but in -order to avoid inconsistency the Agreement is copyrighted and may only be -modified in the following manner. The Agreement Steward reserves the right to -publish new versions (including revisions) of this Agreement from time to -time. No one other than the Agreement Steward has the right to modify this -Agreement. The Eclipse Foundation is the initial Agreement Steward. The -Eclipse Foundation may assign the responsibility to serve as the Agreement -Steward to a suitable separate entity. Each new version of the Agreement will -be given a distinguishing version number. The Program (including -Contributions) may always be distributed subject to the version of the -Agreement under which it was received. In addition, after a new version of -the Agreement is published, Contributor may elect to distribute the Program -(including its Contributions) under the new version. Except as expressly -stated in Sections 2(a) and 2(b) above, Recipient receives no rights or -licenses to the intellectual property of any Contributor under this -Agreement, whether expressly, by implication, estoppel or otherwise. All -rights in the Program not expressly granted under this Agreement are -reserved. - -This Agreement is governed by the laws of the State of New York and the -intellectual property laws of the United States of America. No party to this -Agreement will bring a legal action under this Agreement more than one year -after the cause of action arose. Each party waives its rights to a jury trial -in any resulting litigation. diff --git a/test/spec/fixtures/repos/clojurescript-example/Procfile b/test/spec/fixtures/repos/clojurescript-example/Procfile deleted file mode 100644 index 7741d2a..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/Procfile +++ /dev/null @@ -1 +0,0 @@ -web: java $JVM_OPTS -cp target/my-app.jar clojure.main -m my-app.server diff --git a/test/spec/fixtures/repos/clojurescript-example/code_of_conduct.md b/test/spec/fixtures/repos/clojurescript-example/code_of_conduct.md deleted file mode 100644 index 8108287..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/code_of_conduct.md +++ /dev/null @@ -1,32 +0,0 @@ -# Contributor Code of Conduct - -As contributors and maintainers of this project, we pledge to respect -all people who contribute through reporting issues, posting feature -requests, updating documentation, submitting pull requests or patches, -and other activities. - -We are committed to making participation in this project a -harassment-free experience for everyone, regardless of level of -experience, gender, gender identity and expression, sexual -orientation, disability, personal appearance, body size, race, age, or -religion. - -Examples of unacceptable behavior by participants include the use of -sexual language or imagery, derogatory comments or personal attacks, -trolling, public or private harassment, insults, or other -unprofessional conduct. - -Project maintainers have the right and responsibility to remove, edit, -or reject comments, commits, code, wiki edits, issues, and other -contributions that are not aligned to this Code of Conduct. Project -maintainers who do not follow the Code of Conduct may be removed from -the project team. - -Instances of abusive, harassing, or otherwise unacceptable behavior -may be reported by opening an issue or contacting one or more of the -project maintainers. - -This Code of Conduct is adapted from the -[Contributor Covenant](http:contributor-covenant.org), version 1.0.0, -available at -[http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/) diff --git a/test/spec/fixtures/repos/clojurescript-example/env/dev/clj/my_app/dev.clj b/test/spec/fixtures/repos/clojurescript-example/env/dev/clj/my_app/dev.clj deleted file mode 100644 index c5fcd66..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/env/dev/clj/my_app/dev.clj +++ /dev/null @@ -1,34 +0,0 @@ -(ns my-app.dev - (:require [environ.core :refer [env]] - [net.cgrand.enlive-html :refer [set-attr prepend append html]] - [cemerick.piggieback :as piggieback] - [weasel.repl.websocket :as weasel] - [figwheel-sidecar.auto-builder :as fig-auto] - [figwheel-sidecar.core :as fig] - [clojurescript-build.auto :as auto] - [clojure.java.shell :refer [sh]])) - -(def is-dev? (env :is-dev)) - -(def inject-devmode-html - (comp - (set-attr :class "is-dev") - (prepend (html [:script {:type "text/javascript" :src "/js/out/goog/base.js"}])) - (append (html [:script {:type "text/javascript"} "goog.require('my_app.main')"])))) - -(defn browser-repl [] - (let [repl-env (weasel/repl-env :ip "0.0.0.0" :port 9001)] - (piggieback/cljs-repl :repl-env repl-env))) - -(defn start-figwheel [] - (let [server (fig/start-server { :css-dirs ["resources/public/css"] }) - config {:builds [{:id "dev" - :source-paths ["src/cljs" "env/dev/cljs"] - :compiler {:output-to "resources/public/js/app.js" - :output-dir "resources/public/js/out" - :source-map true - :optimizations :none - :source-map-timestamp true - :preamble ["react/react.min.js"]}}] - :figwheel-server server}] - (fig-auto/autobuild* config))) diff --git a/test/spec/fixtures/repos/clojurescript-example/env/dev/cljs/my_app/main.cljs b/test/spec/fixtures/repos/clojurescript-example/env/dev/cljs/my_app/main.cljs deleted file mode 100644 index b786a6a..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/env/dev/cljs/my_app/main.cljs +++ /dev/null @@ -1,14 +0,0 @@ -(ns my-app.main - (:require [my-app.core :as core] - [figwheel.client :as figwheel :include-macros true] - [cljs.core.async :refer [put!]] - [weasel.repl :as weasel])) - -(figwheel/watch-and-reload - :websocket-url "ws://localhost:3449/figwheel-ws" - :jsload-callback (fn [] - (core/main))) - -(weasel/connect "ws://localhost:9001" :verbose true :print #{:repl :console}) - -(core/main) diff --git a/test/spec/fixtures/repos/clojurescript-example/env/prod/clj/my_app/dev.clj b/test/spec/fixtures/repos/clojurescript-example/env/prod/clj/my_app/dev.clj deleted file mode 100644 index b2cc131..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/env/prod/clj/my_app/dev.clj +++ /dev/null @@ -1,14 +0,0 @@ -(ns my-app.dev - (:require [environ.core :refer [env]])) - -(if (env :is-dev) - (throw (Exception. (str "Production environment code is being loaded while the dev environment is active. " - "You likely have compiled class files lying around from an uberjar build. " - "Remove the target/ directory and try again.")))) - -(def is-dev? false) -(def inject-devmode-html identity) -(defn browser-repl [] - (throw (Exception. "Browser connected REPL is not available in prod mode"))) -(defn start-figwheel [] - (throw (Exception. "Figwheel is not available in prod mode"))) diff --git a/test/spec/fixtures/repos/clojurescript-example/env/prod/cljs/my_app/main.cljs b/test/spec/fixtures/repos/clojurescript-example/env/prod/cljs/my_app/main.cljs deleted file mode 100644 index 8d83a76..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/env/prod/cljs/my_app/main.cljs +++ /dev/null @@ -1,4 +0,0 @@ -(ns my-app.main - (:require [my-app.core :as core])) - -(core/main) diff --git a/test/spec/fixtures/repos/clojurescript-example/env/test/js/polyfill.js b/test/spec/fixtures/repos/clojurescript-example/env/test/js/polyfill.js deleted file mode 100644 index ca8d384..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/env/test/js/polyfill.js +++ /dev/null @@ -1,24 +0,0 @@ -if (!Function.prototype.bind) { - Function.prototype.bind = function(oThis) { - if (typeof this !== 'function') { - // closest thing possible to the ECMAScript 5 - // internal IsCallable function - throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable'); - } - - var aArgs = Array.prototype.slice.call(arguments, 1), - fToBind = this, - fNOP = function() {}, - fBound = function() { - return fToBind.apply(this instanceof fNOP && oThis - ? this - : oThis, - aArgs.concat(Array.prototype.slice.call(arguments))); - }; - - fNOP.prototype = this.prototype; - fBound.prototype = new fNOP(); - - return fBound; - }; -} diff --git a/test/spec/fixtures/repos/clojurescript-example/env/test/js/unit-test.js b/test/spec/fixtures/repos/clojurescript-example/env/test/js/unit-test.js deleted file mode 100644 index bb56975..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/env/test/js/unit-test.js +++ /dev/null @@ -1,42 +0,0 @@ -var page = require('webpage').create(); -var url; - -if (phantom.args) { - url = phantom.args[0]; -} else { - url = require('system').args[1]; -} - -page.onConsoleMessage = function (message) { - console.log(message); -}; - -function exit(code) { - setTimeout(function(){ phantom.exit(code); }, 0); - phantom.onError = function(){}; -} - -console.log("Loading URL: " + url); - -page.open(url, function (status) { - if (status != "success") { - console.log('Failed to open ' + url); - phantom.exit(1); - } - - console.log("Running test."); - - var result = page.evaluate(function() { - return my_app.test_runner.runner(); - }); - - if (result != 0) { - console.log("*** Test failed! ***"); - exit(1); - } - else { - console.log("Test succeeded."); - exit(0); - } - -}); diff --git a/test/spec/fixtures/repos/clojurescript-example/env/test/unit-test.html b/test/spec/fixtures/repos/clojurescript-example/env/test/unit-test.html deleted file mode 100644 index 4da05bb..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/env/test/unit-test.html +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/test/spec/fixtures/repos/clojurescript-example/project.clj b/test/spec/fixtures/repos/clojurescript-example/project.clj deleted file mode 100644 index c1f5c2b..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/project.clj +++ /dev/null @@ -1,75 +0,0 @@ -(defproject my-app "0.1.0-SNAPSHOT" - :description "FIXME: write description" - :url "http://example.com/FIXME" - :license {:name "Eclipse Public License" - :url "http://www.eclipse.org/legal/epl-v10.html"} - - :source-paths ["src/clj"] - - :test-paths ["test/clj"] - - :dependencies [[org.clojure/clojure "1.6.0"] - [org.clojure/clojurescript "0.0-3058" :scope "provided"] - [ring "1.3.2"] - [ring/ring-defaults "0.1.4"] - [compojure "1.3.2"] - [enlive "1.1.6"] - [org.omcljs/om "0.8.8"] - [environ "1.0.0"]] - - :plugins [[lein-cljsbuild "1.0.5"] - [lein-environ "1.0.0"]] - - :min-lein-version "2.5.0" - - :uberjar-name "my-app.jar" - - :cljsbuild {:builds {:app {:source-paths ["src/cljs"] - :compiler {:output-to "resources/public/js/app.js" - :output-dir "resources/public/js/out" - :source-map "resources/public/js/out.js.map" - :preamble ["react/react.min.js"] - :optimizations :none - :pretty-print true}}}} - - :profiles {:dev {:source-paths ["env/dev/clj"] - :test-paths ["test/clj"] - - :dependencies [[figwheel "0.2.5"] - [figwheel-sidecar "0.2.5"] - [com.cemerick/piggieback "0.1.5"] - [weasel "0.6.0"]] - - :repl-options {:init-ns my-app.server - :nrepl-middleware [cemerick.piggieback/wrap-cljs-repl]} - - :plugins [[lein-figwheel "0.2.5"]] - - :figwheel {:http-server-root "public" - :server-port 3449 - :css-dirs ["resources/public/css"] - :ring-handler my-app.server/http-handler} - - :env {:is-dev true} - - :cljsbuild {:test-commands { "test" ["phantomjs" "env/test/js/unit-test.js" "env/test/unit-test.html"] } - :builds {:app {:source-paths ["env/dev/cljs"]} - :test {:source-paths ["src/cljs" "test/cljs"] - :compiler {:output-to "resources/public/js/app_test.js" - :output-dir "resources/public/js/test" - :source-map "resources/public/js/test.js.map" - :preamble ["react/react.min.js"] - :optimizations :whitespace - :pretty-print false}}}}} - - :uberjar {:source-paths ["env/prod/clj"] - :hooks [leiningen.cljsbuild] - :env {:production true} - :omit-source true - :aot :all - :main my-app.server - :cljsbuild {:builds {:app - {:source-paths ["env/prod/cljs"] - :compiler - {:optimizations :advanced - :pretty-print false}}}}}}) diff --git a/test/spec/fixtures/repos/clojurescript-example/resources/index.html b/test/spec/fixtures/repos/clojurescript-example/resources/index.html deleted file mode 100644 index a8d1f98..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/resources/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - Welcome from ClojureScript - - - - diff --git a/test/spec/fixtures/repos/clojurescript-example/resources/public/css/style.css b/test/spec/fixtures/repos/clojurescript-example/resources/public/css/style.css deleted file mode 100644 index b2d3dc0..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/resources/public/css/style.css +++ /dev/null @@ -1,3 +0,0 @@ -h1 { - text-decoration: underline; -} diff --git a/test/spec/fixtures/repos/clojurescript-example/src/clj/my_app/server.clj b/test/spec/fixtures/repos/clojurescript-example/src/clj/my_app/server.clj deleted file mode 100644 index 5b4074e..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/src/clj/my_app/server.clj +++ /dev/null @@ -1,42 +0,0 @@ -(ns my-app.server - (:require [clojure.java.io :as io] - [my-app.dev :refer [is-dev? inject-devmode-html browser-repl start-figwheel]] - [compojure.core :refer [GET defroutes]] - [compojure.route :refer [resources]] - [net.cgrand.enlive-html :refer [deftemplate]] - [net.cgrand.reload :refer [auto-reload]] - [ring.middleware.reload :as reload] - [ring.middleware.defaults :refer [wrap-defaults api-defaults]] - [environ.core :refer [env]] - [ring.adapter.jetty :refer [run-jetty]]) - (:gen-class)) - -(deftemplate page (io/resource "index.html") [] - [:body] (if is-dev? inject-devmode-html identity)) - -(defroutes routes - (resources "/") - (resources "/react" {:root "react"}) - (GET "/*" req (page))) - -(def http-handler - (if is-dev? - (reload/wrap-reload (wrap-defaults #'routes api-defaults)) - (wrap-defaults routes api-defaults))) - -(defn run-web-server [& [port]] - (let [port (Integer. (or port (env :port) 10555))] - (println (format "Starting web server on port %d." port)) - (run-jetty http-handler {:port port :join? false}))) - -(defn run-auto-reload [& [port]] - (auto-reload *ns*) - (start-figwheel)) - -(defn run [& [port]] - (when is-dev? - (run-auto-reload)) - (run-web-server port)) - -(defn -main [& [port]] - (run port)) diff --git a/test/spec/fixtures/repos/clojurescript-example/src/cljs/my_app/core.cljs b/test/spec/fixtures/repos/clojurescript-example/src/cljs/my_app/core.cljs deleted file mode 100644 index 927bc50..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/src/cljs/my_app/core.cljs +++ /dev/null @@ -1,35 +0,0 @@ -(ns my-app.core - (:require [om.core :as om :include-macros true] - [om.dom :as dom :include-macros true])) - -(enable-console-print!) - -(defonce app-state - (atom - {:contacts - [{:first "Ben" :last "Bitdiddle" :email "benb@mit.edu"} - {:first "Lem" :middle-initial "E" :last "Tweakit" :email "morebugs@mit.edu"}]})) - -(defn display-name [{:keys [first last] :as contact}] - (str last ", " first)) - -(defn contact-view [contact owner] - (reify - om/IRender - (render [this] - (dom/li nil (display-name contact))))) - -(defn contacts-view [data owner] - (reify - om/IRender - (render [this] - (dom/div nil - (dom/h2 nil "Contact list") - (apply dom/ul nil - (om/build-all contact-view (:contacts data))))))) - -(defn main [] - (om/root - contacts-view - app-state - {:target (. js/document (getElementById "app"))})) diff --git a/test/spec/fixtures/repos/clojurescript-example/system.properties b/test/spec/fixtures/repos/clojurescript-example/system.properties deleted file mode 100644 index 1863114..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/system.properties +++ /dev/null @@ -1,2 +0,0 @@ - -java.runtime.version=8 diff --git a/test/spec/fixtures/repos/clojurescript-example/test/clj/my_app/example_test.clj b/test/spec/fixtures/repos/clojurescript-example/test/clj/my_app/example_test.clj deleted file mode 100644 index c38bf86..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/test/clj/my_app/example_test.clj +++ /dev/null @@ -1,5 +0,0 @@ -(ns my_app.example-test - (:require [clojure.test :refer :all])) - -(deftest example-passing-test - (is (= 1 1))) diff --git a/test/spec/fixtures/repos/clojurescript-example/test/cljs/my_app/core-test.cljs b/test/spec/fixtures/repos/clojurescript-example/test/cljs/my_app/core-test.cljs deleted file mode 100644 index 73830b6..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/test/cljs/my_app/core-test.cljs +++ /dev/null @@ -1,6 +0,0 @@ -(ns my_app.core-test - (:require-macros [cljs.test :refer (is deftest testing)]) - (:require [cljs.test])) - -(deftest example-passing-test - (is (= 1 1))) diff --git a/test/spec/fixtures/repos/clojurescript-example/test/cljs/my_app/test-runner.cljs b/test/spec/fixtures/repos/clojurescript-example/test/cljs/my_app/test-runner.cljs deleted file mode 100644 index 0717b83..0000000 --- a/test/spec/fixtures/repos/clojurescript-example/test/cljs/my_app/test-runner.cljs +++ /dev/null @@ -1,13 +0,0 @@ -(ns my_app.test-runner - (:require - [cljs.test :refer-macros [run-tests]] - [my_app.core-test])) - -(enable-console-print!) - -(defn runner [] - (if (cljs.test/successful? - (run-tests - 'my_app.core-test)) - 0 - 1)) diff --git a/test/spec/fixtures/repos/immutant-feature-demo/.gitignore b/test/spec/fixtures/repos/immutant-feature-demo/.gitignore deleted file mode 100644 index aaa73be..0000000 --- a/test/spec/fixtures/repos/immutant-feature-demo/.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -/target -/lib -/classes -/checkouts -/.descriptors -pom.xml -pom.xml.asc -*.jar -*.class -.lein-deps-sum -.lein-failures -.lein-plugins -.lein-repl-history -/.nrepl-port -wildfly-* -hornetq-data \ No newline at end of file diff --git a/test/spec/fixtures/repos/immutant-feature-demo/.openshift/.leinrc b/test/spec/fixtures/repos/immutant-feature-demo/.openshift/.leinrc deleted file mode 100644 index f29fdfe..0000000 --- a/test/spec/fixtures/repos/immutant-feature-demo/.openshift/.leinrc +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -export LEIN_HOME="${OPENSHIFT_DATA_DIR}/.lein" -export LEIN_JVM_OPTS="-Duser.home=${LEIN_HOME}" -export JVM_OPTS="-Dhornetq.netty.port=15000 -Dhornetq.netty.host=${OPENSHIFT_DIY_IP}" -export DEMO_WEB_HOST=${OPENSHIFT_DIY_IP} -export DEMO_WEB_PORT=${OPENSHIFT_DIY_PORT} - -if [ ! -d ${LEIN_HOME} ]; then - echo "Installing Leiningen" - cd ${OPENSHIFT_DATA_DIR} - wget https://raw.github.com/technomancy/leiningen/stable/bin/lein - if [ -f lein ]; then - chmod +x lein - mkdir -p $LEIN_HOME - fi -fi diff --git a/test/spec/fixtures/repos/immutant-feature-demo/.openshift/action_hooks/pre_deploy_wildfly b/test/spec/fixtures/repos/immutant-feature-demo/.openshift/action_hooks/pre_deploy_wildfly deleted file mode 100755 index e898d5b..0000000 --- a/test/spec/fixtures/repos/immutant-feature-demo/.openshift/action_hooks/pre_deploy_wildfly +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -source ${OPENSHIFT_REPO_DIR}/.openshift/.leinrc - -cd ${OPENSHIFT_REPO_DIR} -mkdir -p deployments -${OPENSHIFT_DATA_DIR}/lein do clean, immutant war -o deployments -n ROOT diff --git a/test/spec/fixtures/repos/immutant-feature-demo/.openshift/action_hooks/start b/test/spec/fixtures/repos/immutant-feature-demo/.openshift/action_hooks/start deleted file mode 100755 index 5a16913..0000000 --- a/test/spec/fixtures/repos/immutant-feature-demo/.openshift/action_hooks/start +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -source ${OPENSHIFT_REPO_DIR}/.openshift/.leinrc - -cd ${OPENSHIFT_REPO_DIR} -nohup ${OPENSHIFT_DATA_DIR}/lein trampoline run >${OPENSHIFT_LOG_DIR}/server.log 2>&1 & diff --git a/test/spec/fixtures/repos/immutant-feature-demo/.openshift/action_hooks/stop b/test/spec/fixtures/repos/immutant-feature-demo/.openshift/action_hooks/stop deleted file mode 100755 index 12d0ecd..0000000 --- a/test/spec/fixtures/repos/immutant-feature-demo/.openshift/action_hooks/stop +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -pid=`ps -ef | grep lein | grep -v grep | awk '{ print $2 }'` -if [[ $pid != "" ]]; then - kill $pid -fi diff --git a/test/spec/fixtures/repos/immutant-feature-demo/LICENSE b/test/spec/fixtures/repos/immutant-feature-demo/LICENSE deleted file mode 100644 index d645695..0000000 --- a/test/spec/fixtures/repos/immutant-feature-demo/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/test/spec/fixtures/repos/immutant-feature-demo/Procfile b/test/spec/fixtures/repos/immutant-feature-demo/Procfile deleted file mode 100644 index d8d6921..0000000 --- a/test/spec/fixtures/repos/immutant-feature-demo/Procfile +++ /dev/null @@ -1 +0,0 @@ -web: java $JVM_OPTS -jar target/demo-standalone.jar host 0.0.0.0 port $PORT diff --git a/test/spec/fixtures/repos/immutant-feature-demo/app.json b/test/spec/fixtures/repos/immutant-feature-demo/app.json deleted file mode 100644 index 9646c07..0000000 --- a/test/spec/fixtures/repos/immutant-feature-demo/app.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "Immutant Feature Demo", - "description": "A template for getting started with the popular Immutant framework.", - "website": "http://immutant.org", - "success_url": "/index.html", - "addons": ["heroku-postgresql:hobby-dev", "papertrail"] -} diff --git a/test/spec/fixtures/repos/immutant-feature-demo/doc/images/immutant-runtime.png b/test/spec/fixtures/repos/immutant-feature-demo/doc/images/immutant-runtime.png deleted file mode 100644 index 23d4bfc..0000000 Binary files a/test/spec/fixtures/repos/immutant-feature-demo/doc/images/immutant-runtime.png and /dev/null differ diff --git a/test/spec/fixtures/repos/immutant-feature-demo/doc/images/immutant_logo.jpg b/test/spec/fixtures/repos/immutant-feature-demo/doc/images/immutant_logo.jpg deleted file mode 100644 index ed9c8e9..0000000 Binary files a/test/spec/fixtures/repos/immutant-feature-demo/doc/images/immutant_logo.jpg and /dev/null differ diff --git a/test/spec/fixtures/repos/immutant-feature-demo/doc/images/tomcat-runtime.png b/test/spec/fixtures/repos/immutant-feature-demo/doc/images/tomcat-runtime.png deleted file mode 100644 index 0314e66..0000000 Binary files a/test/spec/fixtures/repos/immutant-feature-demo/doc/images/tomcat-runtime.png and /dev/null differ diff --git a/test/spec/fixtures/repos/immutant-feature-demo/doc/overview.org b/test/spec/fixtures/repos/immutant-feature-demo/doc/overview.org deleted file mode 100644 index a2bbb27..0000000 --- a/test/spec/fixtures/repos/immutant-feature-demo/doc/overview.org +++ /dev/null @@ -1,87 +0,0 @@ -[[file:images/immutant_logo.jpg]] - -* What is Immutant? - - A collection of libraries that can be embedded within any Clojure - application. Optionally, the application can be deployed to a stock - [[http://wildfly.org][WildFly]] application server. - -* The [[https://github.com/immutant/lein-immutant/tree/2x-dev][lein-immutant]] plugin - - Only required if deploying your app to WildFly. - -** Tasks - - - lein immutant war - -* Using outside of WildFly - - Set a =:main= in =project.clj=, and start with =lein run=. - -* Immutant API's - - Functions whose side effects invoke JBoss services - -** immutant.web - - - app segmentation via virtual host and/or context path - - automatic session replication in a cluster - - auto-reloading in dev mode - - static resources served via [[http://ring-clojure.github.io/ring/ring.middleware.resource.html#var-wrap-resource][ring.middleware.resource/wrap-resource]] - - :ring config, e.g. :handler, :init, :destroy, - stacktraces?, :auto-reload?, :reload-paths - - simple websockets - - examples: [[../src/demo/web.clj][demo/web.clj]] and [[../src/demo/websocket.clj][demo/websocket.clj]] - -** immutant.scheduling - - - schedules specified by maps created with helper functions - - singleton by default (runs on only one node in cluster) - - not durable - - examples: [[../src/demo/scheduling.clj][demo/scheduling.clj]] - -*** Parameters - - | :at | java.util.Date, millis since epoch, or a military time string "HHmm" | - | :in | start in millis from now, period alias or period spec | - | :every | delay interval in millis, period alias or period spec | - | :repeat | # of repeats after initial firing; with :every | - | :until | java.util.Date, millis since epoch, or "HHmm"; with :every | - | :cron | a Quartz cron spec, described below | - -*** cron specs - - dash for spans, comma for multiples, division for rates - - | seconds | 0-59 | | - | minutes | 0-59 | | - | hours | 0-23 | | - | dom | 1-31 | ? | - | month | 1-12 or JAN-DEC | | - | dow | 1-7 or SUN-SAT | ? | - | year | 1970-2099 | optional | - - - - -** immutant.messaging - - - allows publishing and listening to queues/topics using HornetQ - - supports point-to-point, request-response messaging - - examples: [[../src/demo/messaging.clj][demo/messaging.clj]] and [[../src/demo/remote_messaging_client.clj][demo/remote_messaging_client.clj]] - -** immutant.caching - - - Infinispan transactional data grid - - flexible clustering: replicated, invalidated, distributed - - strong consistency by default, but trades C for A when P - - eviction, expiration, persistence, conditional writes - - implements core.cache/CacheProtocol - - can be used with core.memoize/PluggableMemoization - - can be shared with ruby apps in an app server - - functional alternative: [[https://projectodd.ci.cloudbees.com/job/immutant2-incremental/lastSuccessfulBuild/artifact/target/apidocs/immutant.caching.html#var-swap-in.21][immutant.caching/swap-in!]] - - examples: [[../src/demo/caching.clj][demo/caching.clj]] diff --git a/test/spec/fixtures/repos/immutant-feature-demo/project.clj b/test/spec/fixtures/repos/immutant-feature-demo/project.clj deleted file mode 100644 index 55270a5..0000000 --- a/test/spec/fixtures/repos/immutant-feature-demo/project.clj +++ /dev/null @@ -1,29 +0,0 @@ -(defproject demo "0.2.0-SNAPSHOT" - :description "Demo of Immutant 2.x libraries" - :url "http://github.com/immutant/feature-demo" - :license {:name "Eclipse Public License" - :url "http://www.eclipse.org/legal/epl-v10.html"} - :dependencies [[org.clojure/clojure "1.6.0"] - [org.immutant/immutant "2.0.0-beta1"] - - ;; or bring the artifacts in piecemeal: - ;; [org.immutant/caching "2.0.0-beta1"] - ;; [org.immutant/messaging "2.0.0-beta1"] - ;; [org.immutant/scheduling "2.0.0-beta1"] - ;; [org.immutant/web "2.0.0-beta1"] - - [compojure "1.1.8"] - [ring/ring-core "1.3.0"] - [ring/ring-devel "1.3.0"] - [org.clojure/core.memoize "0.5.6"] - [clj-time "0.7.0"] - [cheshire "5.3.1"] - [environ "1.0.0"]] - :repositories [["Immutant incremental builds" - "http://downloads.immutant.org/incremental/"]] - :plugins [[lein-immutant "2.0.0-alpha2"]] - :main demo.core - :uberjar-name "demo-standalone.jar" - :profiles {:uberjar {:aot [demo.core]}} - :min-lein-version "2.4.0" - :aliases {"msg-client" ["run" "-m" "demo.remote-messaging-client"]}) diff --git a/test/spec/fixtures/repos/immutant-feature-demo/resources/public/css/style.css b/test/spec/fixtures/repos/immutant-feature-demo/resources/public/css/style.css deleted file mode 100644 index c0ef4c5..0000000 --- a/test/spec/fixtures/repos/immutant-feature-demo/resources/public/css/style.css +++ /dev/null @@ -1,29 +0,0 @@ -html { - font-family: Helvetica, Arial, sans-serif; - font-size: 100%; -} - -.opened { - color: green; -} - -.closed { - color: gray; -} - -.error { - color: red; -} - -.received { - color: blue; -} - -.sent { - color: green; -} - -button:hover { - opacity: 0.75; - cursor: pointer; -} diff --git a/test/spec/fixtures/repos/immutant-feature-demo/resources/public/index.html b/test/spec/fixtures/repos/immutant-feature-demo/resources/public/index.html deleted file mode 100644 index e340b99..0000000 --- a/test/spec/fixtures/repos/immutant-feature-demo/resources/public/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - -