feat: add ci and op convert insert test

This commit is contained in:
cudr 2019-10-22 00:05:46 +03:00
parent 65bb9b134d
commit cc071a2d35
10 changed files with 101 additions and 8 deletions

17
.travis.yml Normal file
View File

@ -0,0 +1,17 @@
language: node_js
node_js:
- '12'
env:
- workerCount=3 timeout=600000
script:
- npm run test
install:
- npm run bootstrap
cache:
directories:
- node_modules

View File

@ -9,6 +9,7 @@
"build": "lerna run build --stream", "build": "lerna run build --stream",
"watch": "lerna run --parallel watch", "watch": "lerna run --parallel watch",
"prebuild": "rm -rf ./packages/**/lib/", "prebuild": "rm -rf ./packages/**/lib/",
"test": "lerna run test --stream",
"format": "prettier --write" "format": "prettier --write"
}, },
"workspaces": [ "workspaces": [

View File

@ -21,7 +21,8 @@
"build": "yarn run build:types && yarn run build:js", "build": "yarn run build:types && yarn run build:js",
"build:types": "tsc --emitDeclarationOnly", "build:types": "tsc --emitDeclarationOnly",
"build:js": "babel src --out-dir lib --extensions \".ts,.tsx\" --source-maps inline", "build:js": "babel src --out-dir lib --extensions \".ts,.tsx\" --source-maps inline",
"watch": "yarn build:js -w" "watch": "yarn build:js -w",
"test": "jest"
}, },
"dependencies": { "dependencies": {
"typescript": "^3.6.3" "typescript": "^3.6.3"
@ -32,7 +33,10 @@
"@babel/plugin-proposal-class-properties": "^7.5.5", "@babel/plugin-proposal-class-properties": "^7.5.5",
"@babel/plugin-proposal-object-rest-spread": "^7.5.5", "@babel/plugin-proposal-object-rest-spread": "^7.5.5",
"@babel/preset-env": "^7.6.0", "@babel/preset-env": "^7.6.0",
"@babel/preset-typescript": "^7.6.0" "@babel/preset-typescript": "^7.6.0",
"@types/jest": "^24.0.19",
"jest": "^24.9.0",
"ts-jest": "^24.1.0"
}, },
"directories": { "directories": {
"lib": "lib" "lib": "lib"
@ -41,5 +45,14 @@
"slate", "slate",
"automerge", "automerge",
"bridge" "bridge"
] ],
"jest": {
"roots": [
"<rootDir>/src"
],
"transform": {
"^.+\\.ts?$": "ts-jest"
},
"testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$"
}
} }

View File

@ -1,17 +1,19 @@
import { Operation, SyncDoc } from '../model/index' import { Operation, SyncDoc } from '../model/index'
// TODO: handle annotation ops
export const addAnnotation = (doc: SyncDoc, op: Operation): SyncDoc => { export const addAnnotation = (doc: SyncDoc, op: Operation): SyncDoc => {
console.log('addAnnotation!!!', op.toJS()) // console.log('addAnnotation!!!', op.toJS())
return doc return doc
} }
export const removeAnnotation = (doc: SyncDoc, op: Operation): SyncDoc => { export const removeAnnotation = (doc: SyncDoc, op: Operation): SyncDoc => {
console.log('removeAnnotation!!!', op.toJS()) // console.log('removeAnnotation!!!', op.toJS())
return doc return doc
} }
export const setAnnotation = (doc: SyncDoc, op: Operation): SyncDoc => { export const setAnnotation = (doc: SyncDoc, op: Operation): SyncDoc => {
console.log('setAnnotation!!!', op.toJS()) // console.log('setAnnotation!!!', op.toJS())
return doc return doc
} }

View File

@ -0,0 +1,34 @@
import * as Automerge from 'automerge'
import { toSlateOp } from './index'
import { createDoc, cloneDoc, createParagraphJSON } from '../utils'
describe('convert operations to slatejs model', () => {
it('convert insert operations', () => {
const doc1 = createDoc()
const doc2 = cloneDoc(doc1)
const change = Automerge.change(doc1, 'change', (d: any) => {
d.document.nodes.push(createParagraphJSON('hello!'))
d.document.nodes[1].nodes[0].text = 'hello!'
})
const operations = Automerge.diff(doc2, change)
const slateOps = toSlateOp(operations, change)
const expectedOps = [
{
type: 'insert_node',
path: [1],
node: { object: 'block', type: 'paragraph', nodes: [] }
},
{
type: 'insert_node',
path: [1, 0],
node: { object: 'text', marks: [], text: 'hello!' }
}
]
expect(slateOps).toStrictEqual(expectedOps)
})
})

View File

@ -20,6 +20,7 @@ const AnnotationSetOp = ({ key, value }: Automerge.Diff) => (map, doc) => {
/** /**
* Looks like set_annotation option is broken, temporary disabled * Looks like set_annotation option is broken, temporary disabled
*/ */
// if (!doc.annotations[key]) { // if (!doc.annotations[key]) {
op = { op = {
type: 'add_annotation', type: 'add_annotation',

View File

@ -51,7 +51,7 @@ export const removeCursor = (doc: SyncDoc, key: CursorKey) => {
return doc return doc
} }
export const cursorOpFilter = (ops: Immutable.List<Operation>, type: string) => export const cursorOpFilter = (ops: any, type: string): any =>
ops.filter(op => { ops.filter(op => {
if (op.type === 'set_annotation') { if (op.type === 'set_annotation') {
return !( return !(

View File

@ -1,6 +1,8 @@
import toSync from './toSync' import toSync from './toSync'
import hexGen from './hexGen' import hexGen from './hexGen'
export * from './testUtils'
const toJS = node => { const toJS = node => {
try { try {
return JSON.parse(JSON.stringify(node)) return JSON.parse(JSON.stringify(node))

View File

@ -0,0 +1,24 @@
import * as Automerge from 'automerge'
import { ValueJSON, TextJSON, NodeJSON } from 'slate'
export const createTextJSON = (text: string = ''): TextJSON => ({
object: 'text',
marks: [],
text
})
export const createParagraphJSON = (text: string = ''): NodeJSON => ({
object: 'block',
type: 'paragraph',
nodes: [createTextJSON(text)]
})
export const createValueJSON = (): ValueJSON => ({
document: {
nodes: [createParagraphJSON()]
}
})
export const createDoc = () => Automerge.from(createValueJSON())
export const cloneDoc = doc => Automerge.change(doc, '', d => d)

View File

@ -27,7 +27,6 @@
}, },
"scripts": { "scripts": {
"start": "react-scripts start", "start": "react-scripts start",
"build": "react-scripts build",
"dev": "concurrently \"yarn start\" \"yarn serve\"", "dev": "concurrently \"yarn start\" \"yarn serve\"",
"serve": "nodemon --watch ../backend/lib --inspect server.js" "serve": "nodemon --watch ../backend/lib --inspect server.js"
}, },