Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,362 changes: 51 additions & 1,311 deletions package-lock.json

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@
"ot-text-unicode": "^3.0.0"
},
"devDependencies": {
"coffeescript": "^2.3.2",
"coffeescript": "^2.4.1",
"mocha": "^5.2.0",
"ot-fuzzer": "^1.1.0",
"ot-simple": "^1.0.0",
"ot-text": "^1.0.2",
"terser": "^3.11.0"
},
"scripts": {
"test": "mocha test/cursor.coffee test/test.coffee test/immutable.coffee",
"test": "mocha test/cursor.js test/test.js test/immutable.js",
"fuzzer": "node test/fuzzer.js",
"prepare": "terser -d process.env.JSON1_RELEASE_MODE=true -c pure_funcs=log,keep_fargs=false,passes=2 -b < lib/json1.js > lib/json1.release.js"
},
Expand Down
76 changes: 0 additions & 76 deletions test/cursor.coffee

This file was deleted.

111 changes: 111 additions & 0 deletions test/cursor.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
const { writeCursor, readCursor } = require('../lib/cursor')
const assert = require('assert')

const data = require('fs')
.readFileSync(__dirname + '/ops.json', 'utf8')
.split('\n')
.filter(x => x !== '')
.map(JSON.parse)

describe('cursors', function() {
describe('writeCursor duplicates', function() {
const test = op => {
const w = writeCursor()

const f = l => {
assert(Array.isArray(l))
let depth = 0
for (let c of l) {
if (['string', 'number'].includes(typeof c)) {
depth++
w.descend(c)
} else if (Array.isArray(c)) {
f(c)
} else if (typeof c === 'object') {
for (let k in c) {
const v = c[k]
w.write(k, v)
}
}
}

return __range__(0, depth, false).map(i => w.ascend())
}

if (op !== null) {
f(op)
}
return assert.deepEqual(op, w.get())
}

return data.map(d => (d => it(`${JSON.stringify(d)}`, () => test(d)))(d))
})

describe('copy using read cursors', function() {
const test = op => {
const r = readCursor(op)
const w = writeCursor()
const path = []
const f = () => {
const component = r.getComponent()
if (component) {
// console.log 'component', component
for (let k in component) {
const v = component[k]
w.write(k, v)
}
}

assert.deepStrictEqual(r.getPath(), path)
assert.deepStrictEqual(w.getPath(), path)

const result = []
for (let k of r) {
path.push(k)
w.descend(k)
f()
w.ascend()
result.push(path.pop())
}
return result
}

f()

return assert.deepEqual(op, w.get())
}
// console.log op
// console.log w.get()
return data.map(d => it(`${JSON.stringify(d)}`, () => test(d)))
})

return describe('fuzzer', () =>
it('cleans up position after mergeTree', () => {
const a = [1, 'c', { d: 1 }]
const w = writeCursor(a)

w.descend(0)

w.descend('a')
w.write('p', 1)
w.ascend()
w.ascend()

w.descend(1)
w.mergeTree([{ r: true }])
w.descend('b')
w.write('p', 0) // Crash!
w.ascend()
return w.ascend()
}))
})

function __range__(left, right, inclusive) {
const range = []
const ascending = left < right
const end = !inclusive ? right : ascending ? right + 1 : right - 1
for (let i = left; ascending ? i < end : i > end; ascending ? i++ : i--) {
range.push(i)
}
return range
}
8 changes: 3 additions & 5 deletions test/fuzzer.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
require('coffeescript/register')

const assert = require('assert')
// const {type} = require('../index')
const {type} = require('../lib/json1')
const { type } = require('../lib/json1')

const run = module.exports = () => {
const run = (module.exports = () => {
// require('./lib/log').quiet = true
// type.debug = true
const fuzzer = require('ot-fuzzer')
Expand All @@ -15,6 +13,6 @@ const run = module.exports = () => {
// const tracer = require('./tracer')(_t, genOp)
//fuzzer(tracer, tracer.genOp, 100000)
fuzzer(_t, genOp, 10000000)
}
})

if (require.main === module) run()
Loading