parent
bf8cfbcb35
commit
bf283c732e
5 changed files with 129 additions and 0 deletions
@ -0,0 +1,25 @@ |
|||||||
|
import actions from 'content/actions'; |
||||||
|
|
||||||
|
const startSet = () => { |
||||||
|
return { type: actions.MARK_START_SET }; |
||||||
|
}; |
||||||
|
|
||||||
|
const startJump = () => { |
||||||
|
return { type: actions.MARK_START_JUMP }; |
||||||
|
}; |
||||||
|
|
||||||
|
const cancel = () => { |
||||||
|
return { type: actions.MARK_CANCEL }; |
||||||
|
}; |
||||||
|
|
||||||
|
const setLocal = (key, y) => { |
||||||
|
return { |
||||||
|
type: actions.MARK_SET_LOCAL, |
||||||
|
key, |
||||||
|
y, |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
export { |
||||||
|
startSet, startJump, cancel, setLocal, |
||||||
|
}; |
@ -0,0 +1,25 @@ |
|||||||
|
import actions from 'content/actions'; |
||||||
|
|
||||||
|
const defaultState = { |
||||||
|
set: false, |
||||||
|
jump: false, |
||||||
|
marks: {}, |
||||||
|
}; |
||||||
|
|
||||||
|
export default function reducer(state = defaultState, action = {}) { |
||||||
|
switch (action.type) { |
||||||
|
case actions.MARK_START_SET: |
||||||
|
return { ...state, set: true }; |
||||||
|
case actions.MARK_START_JUMP: |
||||||
|
return { ...state, jump: true }; |
||||||
|
case actions.MARK_CANCEL: |
||||||
|
return { ...state, set: false, jump: false }; |
||||||
|
case actions.MARK_SET_LOCAL: { |
||||||
|
let marks = { ...state.marks }; |
||||||
|
marks[action.key] = { y: action.y }; |
||||||
|
return { ...state, marks }; |
||||||
|
} |
||||||
|
default: |
||||||
|
return state; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
import actions from 'content/actions'; |
||||||
|
import * as markActions from 'content/actions/mark'; |
||||||
|
|
||||||
|
describe('mark actions', () => { |
||||||
|
describe('startSet', () => { |
||||||
|
it('create MARK_START_SET action', () => { |
||||||
|
let action = markActions.startSet(); |
||||||
|
expect(action.type).to.equal(actions.MARK_START_SET); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
describe('startJump', () => { |
||||||
|
it('create MARK_START_JUMP action', () => { |
||||||
|
let action = markActions.startJump(); |
||||||
|
expect(action.type).to.equal(actions.MARK_START_JUMP); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
describe('cancel', () => { |
||||||
|
it('create MARK_CANCEL action', () => { |
||||||
|
let action = markActions.cancel(); |
||||||
|
expect(action.type).to.equal(actions.MARK_CANCEL); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
describe('setLocal', () => { |
||||||
|
it('create setLocal action', () => { |
||||||
|
let action = markActions.setLocal('a', 30); |
||||||
|
expect(action.type).to.equal(actions.MARK_SET_LOCAL); |
||||||
|
expect(action.key).to.equal('a'); |
||||||
|
expect(action.y).to.equal(30); |
||||||
|
}); |
||||||
|
}); |
||||||
|
}); |
@ -0,0 +1,39 @@ |
|||||||
|
import actions from 'content/actions'; |
||||||
|
import reducer from 'content/reducers/mark'; |
||||||
|
|
||||||
|
describe("mark reducer", () => { |
||||||
|
it('return the initial state', () => { |
||||||
|
let state = reducer(undefined, {}); |
||||||
|
expect(state.set).to.be.false; |
||||||
|
expect(state.jump).to.be.false; |
||||||
|
expect(state.marks).to.be.empty; |
||||||
|
}); |
||||||
|
|
||||||
|
it('starts set mode', () => { |
||||||
|
let action = { type: actions.MARK_START_SET }; |
||||||
|
let state = reducer(undefined, action); |
||||||
|
expect(state.set).to.be.true; |
||||||
|
}); |
||||||
|
|
||||||
|
it('starts jump mode', () => { |
||||||
|
let action = { type: actions.MARK_START_JUMP }; |
||||||
|
let state = reducer(undefined, action); |
||||||
|
expect(state.jump).to.be.true; |
||||||
|
}); |
||||||
|
|
||||||
|
it('cancels set and jump mode', () => { |
||||||
|
let action = { type: actions.MARK_CANCEL }; |
||||||
|
let state = reducer({ set: true }, action); |
||||||
|
expect(state.set).to.be.false; |
||||||
|
|
||||||
|
state = reducer({ jump: true }, action); |
||||||
|
expect(state.jump).to.be.false; |
||||||
|
}); |
||||||
|
|
||||||
|
it('stores local mark', () => { |
||||||
|
let action = { type: actions.MARK_SET_LOCAL, key: 'a', y: 10 }; |
||||||
|
let state = reducer(undefined, action); |
||||||
|
expect(state.marks['a']).to.be.an('object') |
||||||
|
expect(state.marks['a'].y).to.equal(10) |
||||||
|
}); |
||||||
|
}); |
Reference in new issue