mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-22 07:08:10 +00:00
[web] Add tests for src/js/components/ValueEditor/ValueEditor.js
This commit is contained in:
parent
d63e01d48d
commit
204dea4a2e
155
web/src/js/__tests__/components/ValueEditor/ValueEditorSpec.js
Normal file
155
web/src/js/__tests__/components/ValueEditor/ValueEditorSpec.js
Normal file
@ -0,0 +1,155 @@
|
||||
import React from 'react'
|
||||
import renderer from 'react-test-renderer'
|
||||
import TestUtils from 'react-dom/test-utils'
|
||||
import ValueEditor from '../../../components/ValueEditor/ValueEditor'
|
||||
import { Key } from '../../../utils'
|
||||
|
||||
describe('ValueEditor Component', () => {
|
||||
|
||||
let mockFn = jest.fn()
|
||||
it ('should render correctly', () => {
|
||||
let valueEditor = renderer.create(
|
||||
<ValueEditor content="foo" onDone={mockFn}/>
|
||||
),
|
||||
tree = valueEditor.toJSON()
|
||||
expect(tree).toMatchSnapshot()
|
||||
})
|
||||
|
||||
let valueEditor = TestUtils.renderIntoDocument(
|
||||
<ValueEditor content="<script>foo</script>" onDone={mockFn}/>
|
||||
)
|
||||
it('should handle this.blur', () => {
|
||||
valueEditor.input.blur = jest.fn()
|
||||
valueEditor.blur()
|
||||
expect(valueEditor.input.blur).toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('should handle reset', () => {
|
||||
valueEditor.reset()
|
||||
expect(valueEditor.input.innerHTML).toEqual(
|
||||
_.escape("<script>foo</script>")
|
||||
)
|
||||
})
|
||||
|
||||
it('should handle paste', () => {
|
||||
let mockEvent = {
|
||||
preventDefault: jest.fn(),
|
||||
clipboardData: { getData: (t) => "foo content"}
|
||||
}
|
||||
document.execCommand = jest.fn()
|
||||
valueEditor.onPaste(mockEvent)
|
||||
expect(document.execCommand).toBeCalledWith('insertHTML', false, "foo content")
|
||||
})
|
||||
|
||||
it('should handle mouseDown', () => {
|
||||
window.addEventListener = jest.fn()
|
||||
valueEditor.onMouseDown({})
|
||||
expect(valueEditor._mouseDown).toBeTruthy()
|
||||
expect(window.addEventListener).toBeCalledWith('mouseup', valueEditor.onMouseUp)
|
||||
})
|
||||
|
||||
it('should handle mouseUp', () => {
|
||||
window.removeEventListener = jest.fn()
|
||||
valueEditor.onMouseUp()
|
||||
expect(window.removeEventListener).toBeCalledWith('mouseup', valueEditor.onMouseUp)
|
||||
})
|
||||
|
||||
it('should handle focus', () => {
|
||||
let mockEvent = { clientX: 1, clientY: 2 },
|
||||
mockSelection = {
|
||||
rangeCount: 1,
|
||||
getRangeAt: jest.fn( (index) => {return { selectNodeContents: jest.fn() }}),
|
||||
removeAllRanges: jest.fn(),
|
||||
addRange: jest.fn()
|
||||
},
|
||||
clearState = (v) => {
|
||||
v._mouseDown = false
|
||||
v._ignore_events = false
|
||||
v.state.editable = false
|
||||
}
|
||||
window.getSelection = () => mockSelection
|
||||
|
||||
// return undefined when mouse down
|
||||
valueEditor.onMouseDown()
|
||||
expect(valueEditor.onFocus(mockEvent)).toEqual(undefined)
|
||||
valueEditor.onMouseUp()
|
||||
|
||||
// sel.rangeCount > 0
|
||||
valueEditor.onFocus(mockEvent)
|
||||
expect(mockSelection.getRangeAt).toBeCalledWith(0)
|
||||
expect(valueEditor.state.editable).toBeTruthy()
|
||||
expect(mockSelection.removeAllRanges).toBeCalled()
|
||||
expect(mockSelection.addRange).toBeCalled()
|
||||
clearState(valueEditor)
|
||||
|
||||
// document.caretPositionFromPoint
|
||||
mockSelection.rangeCount = 0
|
||||
let mockRange = { setStart: jest.fn(), selectNodeContents: jest.fn() }
|
||||
|
||||
document.caretPositionFromPoint = jest.fn((x, y) => {
|
||||
return { offsetNode: 0, offset: x + y}
|
||||
})
|
||||
document.createRange = jest.fn(() => mockRange)
|
||||
valueEditor.onFocus(mockEvent)
|
||||
expect(mockRange.setStart).toBeCalledWith(0, 3)
|
||||
clearState(valueEditor)
|
||||
document.caretPositionFromPoint = null
|
||||
|
||||
//document.caretRangeFromPoint
|
||||
document.caretRangeFromPoint = jest.fn(() => mockRange)
|
||||
valueEditor.onFocus(mockEvent)
|
||||
expect(document.caretRangeFromPoint).toBeCalledWith(1, 2)
|
||||
clearState(valueEditor)
|
||||
document.caretRangeFromPoint = null
|
||||
|
||||
//else
|
||||
valueEditor.onFocus(mockEvent)
|
||||
expect(mockRange.selectNodeContents).toBeCalledWith(valueEditor.input)
|
||||
clearState(valueEditor)
|
||||
})
|
||||
|
||||
it('should handle click', () => {
|
||||
valueEditor.onMouseUp = jest.fn()
|
||||
valueEditor.onFocus = jest.fn()
|
||||
valueEditor.onClick('foo')
|
||||
expect(valueEditor.onMouseUp).toBeCalled()
|
||||
expect(valueEditor.onFocus).toBeCalledWith('foo')
|
||||
})
|
||||
|
||||
it('should handle blur', () => {
|
||||
// return undefined
|
||||
valueEditor._ignore_events = true
|
||||
expect(valueEditor.onBlur({})).toEqual(undefined)
|
||||
// else
|
||||
valueEditor._ignore_events = false
|
||||
valueEditor.onBlur({})
|
||||
expect(valueEditor.state.editable).toBeFalsy()
|
||||
expect(valueEditor.props.onDone).toBeCalledWith(valueEditor.input.textContent)
|
||||
})
|
||||
|
||||
it('should handle key down', () => {
|
||||
let mockKeyEvent = (keyCode, shiftKey=false) => {
|
||||
return {
|
||||
keyCode: keyCode,
|
||||
shiftKey: shiftKey,
|
||||
stopPropagation: jest.fn(),
|
||||
preventDefault: jest.fn()
|
||||
}
|
||||
}
|
||||
valueEditor.reset = jest.fn()
|
||||
valueEditor.blur = jest.fn()
|
||||
valueEditor.onKeyDown(mockKeyEvent(Key.ESC))
|
||||
expect(valueEditor.reset).toBeCalled()
|
||||
expect(valueEditor.blur).toBeCalled()
|
||||
valueEditor.blur.mockReset()
|
||||
|
||||
valueEditor.onKeyDown(mockKeyEvent(Key.ENTER))
|
||||
expect(valueEditor.blur).toBeCalled()
|
||||
|
||||
valueEditor.onKeyDown(mockKeyEvent(Key.SPACE))
|
||||
})
|
||||
|
||||
it('should handle input', () => {
|
||||
valueEditor.onInput()
|
||||
})
|
||||
})
|
@ -0,0 +1,21 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`ValueEditor Component should render correctly 1`] = `
|
||||
<div
|
||||
className="inline-input editable"
|
||||
contentEditable={undefined}
|
||||
dangerouslySetInnerHTML={
|
||||
Object {
|
||||
"__html": "foo",
|
||||
}
|
||||
}
|
||||
onBlur={[Function]}
|
||||
onClick={[Function]}
|
||||
onFocus={[Function]}
|
||||
onInput={[Function]}
|
||||
onKeyDown={[Function]}
|
||||
onMouseDown={[Function]}
|
||||
onPaste={[Function]}
|
||||
tabIndex={0}
|
||||
/>
|
||||
`;
|
Loading…
Reference in New Issue
Block a user