diff options
author | Shin'ya Ueoka <ueokande@i-beam.org> | 2017-09-16 23:32:19 +0900 |
---|---|---|
committer | Shin'ya Ueoka <ueokande@i-beam.org> | 2017-09-16 23:32:19 +0900 |
commit | c5529958d53146c8c6826673abe6431a19f1924d (patch) | |
tree | 4952c7ac1ded91d52fd6e424c229022b61b67aa3 /test | |
parent | b2cddcd69b4ae06770d66808624fc43f3dcbcb0e (diff) | |
parent | ae394e28c0cbc8710d4937238c97328afddbca0f (diff) |
Merge branch 'more-redux'
Diffstat (limited to 'test')
-rw-r--r-- | test/actions/background.test.js | 14 | ||||
-rw-r--r-- | test/actions/command.test.js | 51 | ||||
-rw-r--r-- | test/store/index.test.js | 111 |
3 files changed, 111 insertions, 65 deletions
diff --git a/test/actions/background.test.js b/test/actions/background.test.js deleted file mode 100644 index a3203ee..0000000 --- a/test/actions/background.test.js +++ /dev/null @@ -1,14 +0,0 @@ -import { expect } from "chai"; -import actions from '../../src/actions'; -import * as backgroundActions from '../../src/actions/background'; - -describe("background actions", () => { - describe("requestCompletions", () => { - it('create BACKGROUND_REQUEST_COMPLETIONS action', () => { - let action = backgroundActions.requestCompletions('buffer hoge fuga'); - expect(action.type).to.equal(actions.BACKGROUND_REQUEST_COMPLETIONS); - expect(action.command).to.equal('buffer'); - expect(action.keywords).to.equal('hoge fuga'); - }); - }); -}); diff --git a/test/actions/command.test.js b/test/actions/command.test.js deleted file mode 100644 index 01a67f2..0000000 --- a/test/actions/command.test.js +++ /dev/null @@ -1,51 +0,0 @@ -import { expect } from "chai"; -import actions from '../../src/actions'; -import * as commandActions from '../../src/actions/command'; - -describe("command actions", () => { - describe("exec", () => { - context("open command", () => { - it('create COMMAND_OPEN_URL acion with a full url', () => { - let action = commandActions.exec("open https://github.com/") - expect(action.type).to.equal(actions.COMMAND_OPEN_URL); - expect(action.url).to.equal('https://github.com/'); - }); - - it('create COMMAND_OPEN_URL acion with a domain name', () => { - let action = commandActions.exec("open github.com") - expect(action.type).to.equal(actions.COMMAND_OPEN_URL); - expect(action.url).to.equal('http://github.com'); - }); - }); - - context("tabopen command", () => { - it('create COMMAND_TABOPEN_URL acion with a full url', () => { - let action = commandActions.exec("tabopen https://github.com/") - expect(action.type).to.equal(actions.COMMAND_TABOPEN_URL); - expect(action.url).to.equal('https://github.com/'); - }); - - it('create COMMAND_TABOPEN_URL acion with a domain name', () => { - let action = commandActions.exec("tabopen github.com") - expect(action.type).to.equal(actions.COMMAND_TABOPEN_URL); - expect(action.url).to.equal('http://github.com'); - }); - }); - - context("buffer command", () => { - it('create COMMAND_BUFFER acion with a keywords', () => { - let action = commandActions.exec("buffer foo bar") - expect(action.type).to.equal(actions.COMMAND_BUFFER); - expect(action.keywords).to.equal('foo bar'); - }); - }); - - context("b command", () => { - it('create COMMAND_BUFFER acion with a keywords', () => { - let action = commandActions.exec("b foo bar") - expect(action.type).to.equal(actions.COMMAND_BUFFER); - expect(action.keywords).to.equal('foo bar'); - }); - }); - }); -}); diff --git a/test/store/index.test.js b/test/store/index.test.js new file mode 100644 index 0000000..e19d50e --- /dev/null +++ b/test/store/index.test.js @@ -0,0 +1,111 @@ +import { expect } from "chai"; +import { createStore } from '../../src/store'; + +describe("Store class", () => { + const reducer = (state, action) => { + if (state == undefined) { + return 0; + } + return state + action; + }; + + describe("#dispatch", () => { + it('transit status by immediate action', () => { + let store = createStore(reducer); + store.dispatch(10); + expect(store.getState()).to.equal(10); + + store.dispatch(-20); + expect(store.getState()).to.equal(-10); + }); + + it('returns next state by immediate action', () => { + let store = createStore(reducer); + let dispatchedAction = store.dispatch(11); + expect(dispatchedAction).to.equal(11); + }); + + it('transit status by Promise action', () => { + let store = createStore(reducer); + let p1 = Promise.resolve(10); + + return store.dispatch(p1).then(() => { + expect(store.getState()).to.equal(10); + }).then(() => { + store.dispatch(Promise.resolve(-20)); + }).then(() => { + expect(store.getState()).to.equal(-10); + }); + }); + + it('returns next state by promise action', () => { + let store = createStore(reducer); + let dispatchedAction = store.dispatch(Promise.resolve(11)); + return dispatchedAction.then((value) => { + expect(value).to.equal(11); + }); + }); + }); + + describe("#subscribe", () => { + it('invoke callback', (done) => { + let store = createStore(reducer); + store.subscribe(() => { + expect(store.getState()).to.equal(15); + done(); + }); + store.dispatch(15); + }); + + it('propagate sender object', (done) => { + let store = createStore(reducer); + store.subscribe((sender) => { + expect(sender).to.equal('sender'); + done(); + }); + store.dispatch(15, 'sender'); + }); + }) + + describe("catcher", () => { + it('catch an error in reducer on initializing by immediate action', (done) => { + let store = createStore(() => { + throw new Error(); + }, (e) => { + expect(e).to.be.an('error'); + done(); + }); + }); + + it('catch an error in reducer on initializing by immediate action', (done) => { + let store = createStore((state, action) => { + if (state === undefined) return 0; + throw new Error(); + }, (e) => { + expect(e).to.be.an('error'); + done(); + }); + store.dispatch(20); + }); + + it('catch an error in reducer on initializing by promise action', (done) => { + let store = createStore((state, action) => { + if (state === undefined) return 0; + throw new Error(); + }, (e) => { + expect(e).to.be.an('error'); + done(); + }); + store.dispatch(Promise.resolve(20)); + }); + + it('catch an error in promise action', (done) => { + let store = createStore((state, action) => 0, (e) => { + expect(e).to.be.an('error'); + done(); + }); + store.dispatch(new Promise(() => { throw new Error() })); + }); + }) +}); + |