From e8fab197ec2d1b6c1a9e99fc230f9537020b515c Mon Sep 17 00:00:00 2001 From: Colin Date: Tue, 6 Mar 2018 17:48:35 -0500 Subject: [PATCH 01/53] Add electron tests --- .travis.yml | 2 ++ tests/electron_tests/spec.js | 29 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 tests/electron_tests/spec.js diff --git a/.travis.yml b/.travis.yml index fb2397f2c1..cd212f971f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,6 +39,8 @@ install: fi - export PATH=$PATH:$HOME/geckodriver_$GECKODRIVER_VERSION - cpanm --notest GD::Image Text::Markdown DateTime JSON +- npm install -g jshint mocha +- npm install electron spectron # only init the python virtualenv if it did not show up in our build cache - if [[ ! -f ~/python/bin/activate ]]; then virtualenv ~/python; fi - source ~/python/bin/activate diff --git a/tests/electron_tests/spec.js b/tests/electron_tests/spec.js new file mode 100644 index 0000000000..d931ad0879 --- /dev/null +++ b/tests/electron_tests/spec.js @@ -0,0 +1,29 @@ +const Application = require('spectron').Application +const assert = require('assert') +const electronPath = require('electron') // Require Electron from the binaries included in node_modules. +const path = require('path') + +describe('Application launch', function () { + this.timeout(10000) + + beforeEach(function () { + this.app = new Application({ + path: electronPath, + args: [path.join(__dirname, '../..')], + requireName: 'electronRequire' + }) + return this.app.start() + }) + + afterEach(function () { + if (this.app && this.app.isRunning()) { + return this.app.stop() + } + }) + + it('shows an initial window', function () { + return this.app.client.getWindowCount().then(function (count) { + assert.equal(count, 1) + }) + }) +}) From 24d23d8e55928c4cef3de11071bf2eb9ea0766ce Mon Sep 17 00:00:00 2001 From: Colin Date: Tue, 6 Mar 2018 17:53:50 -0500 Subject: [PATCH 02/53] Increase timeout --- tests/electron_tests/spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/electron_tests/spec.js b/tests/electron_tests/spec.js index d931ad0879..c9c81bd314 100644 --- a/tests/electron_tests/spec.js +++ b/tests/electron_tests/spec.js @@ -4,7 +4,7 @@ const electronPath = require('electron') // Require Electron from the binaries i const path = require('path') describe('Application launch', function () { - this.timeout(10000) + this.timeout(30000) beforeEach(function () { this.app = new Application({ From 67daa569225e943243c39227e7aa385b8cd7ea7d Mon Sep 17 00:00:00 2001 From: Colin Date: Tue, 6 Mar 2018 17:57:02 -0500 Subject: [PATCH 03/53] Set headless --- tests/electron_tests/travis.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100755 tests/electron_tests/travis.sh diff --git a/tests/electron_tests/travis.sh b/tests/electron_tests/travis.sh new file mode 100755 index 0000000000..72462d04fc --- /dev/null +++ b/tests/electron_tests/travis.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + export DISPLAY=:99.0 + sh -e /etc/init.d/xvfb start + sleep 3 +fi + +node --version +npm --version + +mocha tests/electron_tests/ From 94efa49fbeed2c03bc026d8441603a5fce69a365 Mon Sep 17 00:00:00 2001 From: Colin Date: Sat, 24 Mar 2018 11:22:53 -0400 Subject: [PATCH 04/53] Add electron test back --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index cd212f971f..88eaf7c6d9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -53,6 +53,7 @@ script: - set -e - ./setup.sh - yarn lint +- tests/electron_tests/travis.sh - prove -Isrc/perl5 -r -j3 tests/perl_tests; - utils/jb_run.js -p 9000 & sleep 2 - node_modules/.bin/phantomjs tests/js_tests/run-jasmine.js http://localhost:9000/tests/js_tests/index.html From 67e0c50678fa26701d9985cb2e28314fd60c4249 Mon Sep 17 00:00:00 2001 From: Colin Date: Sat, 24 Mar 2018 12:23:44 -0400 Subject: [PATCH 05/53] Use xvfb-run --- .travis.yml | 2 +- tests/electron_tests/travis.sh | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 88eaf7c6d9..a8855279be 100644 --- a/.travis.yml +++ b/.travis.yml @@ -53,7 +53,7 @@ script: - set -e - ./setup.sh - yarn lint -- tests/electron_tests/travis.sh +- xvfb-run tests/electron_tests/travis.sh - prove -Isrc/perl5 -r -j3 tests/perl_tests; - utils/jb_run.js -p 9000 & sleep 2 - node_modules/.bin/phantomjs tests/js_tests/run-jasmine.js http://localhost:9000/tests/js_tests/index.html diff --git a/tests/electron_tests/travis.sh b/tests/electron_tests/travis.sh index 72462d04fc..17b988a70b 100755 --- a/tests/electron_tests/travis.sh +++ b/tests/electron_tests/travis.sh @@ -1,11 +1,5 @@ #!/usr/bin/env bash -if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start - sleep 3 -fi - node --version npm --version From 2570d70c3ca2310fa9126339b1b38f4963189597 Mon Sep 17 00:00:00 2001 From: Colin Date: Sat, 24 Mar 2018 12:35:55 -0400 Subject: [PATCH 06/53] Set the mocha test runner directly from travis --- .travis.yml | 2 +- tests/electron_tests/travis.sh | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) delete mode 100755 tests/electron_tests/travis.sh diff --git a/.travis.yml b/.travis.yml index a8855279be..8a484e9104 100644 --- a/.travis.yml +++ b/.travis.yml @@ -53,7 +53,7 @@ script: - set -e - ./setup.sh - yarn lint -- xvfb-run tests/electron_tests/travis.sh +- xvfb-run mocha tests/electron_tests - prove -Isrc/perl5 -r -j3 tests/perl_tests; - utils/jb_run.js -p 9000 & sleep 2 - node_modules/.bin/phantomjs tests/js_tests/run-jasmine.js http://localhost:9000/tests/js_tests/index.html diff --git a/tests/electron_tests/travis.sh b/tests/electron_tests/travis.sh deleted file mode 100755 index 17b988a70b..0000000000 --- a/tests/electron_tests/travis.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -node --version -npm --version - -mocha tests/electron_tests/ From 78d46c7b9dce9e13b8a770e94afcbba707c1dc07 Mon Sep 17 00:00:00 2001 From: Colin Date: Sat, 24 Mar 2018 13:29:42 -0400 Subject: [PATCH 07/53] Add spectron/electron in script since setup.sh would remove it --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8a484e9104..f72638caf8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,7 +40,6 @@ install: - export PATH=$PATH:$HOME/geckodriver_$GECKODRIVER_VERSION - cpanm --notest GD::Image Text::Markdown DateTime JSON - npm install -g jshint mocha -- npm install electron spectron # only init the python virtualenv if it did not show up in our build cache - if [[ ! -f ~/python/bin/activate ]]; then virtualenv ~/python; fi - source ~/python/bin/activate @@ -53,6 +52,7 @@ script: - set -e - ./setup.sh - yarn lint +- npm install electron spectron - xvfb-run mocha tests/electron_tests - prove -Isrc/perl5 -r -j3 tests/perl_tests; - utils/jb_run.js -p 9000 & sleep 2 From 0db775eeddf5201b892480c2241f9882d6973249 Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 2 Apr 2018 12:22:43 -0400 Subject: [PATCH 08/53] Add ava testrunner --- .travis.yml | 6 +-- index.html | 6 ++- src/JBrowse/View/FileDialog.js | 7 +++- tests/electron_tests/spec.js | 72 ++++++++++++++++++++++------------ 4 files changed, 62 insertions(+), 29 deletions(-) diff --git a/.travis.yml b/.travis.yml index f72638caf8..3906b6a079 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,7 +39,7 @@ install: fi - export PATH=$PATH:$HOME/geckodriver_$GECKODRIVER_VERSION - cpanm --notest GD::Image Text::Markdown DateTime JSON -- npm install -g jshint mocha +- npm install -g jshint # only init the python virtualenv if it did not show up in our build cache - if [[ ! -f ~/python/bin/activate ]]; then virtualenv ~/python; fi - source ~/python/bin/activate @@ -52,8 +52,8 @@ script: - set -e - ./setup.sh - yarn lint -- npm install electron spectron -- xvfb-run mocha tests/electron_tests +- npm install electron spectron ava +- xvfb-run node_modules/.bin/ava --timeout=30s tests/electron_tests - prove -Isrc/perl5 -r -j3 tests/perl_tests; - utils/jb_run.js -p 9000 & sleep 2 - node_modules/.bin/phantomjs tests/js_tests/run-jasmine.js http://localhost:9000/tests/js_tests/index.html diff --git a/index.html b/index.html index f8c1d24684..5c753e936d 100644 --- a/index.html +++ b/index.html @@ -12,12 +12,15 @@ - + diff --git a/src/JBrowse/View/FileDialog.js b/src/JBrowse/View/FileDialog.js index 1cec551cea..eb63a90a14 100644 --- a/src/JBrowse/View/FileDialog.js +++ b/src/JBrowse/View/FileDialog.js @@ -143,7 +143,12 @@ return declare( null, { else { on( localFilesControl.uploader, 'click', function() { var dialog = electronRequire('electron').remote.dialog; - var ret = dialog.showOpenDialog({ properties: [ 'openFile','multiSelections' ]}); + var ret; + if(process.env.SPECTRON) { + ret = ["docs/tutorial/data_files/volvox.fa"]; + } else { + ret = dialog.showOpenDialog({ properties: [ 'openFile','multiSelections' ]}); + } if( ret ) { var paths = array.map( ret, function(replace) { return Util.replacePath(replace); }); resourceListControl.addURLs( paths ); diff --git a/tests/electron_tests/spec.js b/tests/electron_tests/spec.js index c9c81bd314..86fbe2b91d 100644 --- a/tests/electron_tests/spec.js +++ b/tests/electron_tests/spec.js @@ -1,29 +1,53 @@ -const Application = require('spectron').Application -const assert = require('assert') -const electronPath = require('electron') // Require Electron from the binaries included in node_modules. -const path = require('path') +import test from 'ava'; +import {Application} from 'spectron'; +import electronPath from 'electron'; +import path from 'path'; -describe('Application launch', function () { - this.timeout(30000) - beforeEach(function () { - this.app = new Application({ +test.beforeEach(async t => { + t.context.app = new Application({ path: electronPath, args: [path.join(__dirname, '../..')], + env: {SPECTRON: '1'}, requireName: 'electronRequire' - }) - return this.app.start() - }) - - afterEach(function () { - if (this.app && this.app.isRunning()) { - return this.app.stop() - } - }) - - it('shows an initial window', function () { - return this.app.client.getWindowCount().then(function (count) { - assert.equal(count, 1) - }) - }) -}) + }); + + await t.context.app.start(); +}); + +test.afterEach.always(async t => { + await t.context.app.stop(); +}); + +test(async t => { + const app = t.context.app; + await app.client.waitUntilWindowLoaded(); + + const win = app.browserWindow; + t.is(await app.client.getWindowCount(), 1); + t.false(await win.isMinimized()); + t.false(await win.isDevToolsOpened()); + t.true(await win.isVisible()); + + const {width, height} = await win.getBounds(); + t.true(width > 0); + t.true(height > 0); +}); + +test(async t => { + const app = t.context.app; + await app.client.waitUntilWindowLoaded(); + var text = await app.client.getText("#welcome"); + t.is(text.substr(0,12), "Your JBrowse"); + await app.client.click("#newOpen"); + await app.client.click("#openFile"); + await app.client.click("#dijit_form_Button_1"); +}); +test(async t => { + const app = t.context.app; + await app.client.waitUntilWindowLoaded(); + var text = await app.client.getText("#previousSessions"); + t.true(t!=null); + console.error(text); +}); + From 177f82f70652d1f25927cdbc8909fe9cb171a704 Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 2 Apr 2018 12:53:16 -0400 Subject: [PATCH 09/53] Use window.process --- src/JBrowse/View/FileDialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/JBrowse/View/FileDialog.js b/src/JBrowse/View/FileDialog.js index eb63a90a14..5a5e0188fe 100644 --- a/src/JBrowse/View/FileDialog.js +++ b/src/JBrowse/View/FileDialog.js @@ -144,7 +144,7 @@ return declare( null, { on( localFilesControl.uploader, 'click', function() { var dialog = electronRequire('electron').remote.dialog; var ret; - if(process.env.SPECTRON) { + if(window.process.env.SPECTRON) { ret = ["docs/tutorial/data_files/volvox.fa"]; } else { ret = dialog.showOpenDialog({ properties: [ 'openFile','multiSelections' ]}); From 5a468a8d0713d7784df21ac23392655cbd33b333 Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 2 Apr 2018 12:54:48 -0400 Subject: [PATCH 10/53] Name tests --- tests/electron_tests/spec.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/electron_tests/spec.js b/tests/electron_tests/spec.js index 86fbe2b91d..ebfd234424 100644 --- a/tests/electron_tests/spec.js +++ b/tests/electron_tests/spec.js @@ -19,7 +19,7 @@ test.afterEach.always(async t => { await t.context.app.stop(); }); -test(async t => { +test('shows window', async t => { const app = t.context.app; await app.client.waitUntilWindowLoaded(); @@ -34,7 +34,7 @@ test(async t => { t.true(height > 0); }); -test(async t => { +test('checks welcome text and opens fasta', async t => { const app = t.context.app; await app.client.waitUntilWindowLoaded(); var text = await app.client.getText("#welcome"); @@ -43,7 +43,7 @@ test(async t => { await app.client.click("#openFile"); await app.client.click("#dijit_form_Button_1"); }); -test(async t => { +test('checks previous sessions', async t => { const app = t.context.app; await app.client.waitUntilWindowLoaded(); var text = await app.client.getText("#previousSessions"); From 817be27a1b0d7072bb7b0d90f52ce6e79a313a67 Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 2 Apr 2018 14:10:48 -0400 Subject: [PATCH 11/53] Combine tests --- tests/electron_tests/spec.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/electron_tests/spec.js b/tests/electron_tests/spec.js index ebfd234424..06d819bfd3 100644 --- a/tests/electron_tests/spec.js +++ b/tests/electron_tests/spec.js @@ -32,17 +32,16 @@ test('shows window', async t => { const {width, height} = await win.getBounds(); t.true(width > 0); t.true(height > 0); -}); -test('checks welcome text and opens fasta', async t => { - const app = t.context.app; - await app.client.waitUntilWindowLoaded(); + var text = await app.client.getText("#welcome"); t.is(text.substr(0,12), "Your JBrowse"); await app.client.click("#newOpen"); await app.client.click("#openFile"); await app.client.click("#dijit_form_Button_1"); }); + + test('checks previous sessions', async t => { const app = t.context.app; await app.client.waitUntilWindowLoaded(); From 24db5b66e3f0fa2a214eec663cb7355018c86409 Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 2 Apr 2018 14:59:09 -0400 Subject: [PATCH 12/53] Return promise --- tests/electron_tests/spec.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/electron_tests/spec.js b/tests/electron_tests/spec.js index 06d819bfd3..89c61a6c0a 100644 --- a/tests/electron_tests/spec.js +++ b/tests/electron_tests/spec.js @@ -12,11 +12,11 @@ test.beforeEach(async t => { requireName: 'electronRequire' }); - await t.context.app.start(); + return t.context.app.start(); }); test.afterEach.always(async t => { - await t.context.app.stop(); + return t.context.app.stop(); }); test('shows window', async t => { @@ -47,6 +47,5 @@ test('checks previous sessions', async t => { await app.client.waitUntilWindowLoaded(); var text = await app.client.getText("#previousSessions"); t.true(t!=null); - console.error(text); }); From a4034a655a80c1920a89dd856b20da0f814a589e Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 2 Apr 2018 15:10:15 -0400 Subject: [PATCH 13/53] Restart app in test --- tests/electron_tests/spec.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/tests/electron_tests/spec.js b/tests/electron_tests/spec.js index 89c61a6c0a..3c4c02fa89 100644 --- a/tests/electron_tests/spec.js +++ b/tests/electron_tests/spec.js @@ -20,7 +20,7 @@ test.afterEach.always(async t => { }); test('shows window', async t => { - const app = t.context.app; + let app = t.context.app; await app.client.waitUntilWindowLoaded(); const win = app.browserWindow; @@ -39,12 +39,8 @@ test('shows window', async t => { await app.client.click("#newOpen"); await app.client.click("#openFile"); await app.client.click("#dijit_form_Button_1"); -}); - - -test('checks previous sessions', async t => { - const app = t.context.app; - await app.client.waitUntilWindowLoaded(); + await app.restart() + await app.client.waitUntilWindowLoaded() var text = await app.client.getText("#previousSessions"); t.true(t!=null); }); From a4722b16e1160a076f3a38dc5a1c51a89b142020 Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 2 Apr 2018 15:57:11 -0400 Subject: [PATCH 14/53] Add link to previous session table --- src/JBrowse/Browser.js | 2 +- tests/electron_tests/spec.js | 63 ++++++++++++++++++------------------ 2 files changed, 32 insertions(+), 33 deletions(-) diff --git a/src/JBrowse/Browser.js b/src/JBrowse/Browser.js index a7572d4f5e..615e224005 100644 --- a/src/JBrowse/Browser.js +++ b/src/JBrowse/Browser.js @@ -508,7 +508,7 @@ loadSessions: function() { var path = app.getPath('userData') + "/sessions.json"; var obj = JSON.parse( fs.readFileSync( path, 'utf8' ) ); - var table = dojo.create( 'table', { style: { overflow: 'hidden', width: '90%' } }, dojo.byId('previousSessions') ); + var table = dojo.create( 'table', { id: 'previousSessionsTable', style: { overflow: 'hidden', width: '90%' } }, dojo.byId('previousSessions') ); var thisB = this; if( ! obj.length ) { diff --git a/tests/electron_tests/spec.js b/tests/electron_tests/spec.js index 3c4c02fa89..bf2524fccc 100644 --- a/tests/electron_tests/spec.js +++ b/tests/electron_tests/spec.js @@ -5,43 +5,42 @@ import path from 'path'; test.beforeEach(async t => { - t.context.app = new Application({ - path: electronPath, - args: [path.join(__dirname, '../..')], - env: {SPECTRON: '1'}, - requireName: 'electronRequire' - }); - - return t.context.app.start(); + t.context.app = new Application({ + path: electronPath, + args: [path.join(__dirname, '../..')], + env: {SPECTRON: '1'}, + requireName: 'electronRequire' + }); + + await t.context.app.start(); }); test.afterEach.always(async t => { - return t.context.app.stop(); + await t.context.app.stop(); }); test('shows window', async t => { - let app = t.context.app; - await app.client.waitUntilWindowLoaded(); - - const win = app.browserWindow; - t.is(await app.client.getWindowCount(), 1); - t.false(await win.isMinimized()); - t.false(await win.isDevToolsOpened()); - t.true(await win.isVisible()); - - const {width, height} = await win.getBounds(); - t.true(width > 0); - t.true(height > 0); - - - var text = await app.client.getText("#welcome"); - t.is(text.substr(0,12), "Your JBrowse"); - await app.client.click("#newOpen"); - await app.client.click("#openFile"); - await app.client.click("#dijit_form_Button_1"); - await app.restart() - await app.client.waitUntilWindowLoaded() - var text = await app.client.getText("#previousSessions"); - t.true(t!=null); + const app = t.context.app; + await app.client.waitUntilWindowLoaded(); + + const win = app.browserWindow; + t.is(await app.client.getWindowCount(), 1); + t.false(await win.isMinimized()); + t.false(await win.isDevToolsOpened()); + t.true(await win.isVisible()); + + const {width, height} = await win.getBounds(); + t.true(width > 0); + t.true(height > 0); + + var text = await app.client.getText("#welcome"); + t.is(text.substr(0,12), "Your JBrowse"); + await app.client.click("#newOpen"); + await app.client.click("#openFile"); + await app.client.click("#dijit_form_Button_1"); + await app.restart() + await app.client.waitUntilWindowLoaded() + text = await app.client.getText("#previousSessionsTable"); + t.true(text != null); }); From a0e02551b2a304dd0a12e5c7a8d2488cfbd5d9b5 Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 5 Apr 2018 16:15:05 -0400 Subject: [PATCH 15/53] Remove open plugin and enhance Makefile --- build/Makefile | 42 +++++++++++++++++++++++------------------- setup.sh | 5 ----- src/JBrowse/Browser.js | 14 -------------- 3 files changed, 23 insertions(+), 38 deletions(-) diff --git a/build/Makefile b/build/Makefile index 9266d3a085..072f3053a0 100644 --- a/build/Makefile +++ b/build/Makefile @@ -19,6 +19,7 @@ RELEASE_DESKTOP_LINUX = $(RELEASE_NAME)-desktop-linux ZIP=zip -q --symlinks -r UNZIP=unzip -q SHASUM=shasum +ELECTRON_VERSION=1.8.4 all: clean release @@ -27,27 +28,30 @@ release: release-dev release-min release-notes.html ls -lh *.zip $(SHASUM) *.zip -release-electron-darwin: release - cd $(RELEASE_MIN)&&./setup.sh legacy&&cd .. - npm install - electron-packager $(RELEASE_MIN) JBrowseDesktop --platform=darwin --arch=x64 - $(ZIP) $(RELEASE_DESKTOP_OSX).zip JBrowseDesktop-darwin-x64 +release-electron-setup: + echo "Setting up electron" + cd $(RELEASE_MIN)&&./setup.sh&&cd .. -release-electron-all: release - echo "Building desktop packages..." - cd $(RELEASE_MIN)&&./setup.sh legacy&&cd .. - npm install - # build all versions - # electron-packager $(RELEASE_MIN) JBrowseDesktop --platform=all --arch=x64 - # build specific versions - electron-packager $(RELEASE_MIN) JBrowseDesktop --platform=darwin --arch=x64 - electron-packager $(RELEASE_MIN) JBrowseDesktop --platform=win32 --arch=ia32 - # zap files that cause problems on windows (because of colons in filenames) - find JBrowseDesktop-win32-ia32 -type f -name "*.3pm" -delete &> /dev/null - # zip packages +release-electron-darwin: clean release release-electron-setup + echo "Building mac electron" + electron-packager $(RELEASE_MIN) JBrowseDesktop --platform=darwin --electron-version=$(ELECTRON_VERSION) $(ZIP) $(RELEASE_DESKTOP_OSX).zip JBrowseDesktop-darwin-x64 - $(ZIP) $(RELEASE_DESKTOP_WIN).zip JBrowseDesktop-win32-ia32 - # $(ZIP) $(RELEASE_DESKTOP_LINUX).zip JBrowseDesktop-linux-x64 + +release-electron-win32: clean release release-electron-setup + echo "Building win32 electron" + electron-packager $(RELEASE_MIN) JBrowseDesktop --platform=win32 --electron-version=$(ELECTRON_VERSION) + $(ZIP) $(RELEASE_DESKTOP_OSX).zip JBrowseDesktop-win32-x64 + + +release-electron-linux: clean release release-electron-setup + echo "Building linux electron" + electron-packager $(RELEASE_MIN) JBrowseDesktop --platform=linux --electron-version=$(ELECTRON_VERSION) + $(ZIP) $(RELEASE_DESKTOP_OSX).zip JBrowseDesktop-linux-x64 + + +release-electron-all: clean release release-electron-setup + echo "Building desktop packages" + electron-packager $(RELEASE_MIN) JBrowseDesktop --platform=all --electron-version=$(ELECTRON_VERSION) release-notes.html: release-notes.txt build/format_release_notes.pl $< > $@ diff --git a/setup.sh b/setup.sh index 2508cc6c25..fb45b99c92 100755 --- a/setup.sh +++ b/setup.sh @@ -173,11 +173,6 @@ log_echo -n "Formatting Volvox example data ..."; bin/flatfile-to-json.pl --bed docs/tutorial/data_files/volvox_segment.bed --out sample_data/json/volvox --trackLabel ChromHMM --trackType CanvasFeatures --clientConfig '{"color": "{chromHMM}", "strandArrow": false}' --config '{"displayMode": "collapsed", "enableCollapsedMouseover": true, "category": "Miscellaneous" }'; bin/generate-names.pl --safeMode -v --out sample_data/json/volvox; - # also recreate some symlinks used by tests and such - if [ -d sample_data/json/modencode ]; then - mkdir -p sample_data/json/modencode/tracks; - ln -sf ../../volvox/tracks/volvox_microarray.wig sample_data/json/modencode/tracks/volvox_microarray.wig; - fi; mkdir -p sample_data/raw; if [ ! -e sample_data/raw/volvox ]; then ln -s ../../docs/tutorial/data_files sample_data/raw/volvox; diff --git a/src/JBrowse/Browser.js b/src/JBrowse/Browser.js index 615e224005..77df6c9fbc 100644 --- a/src/JBrowse/Browser.js +++ b/src/JBrowse/Browser.js @@ -750,20 +750,6 @@ initView: function() { } ) ); - this.addGlobalMenuItem(this.config.classicMenu ? 'file':'dataset', - new dijitMenuItem( - { - id: 'menubar_dataset_conf', - label: "Open plugin", - iconClass: 'dijitIconConfigure', - onClick: function() { - new PreferencesDialog({ - browser: thisObj, - setCallback: dojo.hitch( thisObj, 'openConfig' ) - }).show(); - } - } - )); this.addGlobalMenuItem(this.config.classicMenu ? 'file':'dataset', new dijitMenuItem( { From c734700ac483525c0a859e09e9ca4c50f2195910 Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 5 Apr 2018 16:21:54 -0400 Subject: [PATCH 16/53] Rename node --- tests/electron_tests/spec.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/electron_tests/spec.js b/tests/electron_tests/spec.js index bf2524fccc..a852601216 100644 --- a/tests/electron_tests/spec.js +++ b/tests/electron_tests/spec.js @@ -42,5 +42,6 @@ test('shows window', async t => { await app.client.waitUntilWindowLoaded() text = await app.client.getText("#previousSessionsTable"); t.true(text != null); + await app.client.click("#previousSessionsTable"); }); From 67d64792edd5cd3fe28b5fa466d4357efd9ecf79 Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 5 Apr 2018 17:36:11 -0400 Subject: [PATCH 17/53] Build desktop version --- .travis.yml | 2 ++ build/Makefile | 16 ++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3906b6a079..67a9d5ac48 100644 --- a/.travis.yml +++ b/.travis.yml @@ -70,6 +70,8 @@ script: prove -Isrc/perl5 -r -j3 tests/perl_tests; cd $BUILD_DIR; MOZ_HEADLESS=1 SELENIUM_BROWSER=firefox NOSEOPTS="-I jasmine" JBROWSE_URL=http://localhost:9000/JBrowse-$RELEASE_VERSION/index.html tests/selenium_tests/travis_wrapper.sh; + npm install -g electron-packager + make -f build/Makefile release-electron-all fi - set +e after_failure: diff --git a/build/Makefile b/build/Makefile index 072f3053a0..76157fcaa2 100644 --- a/build/Makefile +++ b/build/Makefile @@ -31,27 +31,27 @@ release: release-dev release-min release-notes.html release-electron-setup: echo "Setting up electron" cd $(RELEASE_MIN)&&./setup.sh&&cd .. + cp -R browser $(RELEASE_MIN) release-electron-darwin: clean release release-electron-setup echo "Building mac electron" - electron-packager $(RELEASE_MIN) JBrowseDesktop --platform=darwin --electron-version=$(ELECTRON_VERSION) - $(ZIP) $(RELEASE_DESKTOP_OSX).zip JBrowseDesktop-darwin-x64 + electron-packager $(RELEASE_MIN) $(RELEASE_MIN)-desktop --platform=darwin --electron-version=$(ELECTRON_VERSION) + $(ZIP) $(RELEASE_MIN)-desktop-darwin-x64.zip $(RELEASE_MIN)-desktop-darwin-x64 release-electron-win32: clean release release-electron-setup echo "Building win32 electron" - electron-packager $(RELEASE_MIN) JBrowseDesktop --platform=win32 --electron-version=$(ELECTRON_VERSION) - $(ZIP) $(RELEASE_DESKTOP_OSX).zip JBrowseDesktop-win32-x64 + electron-packager $(RELEASE_MIN) $(RELEASE_MIN)-desktop --platform=win32 --electron-version=$(ELECTRON_VERSION) + $(ZIP) $(RELEASE_MIN)-desktop-win32-x64.zip $(RELEASE_MIN)-desktop-win32-x64 release-electron-linux: clean release release-electron-setup echo "Building linux electron" - electron-packager $(RELEASE_MIN) JBrowseDesktop --platform=linux --electron-version=$(ELECTRON_VERSION) - $(ZIP) $(RELEASE_DESKTOP_OSX).zip JBrowseDesktop-linux-x64 + electron-packager $(RELEASE_MIN) $(RELEASE_MIN)-desktop --platform=linux --electron-version=$(ELECTRON_VERSION) + $(ZIP) $(RELEASE_MIN)-desktop-linux-x64.zip $(RELEASE_MIN)-desktop-linux-x64 -release-electron-all: clean release release-electron-setup +release-electron-all: release-electron-darwin release-electron-win32 release-electron-linux echo "Building desktop packages" - electron-packager $(RELEASE_MIN) JBrowseDesktop --platform=all --electron-version=$(ELECTRON_VERSION) release-notes.html: release-notes.txt build/format_release_notes.pl $< > $@ From 7f00fa1763474e315df95777378e9036da727f1b Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 5 Apr 2018 18:20:42 -0400 Subject: [PATCH 18/53] Add cwd to test --- src/JBrowse/View/FileDialog.js | 2 +- tests/electron_tests/spec.js | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/JBrowse/View/FileDialog.js b/src/JBrowse/View/FileDialog.js index 5a5e0188fe..6e265f7c97 100644 --- a/src/JBrowse/View/FileDialog.js +++ b/src/JBrowse/View/FileDialog.js @@ -145,7 +145,7 @@ return declare( null, { var dialog = electronRequire('electron').remote.dialog; var ret; if(window.process.env.SPECTRON) { - ret = ["docs/tutorial/data_files/volvox.fa"]; + ret = [window.process.cwd()+"/docs/tutorial/data_files/volvox.fa"]; } else { ret = dialog.showOpenDialog({ properties: [ 'openFile','multiSelections' ]}); } diff --git a/tests/electron_tests/spec.js b/tests/electron_tests/spec.js index a852601216..ac61df58a1 100644 --- a/tests/electron_tests/spec.js +++ b/tests/electron_tests/spec.js @@ -18,10 +18,13 @@ test.beforeEach(async t => { test.afterEach.always(async t => { await t.context.app.stop(); }); - +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} test('shows window', async t => { const app = t.context.app; await app.client.waitUntilWindowLoaded(); + app.client.log("browser") const win = app.browserWindow; t.is(await app.client.getWindowCount(), 1); @@ -37,7 +40,13 @@ test('shows window', async t => { t.is(text.substr(0,12), "Your JBrowse"); await app.client.click("#newOpen"); await app.client.click("#openFile"); - await app.client.click("#dijit_form_Button_1"); + await app.client.click("#dijit_form_Button_1_label"); + // debugging commands + // var x = await app.client.getMainProcessLogs() + // var y = await app.client.getRenderProcessLogs() + // console.error(x); + // console.error(y); + await sleep(5000); await app.restart() await app.client.waitUntilWindowLoaded() text = await app.client.getText("#previousSessionsTable"); From 9a123f884676c299c1ca5b619bbfa6f767129b49 Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 5 Apr 2018 19:39:53 -0400 Subject: [PATCH 19/53] Add wine to apt travis list --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 67a9d5ac48..42d8842267 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,7 @@ addons: packages: - libdb-dev - libgd2-noxpm-dev + - wine firefox: '58.0' cache: directories: From 67de0e429adf832bfc75151d8ab87a1b0b8198b6 Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 5 Apr 2018 19:48:28 -0400 Subject: [PATCH 20/53] Increase timeout --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 42d8842267..65bda3cfdb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -54,7 +54,7 @@ script: - ./setup.sh - yarn lint - npm install electron spectron ava -- xvfb-run node_modules/.bin/ava --timeout=30s tests/electron_tests +- xvfb-run node_modules/.bin/ava --timeout=60s tests/electron_tests - prove -Isrc/perl5 -r -j3 tests/perl_tests; - utils/jb_run.js -p 9000 & sleep 2 - node_modules/.bin/phantomjs tests/js_tests/run-jasmine.js http://localhost:9000/tests/js_tests/index.html From 81035aca72c85dd03bb087e4b4ac9b2582475413 Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 5 Apr 2018 19:58:32 -0400 Subject: [PATCH 21/53] No need for click action --- tests/electron_tests/spec.js | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/electron_tests/spec.js b/tests/electron_tests/spec.js index ac61df58a1..8e79b6ba1c 100644 --- a/tests/electron_tests/spec.js +++ b/tests/electron_tests/spec.js @@ -51,6 +51,5 @@ test('shows window', async t => { await app.client.waitUntilWindowLoaded() text = await app.client.getText("#previousSessionsTable"); t.true(text != null); - await app.client.click("#previousSessionsTable"); }); From 283abc6a85886b1cf014f101f5e9efd54f702da2 Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 5 Apr 2018 21:14:57 -0400 Subject: [PATCH 22/53] Test osx build on travis --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 65bda3cfdb..7eabb337db 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,9 @@ +osx_image: xcode8.3 sudo: false dist: trusty +os: + - linux + - osx language: perl python: 2.7.10 perl: @@ -74,7 +78,6 @@ script: npm install -g electron-packager make -f build/Makefile release-electron-all fi -- set +e after_failure: - cat setup.log deploy: From 7ef35787cb4cdd7e8bca1635dbb6b66487b99b9b Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 5 Apr 2018 21:23:28 -0400 Subject: [PATCH 23/53] Revert osx travis --- .travis.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7eabb337db..65bda3cfdb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,5 @@ -osx_image: xcode8.3 sudo: false dist: trusty -os: - - linux - - osx language: perl python: 2.7.10 perl: @@ -78,6 +74,7 @@ script: npm install -g electron-packager make -f build/Makefile release-electron-all fi +- set +e after_failure: - cat setup.log deploy: From ca1cd88e01b1969e0a5cf2a59d2bf033042ffc33 Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 5 Apr 2018 21:26:07 -0400 Subject: [PATCH 24/53] Test docker build --- .travis.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.travis.yml b/.travis.yml index 65bda3cfdb..730583646d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,7 @@ sudo: false dist: trusty language: perl python: 2.7.10 +services: docker perl: - '5.26' - '5.14' @@ -75,6 +76,14 @@ script: make -f build/Makefile release-electron-all fi - set +e +- docker run --rm \ + --env-file <(env | grep -iE 'DEBUG|NODE_|ELECTRON_|YARN_|NPM_|CI|CIRCLE|TRAVIS|APPVEYOR_|CSC_|_TOKEN|_KEY|AWS_|STRIP|BUILD_') \ + -v ${PWD}:/project \ + -v ~/.cache/electron:/root/.cache/electron \ + -v ~/.cache/electron-builder:/root/.cache/electron-builder \ + electronuserland/builder:wine \ + /bin/bash -c "make -f build/Makefile release-electron-all" +- ls -l after_failure: - cat setup.log deploy: From 2ac4cc9d7525655fd0f2d320aa9cb234646da9a1 Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 5 Apr 2018 21:35:24 -0400 Subject: [PATCH 25/53] Fix some syntax --- .travis.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 730583646d..d031e0e452 100644 --- a/.travis.yml +++ b/.travis.yml @@ -76,12 +76,12 @@ script: make -f build/Makefile release-electron-all fi - set +e -- docker run --rm \ - --env-file <(env | grep -iE 'DEBUG|NODE_|ELECTRON_|YARN_|NPM_|CI|CIRCLE|TRAVIS|APPVEYOR_|CSC_|_TOKEN|_KEY|AWS_|STRIP|BUILD_') \ - -v ${PWD}:/project \ - -v ~/.cache/electron:/root/.cache/electron \ - -v ~/.cache/electron-builder:/root/.cache/electron-builder \ - electronuserland/builder:wine \ +- docker run --rm + --env-file <(env | grep -iE 'DEBUG|NODE_|ELECTRON_|YARN_|NPM_|CI|CIRCLE|TRAVIS|APPVEYOR_|CSC_|_TOKEN|_KEY|AWS_|STRIP|BUILD_') + -v ${PWD}:/project + -v ~/.cache/electron:/root/.cache/electron + -v ~/.cache/electron-builder:/root/.cache/electron-builder + electronuserland/builder:wine /bin/bash -c "make -f build/Makefile release-electron-all" - ls -l after_failure: From 25fe976230d4108d294a36d4c261b7a45657661e Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 5 Apr 2018 21:44:00 -0400 Subject: [PATCH 26/53] Retab --- .travis.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index d031e0e452..f71025d5ed 100644 --- a/.travis.yml +++ b/.travis.yml @@ -77,12 +77,12 @@ script: fi - set +e - docker run --rm - --env-file <(env | grep -iE 'DEBUG|NODE_|ELECTRON_|YARN_|NPM_|CI|CIRCLE|TRAVIS|APPVEYOR_|CSC_|_TOKEN|_KEY|AWS_|STRIP|BUILD_') - -v ${PWD}:/project - -v ~/.cache/electron:/root/.cache/electron - -v ~/.cache/electron-builder:/root/.cache/electron-builder - electronuserland/builder:wine - /bin/bash -c "make -f build/Makefile release-electron-all" + --env-file <(env | grep -iE 'DEBUG|NODE_|ELECTRON_|YARN_|NPM_|CI|CIRCLE|TRAVIS|APPVEYOR_|CSC_|_TOKEN|_KEY|AWS_|STRIP|BUILD_') + -v ${PWD}:/project + -v ~/.cache/electron:/root/.cache/electron + -v ~/.cache/electron-builder:/root/.cache/electron-builder + electronuserland/builder:wine + /bin/bash -c "make -f build/Makefile release-electron-all" - ls -l after_failure: - cat setup.log From 23514aa125238a00491832f3f59d299645af40c5 Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 5 Apr 2018 21:47:57 -0400 Subject: [PATCH 27/53] Use wine1.6 --- .travis.yml | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index f71025d5ed..713007ba2e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,4 @@ -sudo: false +sudo: true dist: trusty language: perl python: 2.7.10 @@ -11,7 +11,7 @@ addons: packages: - libdb-dev - libgd2-noxpm-dev - - wine + - wine1.6 firefox: '58.0' cache: directories: @@ -27,6 +27,10 @@ env: global: - GECKODRIVER_VERSION=0.19.1 - PHANTOMJS_VERSION=2.1.1 +before_install: + - sudo dpkg --add-architecture i386 + - sudo apt-get -qq update + - sudo apt-get install wine1.6 install: - "export PATH=$PWD/travis_phantomjs/phantomjs-$PHANTOMJS_VERSION-linux-x86_64/bin:$PATH" - "if [ $(phantomjs --version) != $PHANTOMJS_VERSION ]; then rm -rf $PWD/travis_phantomjs; mkdir -p $PWD/travis_phantomjs; fi" @@ -76,14 +80,6 @@ script: make -f build/Makefile release-electron-all fi - set +e -- docker run --rm - --env-file <(env | grep -iE 'DEBUG|NODE_|ELECTRON_|YARN_|NPM_|CI|CIRCLE|TRAVIS|APPVEYOR_|CSC_|_TOKEN|_KEY|AWS_|STRIP|BUILD_') - -v ${PWD}:/project - -v ~/.cache/electron:/root/.cache/electron - -v ~/.cache/electron-builder:/root/.cache/electron-builder - electronuserland/builder:wine - /bin/bash -c "make -f build/Makefile release-electron-all" -- ls -l after_failure: - cat setup.log deploy: From 06179502234b4ea152f3fd8500df659509172a2c Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 5 Apr 2018 22:39:24 -0400 Subject: [PATCH 28/53] Update release-notes.txt --- release-notes.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/release-notes.txt b/release-notes.txt index 5eac468b1d..20e26e32a1 100644 --- a/release-notes.txt +++ b/release-notes.txt @@ -5,6 +5,9 @@ * Improve the calculation of feature density for GFF3Tabix and add new one for GFF3 in-memory. Thanks to @hkmoon for the suggestion! (issue #1039, issue #913, @cmdcolin) + * Re-enabled JBrowse Desktop builds based on automatically building on Travis-CI + (issue #1028, @cmdcolin) + # Release 1.14.0 2018-04-18 15:14:58 UTC ## Major improvements From e438696ded9f0e2917325b823c06d89f032448bf Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 5 Apr 2018 23:30:50 -0400 Subject: [PATCH 29/53] Docker unneeded --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 713007ba2e..6e945454e2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,6 @@ sudo: true dist: trusty language: perl python: 2.7.10 -services: docker perl: - '5.26' - '5.14' From c4fcfd93fdf395f45521e40b60f167c0b043651d Mon Sep 17 00:00:00 2001 From: Colin Date: Sun, 8 Apr 2018 15:18:06 -0400 Subject: [PATCH 30/53] wine1.6 in whitelist --- .travis.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6e945454e2..e6fb7d4318 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,4 @@ -sudo: true +sudo: false dist: trusty language: perl python: 2.7.10 @@ -26,10 +26,6 @@ env: global: - GECKODRIVER_VERSION=0.19.1 - PHANTOMJS_VERSION=2.1.1 -before_install: - - sudo dpkg --add-architecture i386 - - sudo apt-get -qq update - - sudo apt-get install wine1.6 install: - "export PATH=$PWD/travis_phantomjs/phantomjs-$PHANTOMJS_VERSION-linux-x86_64/bin:$PATH" - "if [ $(phantomjs --version) != $PHANTOMJS_VERSION ]; then rm -rf $PWD/travis_phantomjs; mkdir -p $PWD/travis_phantomjs; fi" From 2adf1333f9b6c633eba2d480ba2943c75bcdd0ba Mon Sep 17 00:00:00 2001 From: Colin Date: Sun, 8 Apr 2018 18:13:32 -0400 Subject: [PATCH 31/53] Revert "wine1.6 in whitelist" This reverts commit 43b4ec892abc0ee6c79de3aab665870f1efda7cc. --- .travis.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e6fb7d4318..6e945454e2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,4 @@ -sudo: false +sudo: true dist: trusty language: perl python: 2.7.10 @@ -26,6 +26,10 @@ env: global: - GECKODRIVER_VERSION=0.19.1 - PHANTOMJS_VERSION=2.1.1 +before_install: + - sudo dpkg --add-architecture i386 + - sudo apt-get -qq update + - sudo apt-get install wine1.6 install: - "export PATH=$PWD/travis_phantomjs/phantomjs-$PHANTOMJS_VERSION-linux-x86_64/bin:$PATH" - "if [ $(phantomjs --version) != $PHANTOMJS_VERSION ]; then rm -rf $PWD/travis_phantomjs; mkdir -p $PWD/travis_phantomjs; fi" From 7f60dbda9df28e0bf4834fa4544dcb466256dd6a Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 23 Apr 2018 07:09:47 -0400 Subject: [PATCH 32/53] Check for 404 on getting indexedfasta --- src/JBrowse/Browser.js | 2 ++ src/JBrowse/Store/SeqFeature/IndexedFasta/File.js | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/JBrowse/Browser.js b/src/JBrowse/Browser.js index 77df6c9fbc..c8c9ceaa85 100644 --- a/src/JBrowse/Browser.js +++ b/src/JBrowse/Browser.js @@ -546,6 +546,8 @@ loadRefSeqs: function() { .getRefSeqs(function(refSeqs) { thisB.addRefseqs(refSeqs); deferred.resolve({success:true}); + }, function(error) { + deferred.reject(error); }); return; } diff --git a/src/JBrowse/Store/SeqFeature/IndexedFasta/File.js b/src/JBrowse/Store/SeqFeature/IndexedFasta/File.js index c9f28b9d9e..cd7a13a9c3 100644 --- a/src/JBrowse/Store/SeqFeature/IndexedFasta/File.js +++ b/src/JBrowse/Store/SeqFeature/IndexedFasta/File.js @@ -37,7 +37,7 @@ return declare( null, _readFAI: function( successCallback, failCallback ) { this.fai.fetch( dojo.hitch( this, function(text) { - if (!text) { + if (!text.byteLength) { failCallback("No data read from FASTA index (FAI) file"); return; } From a603c1191c8edfc2621f8e8f86e2cea2df34162b Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 23 Apr 2018 08:41:32 -0400 Subject: [PATCH 33/53] Add ability to pass command line args to electron --- .travis.yml | 2 +- browser/main.js | 19 ++++--------------- src/JBrowse/Browser.js | 24 +++++++++++------------- src/JBrowse/main.js | 5 ++++- tests/electron_tests/spec.js | 12 ++++++++++-- 5 files changed, 30 insertions(+), 32 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6e945454e2..6ec04fbb23 100644 --- a/.travis.yml +++ b/.travis.yml @@ -57,7 +57,7 @@ script: - set -e - ./setup.sh - yarn lint -- npm install electron spectron ava +- npm install electron spectron ava optimist tmp - xvfb-run node_modules/.bin/ava --timeout=60s tests/electron_tests - prove -Isrc/perl5 -r -j3 tests/perl_tests; - utils/jb_run.js -p 9000 & sleep 2 diff --git a/browser/main.js b/browser/main.js index f09bfde756..4ead3e81bd 100644 --- a/browser/main.js +++ b/browser/main.js @@ -4,34 +4,23 @@ const BrowserWindow = electron.BrowserWindow; const Menu = electron.Menu; var menu = require('./menu'); +var argv = require('optimist').argv; -// Keep a global reference of the window object, if you don't, the window will -// be closed automatically when the JavaScript object is garbage collected. -let mainWindow; - - -// This method will be called when Electron has finished -// initialization and is ready to create browser windows. -// Some APIs can only be used after this event occurs. +let mainWindow; app.on('ready', function() { - // Create the browser window. mainWindow = new BrowserWindow({ center: true, title: 'JBrowseDesktop', width: 1024, height: 768 }); + var queryString = Object.keys(argv).map(key => key + '=' + argv[key]).join('&'); - // and load the index.html of the app. - mainWindow.loadURL('file://' + require('path').resolve(__dirname, '..', 'index.html')); - // Emitted when the window is closed. + mainWindow.loadURL('file://' + require('path').resolve(__dirname, '../index.html?'+queryString)); Menu.setApplicationMenu(Menu.buildFromTemplate(menu)); mainWindow.on('closed', function () { - // Dereference the window object, usually you would store windows - // in an array if your app supports multi windows, this is the time - // when you should delete the corresponding element. mainWindow = null; }); }); diff --git a/src/JBrowse/Browser.js b/src/JBrowse/Browser.js index c8c9ceaa85..c493cba72c 100644 --- a/src/JBrowse/Browser.js +++ b/src/JBrowse/Browser.js @@ -505,9 +505,8 @@ fatalError: function( error ) { loadSessions: function() { var fs = electronRequire('fs'); var app = electronRequire('electron').remote.app; - - var path = app.getPath('userData') + "/sessions.json"; - var obj = JSON.parse( fs.readFileSync( path, 'utf8' ) ); + console.log(this.config); + var obj = JSON.parse( fs.readFileSync( this.config.electronData + '/sessions.json', 'utf8' ) ); var table = dojo.create( 'table', { id: 'previousSessionsTable', style: { overflow: 'hidden', width: '90%' } }, dojo.byId('previousSessions') ); var thisB = this; @@ -1106,8 +1105,7 @@ renderDatasetSelect: function( parent ) { saveSessionDir: function( directory ) { var fs = electronRequire('fs'); - var app = electronRequire('electron').remote.app; - var path = app.getPath('userData')+"/sessions.json"; + var path = this.config.electronData + '/sessions.json'; var obj = []; try { @@ -1116,7 +1114,7 @@ saveSessionDir: function( directory ) { catch(e) {} var dir = Util.replacePath( directory ); - if( array.every(obj, function(elt) { return elt.session!=dir; }) ) + if( array.every(obj, function(elt) { return elt.session != dir; }) ) obj.push({ session: dir }); fs.writeFileSync(path, JSON.stringify( obj, null, 2 ), 'utf8'); @@ -1240,14 +1238,14 @@ openFastaElectron: function() { refSeqOrder: results.refSeqOrder }; - // fix dix to be user data if we are accessing a url for fasta - var dir = app.getPath('userData')+"/"+confs[0].label; + // fix dir to be user data if we are accessing a url for fasta + var dir = this.config.electronData + '/' + confs[0].label; try { fs.existsSync(dir) || fs.mkdirSync(dir); fs.writeFileSync( dir + "/trackList.json", JSON.stringify(trackList, null, 2)); - fs.closeSync( fs.openSync( dir+"/tracks.conf", 'w' ) ); + fs.closeSync( fs.openSync( dir + "/tracks.conf", 'w' ) ); this.saveSessionDir( dir ); window.location = window.location.href.split('?')[0] + "?data=" + Util.replacePath( dir ); } catch(e) { alert(e); } @@ -1273,7 +1271,7 @@ openFastaElectron: function() { refSeqOrder: results.refSeqOrder }; try { - var dir = app.getPath('userData')+"/"+confs[0].label; + var dir = thisB.config.electronData + '/' + confs[0].label; fs.existsSync(dir) || fs.mkdirSync(dir); fs.writeFileSync(dir + "/trackList.json", JSON.stringify(trackList, null, 2)); fs.closeSync(fs.openSync( dir+"/tracks.conf", 'w' )); @@ -1311,10 +1309,10 @@ openFastaElectron: function() { refSeqOrder: results.refSeqOrder }; try { - var dir = app.getPath('userData')+"/"+confs[0].label; + var dir = thisB.config.electronData + '/' + confs[0].label; fs.existsSync(dir) || fs.mkdirSync(dir); - fs.writeFileSync(dir + "/trackList.json", JSON.stringify(trackList, null, 2)); - fs.closeSync(fs.openSync( dir+"/tracks.conf", 'w' )); + fs.writeFileSync(dir + '/trackList.json', JSON.stringify(trackList, null, 2)); + fs.closeSync(fs.openSync( dir + '/tracks.conf', 'w' )); thisB.saveSessionDir( dir ); window.location = window.location.href.split('?')[0] + "?data=" + Util.replacePath( dir ); } catch(e) { alert(e); } diff --git a/src/JBrowse/main.js b/src/JBrowse/main.js index 9ea9c12553..39f27c77b5 100644 --- a/src/JBrowse/main.js +++ b/src/JBrowse/main.js @@ -2,6 +2,7 @@ import 'babel-polyfill' require([ 'JBrowse/Browser', + 'JBrowse/Util', 'JBrowse/QueryParamConfigMapper', 'dojo/io-query', 'dojo/json', @@ -13,6 +14,7 @@ require([ ], function ( Browser, + Util, QueryParamConfigMapper, ioQuery, JSON, @@ -60,7 +62,8 @@ function ( return browser.makeCurrentViewURL({ nav: 1, tracklist: 1, overview: 1 }); }, - updateBrowserURL: true + updateBrowserURL: true, + electronData: queryParams.electronData || (Util.isElectron() && electronRequire('electron').remote.app.getPath('userData')) }; window.addEventListener('load', () => { diff --git a/tests/electron_tests/spec.js b/tests/electron_tests/spec.js index 8e79b6ba1c..e3a932f4a2 100644 --- a/tests/electron_tests/spec.js +++ b/tests/electron_tests/spec.js @@ -2,12 +2,14 @@ import test from 'ava'; import {Application} from 'spectron'; import electronPath from 'electron'; import path from 'path'; - +import os from 'os'; +var tmp = require('tmp'); +var tmpobj = tmp.dirSync(); test.beforeEach(async t => { t.context.app = new Application({ path: electronPath, - args: [path.join(__dirname, '../..')], + args: [path.join(__dirname, '../..'), '--electronData', tmpobj.name], env: {SPECTRON: '1'}, requireName: 'electronRequire' }); @@ -51,5 +53,11 @@ test('shows window', async t => { await app.client.waitUntilWindowLoaded() text = await app.client.getText("#previousSessionsTable"); t.true(text != null); + await app.client.click("#previousSessionsTable"); + var tracklabel = app.client.element( "//label[contains(@class,'tracklist-label')]/span[contains(.,'FASTA')]"); + await tracklabel.click(); + var trackPath = "//div[contains(@class,'track-label')][contains(.,'FASTA')]"; + var track = app.client.element(trackPath); + console.log(track); }); From 06d8255273ba3e453d8b6c3ad3f61913fc69006a Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 23 Apr 2018 09:47:06 -0400 Subject: [PATCH 34/53] Fix xpath for ava tests --- src/JBrowse/Browser.js | 14 +++++++++----- tests/electron_tests/spec.js | 17 +++++++++-------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/JBrowse/Browser.js b/src/JBrowse/Browser.js index c493cba72c..50fa1b0946 100644 --- a/src/JBrowse/Browser.js +++ b/src/JBrowse/Browser.js @@ -505,7 +505,6 @@ fatalError: function( error ) { loadSessions: function() { var fs = electronRequire('fs'); var app = electronRequire('electron').remote.app; - console.log(this.config); var obj = JSON.parse( fs.readFileSync( this.config.electronData + '/sessions.json', 'utf8' ) ); var table = dojo.create( 'table', { id: 'previousSessionsTable', style: { overflow: 'hidden', width: '90%' } }, dojo.byId('previousSessions') ); var thisB = this; @@ -1153,7 +1152,9 @@ openConfig: function( plugins ) { try { fs.writeFileSync( dir + "/trackList.json", JSON.stringify(trackList, null, 2) ); - } catch(e) { console.log("Failed to save trackList.json"); } + } catch(e) { + console.error("Failed to save trackList.json"); + } window.location.reload(); }, @@ -1239,8 +1240,9 @@ openFastaElectron: function() { }; // fix dir to be user data if we are accessing a url for fasta - var dir = this.config.electronData + '/' + confs[0].label; - + var dir = this.config.electronData; + fs.existsSync(dir) || fs.mkdirSync(dir); // make base folder exist first before subdir + dir += '/' + confs[0].label; try { fs.existsSync(dir) || fs.mkdirSync(dir); @@ -1271,7 +1273,9 @@ openFastaElectron: function() { refSeqOrder: results.refSeqOrder }; try { - var dir = thisB.config.electronData + '/' + confs[0].label; + var dir = thisB.config.electronData; + fs.existsSync(dir) || fs.mkdirSync(dir); // make base folder exist first before subdir + dir += '/' + confs[0].label; fs.existsSync(dir) || fs.mkdirSync(dir); fs.writeFileSync(dir + "/trackList.json", JSON.stringify(trackList, null, 2)); fs.closeSync(fs.openSync( dir+"/tracks.conf", 'w' )); diff --git a/tests/electron_tests/spec.js b/tests/electron_tests/spec.js index e3a932f4a2..7de31dff3b 100644 --- a/tests/electron_tests/spec.js +++ b/tests/electron_tests/spec.js @@ -51,13 +51,14 @@ test('shows window', async t => { await sleep(5000); await app.restart() await app.client.waitUntilWindowLoaded() - text = await app.client.getText("#previousSessionsTable"); - t.true(text != null); - await app.client.click("#previousSessionsTable"); - var tracklabel = app.client.element( "//label[contains(@class,'tracklist-label')]/span[contains(.,'FASTA')]"); - await tracklabel.click(); - var trackPath = "//div[contains(@class,'track-label')][contains(.,'FASTA')]"; - var track = app.client.element(trackPath); - console.log(track); + //text = await app.client.getText("#previousSessionsTable"); + //t.true(text != null); + var session = await app.client.element('//*[@id="previousSessionsTable"]/tr/td[2]/a').click(); + await sleep(5000); + + var tracklabel = await app.client.element('//label[contains(@class, "tracklist-label")]/span').click(); + await sleep(1000); + var trackPath = await app.client.element('//div[contains(@class,"track-label")][contains(.,"FASTA")]'); + t.true(trackPath != null); }); From bcc87499c01c13f20d3549c30e06334b3939f3ec Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 23 Apr 2018 10:05:16 -0400 Subject: [PATCH 35/53] Fix eslint --- src/JBrowse/Browser.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/JBrowse/Browser.js b/src/JBrowse/Browser.js index 50fa1b0946..e305277c16 100644 --- a/src/JBrowse/Browser.js +++ b/src/JBrowse/Browser.js @@ -505,7 +505,9 @@ fatalError: function( error ) { loadSessions: function() { var fs = electronRequire('fs'); var app = electronRequire('electron').remote.app; - var obj = JSON.parse( fs.readFileSync( this.config.electronData + '/sessions.json', 'utf8' ) ); + var path = this.config.electronData + '/sessions.json'; + + var obj = JSON.parse( fs.readFileSync( path, 'utf8' ) ); var table = dojo.create( 'table', { id: 'previousSessionsTable', style: { overflow: 'hidden', width: '90%' } }, dojo.byId('previousSessions') ); var thisB = this; From 055ac835401fd270494f6d1ac21ecdd74e697549 Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 23 Apr 2018 10:24:52 -0400 Subject: [PATCH 36/53] JSHint unused --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6ec04fbb23..9e4879d995 100644 --- a/.travis.yml +++ b/.travis.yml @@ -44,7 +44,6 @@ install: fi - export PATH=$PATH:$HOME/geckodriver_$GECKODRIVER_VERSION - cpanm --notest GD::Image Text::Markdown DateTime JSON -- npm install -g jshint # only init the python virtualenv if it did not show up in our build cache - if [[ ! -f ~/python/bin/activate ]]; then virtualenv ~/python; fi - source ~/python/bin/activate From 1982a6865939070ccd0bde4087b60fe7bdeab4ce Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 23 Apr 2018 10:42:14 -0400 Subject: [PATCH 37/53] Use fake spectron dialog --- .travis.yml | 2 +- src/JBrowse/View/FileDialog.js | 7 +------ tests/electron_tests/spec.js | 9 ++++++++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9e4879d995..3ffe2e5c85 100644 --- a/.travis.yml +++ b/.travis.yml @@ -56,7 +56,7 @@ script: - set -e - ./setup.sh - yarn lint -- npm install electron spectron ava optimist tmp +- npm install electron spectron ava optimist tmp spectron-fake-dialog - xvfb-run node_modules/.bin/ava --timeout=60s tests/electron_tests - prove -Isrc/perl5 -r -j3 tests/perl_tests; - utils/jb_run.js -p 9000 & sleep 2 diff --git a/src/JBrowse/View/FileDialog.js b/src/JBrowse/View/FileDialog.js index 6e265f7c97..1cec551cea 100644 --- a/src/JBrowse/View/FileDialog.js +++ b/src/JBrowse/View/FileDialog.js @@ -143,12 +143,7 @@ return declare( null, { else { on( localFilesControl.uploader, 'click', function() { var dialog = electronRequire('electron').remote.dialog; - var ret; - if(window.process.env.SPECTRON) { - ret = [window.process.cwd()+"/docs/tutorial/data_files/volvox.fa"]; - } else { - ret = dialog.showOpenDialog({ properties: [ 'openFile','multiSelections' ]}); - } + var ret = dialog.showOpenDialog({ properties: [ 'openFile','multiSelections' ]}); if( ret ) { var paths = array.map( ret, function(replace) { return Util.replacePath(replace); }); resourceListControl.addURLs( paths ); diff --git a/tests/electron_tests/spec.js b/tests/electron_tests/spec.js index 7de31dff3b..730407a824 100644 --- a/tests/electron_tests/spec.js +++ b/tests/electron_tests/spec.js @@ -5,6 +5,8 @@ import path from 'path'; import os from 'os'; var tmp = require('tmp'); var tmpobj = tmp.dirSync(); +const fakeDialog = require('spectron-fake-dialog'); + test.beforeEach(async t => { t.context.app = new Application({ @@ -13,8 +15,13 @@ test.beforeEach(async t => { env: {SPECTRON: '1'}, requireName: 'electronRequire' }); + fakeDialog.apply(t.context.app); - await t.context.app.start(); + console.error(process.cwd()+"/docs/tutorial/data_files/volvox.fa"); + await t.context.app.start() + .then(() => + fakeDialog.mock([ { method: 'showOpenDialog', value: [process.cwd()+"/docs/tutorial/data_files/volvox.fa"] } ]) + ); }); test.afterEach.always(async t => { From 2df4cf6a9a5939fefaffe89e2c40ba806e00d271 Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 23 Apr 2018 10:51:22 -0400 Subject: [PATCH 38/53] Fix resolveUrl on volvox data and make welcome screen have volvox class --- src/JBrowse/Browser.js | 2 +- src/JBrowse/View/Resource/Welcome.html | 2 +- tests/electron_tests/spec.js | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/JBrowse/Browser.js b/src/JBrowse/Browser.js index e305277c16..33303e0e0b 100644 --- a/src/JBrowse/Browser.js +++ b/src/JBrowse/Browser.js @@ -412,7 +412,7 @@ welcomeScreen: function( container, error ) { - request(this.resolveUrl('sample_data/json/volvox/successfully_run')).then( function() { + request(thisB.resolveUrl('sample_data/json/volvox/successfully_run')).then( function() { try { document.getElementById('volvox_data_placeholder') .innerHTML = 'The example dataset is also available. View Volvox test data here.'; diff --git a/src/JBrowse/View/Resource/Welcome.html b/src/JBrowse/View/Resource/Welcome.html index 3a9aca7e37..e986d04513 100644 --- a/src/JBrowse/View/Resource/Welcome.html +++ b/src/JBrowse/View/Resource/Welcome.html @@ -1,4 +1,4 @@ -
+

diff --git a/tests/electron_tests/spec.js b/tests/electron_tests/spec.js index 730407a824..60b8d52d84 100644 --- a/tests/electron_tests/spec.js +++ b/tests/electron_tests/spec.js @@ -17,7 +17,6 @@ test.beforeEach(async t => { }); fakeDialog.apply(t.context.app); - console.error(process.cwd()+"/docs/tutorial/data_files/volvox.fa"); await t.context.app.start() .then(() => fakeDialog.mock([ { method: 'showOpenDialog', value: [process.cwd()+"/docs/tutorial/data_files/volvox.fa"] } ]) From 622289c8678e0a2b767941975f1efd76cee6081c Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 23 Apr 2018 10:56:22 -0400 Subject: [PATCH 39/53] Retab tabs --- index.html | 16 ++++++++-------- src/JBrowse/Browser.js | 2 +- src/JBrowse/Store/SeqFeature/GFF3.js | 6 +++--- src/JBrowse/Store/SeqFeature/GFF3Tabix.js | 6 +++--- src/JBrowse/View/FASTA.js | 20 ++++++++++---------- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/index.html b/index.html index 5c753e936d..3e9c6faee6 100644 --- a/index.html +++ b/index.html @@ -17,10 +17,10 @@ if( document.body ) document.body.setAttribute("JSError",msg); } - if(window.process&&process.versions&&process.versions.electron) { - window.electronRequire = require; - delete window.require; - } + if(window.process&&process.versions&&process.versions.electron) { + window.electronRequire = require; + delete window.require; + }