mirror of
https://github.com/ianstormtaylor/slate.git
synced 2025-08-22 06:53:25 +02:00
More tests for addMarks
and Leaf.splitLeaves
(#1953)
* Add tests * Add failing test * Start adding tests for Leaf.splitLeaves * More tests for splitLeaves * Fix test actually * Lint and rename test
This commit is contained in:
committed by
Ian Storm Taylor
parent
4b15481f92
commit
910e983215
@@ -239,7 +239,7 @@ class Text extends Record(DEFAULTS) {
|
|||||||
/**
|
/**
|
||||||
* Add a `set` of marks at `index` and `length`.
|
* Add a `set` of marks at `index` and `length`.
|
||||||
* Corner Cases:
|
* Corner Cases:
|
||||||
* 1. If empty text, and if length === 0 and index === 0
|
* 1. If empty text, and if length === 0 and index === 0, will make sure the text contain an empty leaf with the given mark.
|
||||||
*
|
*
|
||||||
* @param {Number} index
|
* @param {Number} index
|
||||||
* @param {Number} length
|
* @param {Number} length
|
||||||
|
@@ -0,0 +1,42 @@
|
|||||||
|
/** @jsx h */
|
||||||
|
|
||||||
|
import h from '../../../helpers/h'
|
||||||
|
|
||||||
|
export default function(change) {
|
||||||
|
change.addMarks(['underline'])
|
||||||
|
}
|
||||||
|
|
||||||
|
export const input = (
|
||||||
|
<value>
|
||||||
|
<document>
|
||||||
|
<paragraph>
|
||||||
|
Some{' '}
|
||||||
|
<b>
|
||||||
|
<anchor />bold
|
||||||
|
</b>{' '}
|
||||||
|
and some{' '}
|
||||||
|
<i>
|
||||||
|
ita<focus />lic
|
||||||
|
</i>
|
||||||
|
</paragraph>
|
||||||
|
</document>
|
||||||
|
</value>
|
||||||
|
)
|
||||||
|
|
||||||
|
export const output = (
|
||||||
|
<value>
|
||||||
|
<document>
|
||||||
|
<paragraph>
|
||||||
|
<anchor />
|
||||||
|
Some{' '}
|
||||||
|
<b>
|
||||||
|
<u>bold</u>
|
||||||
|
</b>
|
||||||
|
<u> and some </u>
|
||||||
|
<i>
|
||||||
|
<u>ita</u>lic
|
||||||
|
</i>
|
||||||
|
</paragraph>
|
||||||
|
</document>
|
||||||
|
</value>
|
||||||
|
)
|
@@ -52,4 +52,5 @@ describe('models', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
require('./text/')
|
require('./text/')
|
||||||
|
require('./leaf/')
|
||||||
})
|
})
|
||||||
|
34
packages/slate/test/models/leaf/index.js
Normal file
34
packages/slate/test/models/leaf/index.js
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import assert from 'assert'
|
||||||
|
import fs from 'fs'
|
||||||
|
import { resolve } from 'path'
|
||||||
|
|
||||||
|
describe('leaf', () => {
|
||||||
|
const dir = resolve(__dirname)
|
||||||
|
|
||||||
|
const methods = fs
|
||||||
|
.readdirSync(dir)
|
||||||
|
.filter(c => c[0] != '.' && c != 'index.js')
|
||||||
|
|
||||||
|
for (const method of methods) {
|
||||||
|
describe(method, () => {
|
||||||
|
const testDir = resolve(dir, method)
|
||||||
|
const tests = fs
|
||||||
|
.readdirSync(testDir)
|
||||||
|
.filter(t => t[0] != '.' && t.includes('.js'))
|
||||||
|
|
||||||
|
for (const test of tests) {
|
||||||
|
const module = require(resolve(testDir, test))
|
||||||
|
const { input, output, skip } = module
|
||||||
|
const fn = module.default
|
||||||
|
const t = skip ? it.skip : it
|
||||||
|
|
||||||
|
t(test.replace('.js', ''), () => {
|
||||||
|
const actual = fn(input)
|
||||||
|
const opts = { preserveData: true }
|
||||||
|
const expected = output.toJSON(opts)
|
||||||
|
assert.deepEqual(actual.toJSON(opts), expected)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
35
packages/slate/test/models/leaf/split-leaves/after-end.js
Normal file
35
packages/slate/test/models/leaf/split-leaves/after-end.js
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/** @jsx h */
|
||||||
|
|
||||||
|
import { List } from 'immutable'
|
||||||
|
import { Leaf } from '../../../..'
|
||||||
|
|
||||||
|
export const input = List([
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cat',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'is',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cute',
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
|
||||||
|
export default function(leaves) {
|
||||||
|
return List(Leaf.splitLeaves(leaves, 'Cat is Cute'.length))
|
||||||
|
}
|
||||||
|
|
||||||
|
export const output = List([
|
||||||
|
List([
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cat',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'is',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cute',
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
List([]),
|
||||||
|
])
|
35
packages/slate/test/models/leaf/split-leaves/before-start.js
Normal file
35
packages/slate/test/models/leaf/split-leaves/before-start.js
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/** @jsx h */
|
||||||
|
|
||||||
|
import { List } from 'immutable'
|
||||||
|
import { Leaf } from '../../../..'
|
||||||
|
|
||||||
|
export const input = List([
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cat',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'is',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cute',
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
|
||||||
|
export default function(leaves) {
|
||||||
|
return List(Leaf.splitLeaves(leaves, 'CatisCute'.length + 1))
|
||||||
|
}
|
||||||
|
|
||||||
|
export const output = List([
|
||||||
|
List([
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cat',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'is',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cute',
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
List([]),
|
||||||
|
])
|
39
packages/slate/test/models/leaf/split-leaves/end.js
Normal file
39
packages/slate/test/models/leaf/split-leaves/end.js
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
/** @jsx h */
|
||||||
|
|
||||||
|
import { List } from 'immutable'
|
||||||
|
import { Leaf } from '../../../..'
|
||||||
|
|
||||||
|
export const input = List([
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cat',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'is',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cute',
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
|
||||||
|
export default function(leaves) {
|
||||||
|
return List(Leaf.splitLeaves(leaves, 'CatisCute'.length))
|
||||||
|
}
|
||||||
|
|
||||||
|
export const output = List([
|
||||||
|
List([
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cat',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'is',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cute',
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
List([
|
||||||
|
Leaf.create({
|
||||||
|
text: '',
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
])
|
39
packages/slate/test/models/leaf/split-leaves/middle.js
Normal file
39
packages/slate/test/models/leaf/split-leaves/middle.js
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
/** @jsx h */
|
||||||
|
|
||||||
|
import { List } from 'immutable'
|
||||||
|
import { Leaf } from '../../../..'
|
||||||
|
|
||||||
|
export const input = List([
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cat',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'is',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cute',
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
|
||||||
|
export default function(leaves) {
|
||||||
|
return List(Leaf.splitLeaves(leaves, 4))
|
||||||
|
}
|
||||||
|
|
||||||
|
export const output = List([
|
||||||
|
List([
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cat',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'i',
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
List([
|
||||||
|
Leaf.create({
|
||||||
|
text: 's',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cute',
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
])
|
35
packages/slate/test/models/leaf/split-leaves/start.js
Normal file
35
packages/slate/test/models/leaf/split-leaves/start.js
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/** @jsx h */
|
||||||
|
|
||||||
|
import { List } from 'immutable'
|
||||||
|
import { Leaf } from '../../../..'
|
||||||
|
|
||||||
|
export const input = List([
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cat',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'is',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cute',
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
|
||||||
|
export default function(leaves) {
|
||||||
|
return List(Leaf.splitLeaves(leaves, 0))
|
||||||
|
}
|
||||||
|
|
||||||
|
export const output = List([
|
||||||
|
List([Leaf.create()]),
|
||||||
|
List([
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cat',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'is',
|
||||||
|
}),
|
||||||
|
Leaf.create({
|
||||||
|
text: 'Cute',
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
])
|
@@ -0,0 +1,16 @@
|
|||||||
|
/** @jsx h */
|
||||||
|
|
||||||
|
import h from '../../../../helpers/h'
|
||||||
|
import { Mark } from '../../../../..'
|
||||||
|
|
||||||
|
export const input = <text>Cat is Cute</text>[0]
|
||||||
|
|
||||||
|
export default function(t) {
|
||||||
|
return t.addMark(0, t.text.length, Mark.create('italic'))
|
||||||
|
}
|
||||||
|
|
||||||
|
export const output = (
|
||||||
|
<text>
|
||||||
|
<i>Cat is Cute</i>
|
||||||
|
</text>
|
||||||
|
)[0]
|
Reference in New Issue
Block a user