1
0
mirror of https://github.com/ianstormtaylor/slate.git synced 2025-08-30 18:39:51 +02:00

add plain text serializer tests

This commit is contained in:
Ian Storm Taylor
2016-07-14 17:40:20 -07:00
parent 6a8c349050
commit 6e6fc116a2
24 changed files with 341 additions and 17 deletions

View File

@@ -12,19 +12,40 @@ import Text from '../models/text'
*/
function deserialize(string) {
const characters = string.split('').map(char => {
return { text: char }
return State.create({
document: Document.create({
nodes: string.split('\n').map(deserializeLine)
})
})
}
const text = Text.create({ characters })
const block = Block.create({
type: 'paragraph',
nodes: [text]
/**
* Deserialize a `line` of text.
*
* @param {String} line
* @return {Block}
*/
function deserializeLine(line) {
return Block.create({
type: 'line',
nodes: [
Text.create({
characters: line.split('').map(deserializeCharacter)
})
]
})
}
const document = Document.create({ nodes: [block] })
const state = State.create({ document })
return state
/**
* Deserialize a `character`.
*
* @param {String} char
* @return {Character}
*/
function deserializeCharacter(char) {
return { text: char }
}
/**
@@ -35,7 +56,7 @@ function deserialize(string) {
*/
function serialize(state) {
return state.blocks
return state.document.nodes
.map(block => block.text)
.join('\n')
}

View File

@@ -0,0 +1,2 @@
one
two

View File

@@ -0,0 +1,24 @@
nodes:
- type: line
isVoid: false
data: {}
nodes:
- characters:
- text: o
marks: []
- text: n
marks: []
- text: e
marks: []
- type: line
isVoid: false
data: {}
nodes:
- characters:
- text: t
marks: []
- text: w
marks: []
- text: o
marks: []

View File

@@ -0,0 +1 @@
one

View File

@@ -0,0 +1,13 @@
nodes:
- type: line
isVoid: false
data: {}
nodes:
- characters:
- text: o
marks: []
- text: n
marks: []
- text: e
marks: []

View File

@@ -0,0 +1,26 @@
import { Block, Character, Document, Inline, Mark, State, Text } from '../../../../../..'
export default State.create({
document: Document.create({
nodes: Block.createList([
{
type: 'quote',
nodes: Block.createList([
{
type: 'paragraph',
nodes: Text.createList([
{
characters: Character.createList([
{ text: 'o' },
{ text: 'n' },
{ text: 'e' }
])
}
])
}
])
}
])
})
})

View File

@@ -0,0 +1 @@
one

View File

@@ -0,0 +1,22 @@
import { Block, Character, Document, Inline, Mark, State, Text } from '../../../../../..'
export default State.create({
document: Document.create({
nodes: Block.createList([
{
type: 'paragraph',
data: { key: 'value' },
nodes: Text.createList([
{
characters: Character.createList([
{ text: 'o' },
{ text: 'n' },
{ text: 'e' }
])
}
])
}
])
})
})

View File

@@ -0,0 +1,22 @@
import { Block, Character, Document, Inline, Mark, State, Text } from '../../../../../..'
export default State.create({
document: Document.create({
nodes: Block.createList([
{
type: 'paragraph',
isVoid: true,
nodes: Text.createList([
{
characters: Character.createList([
{ text: 'o' },
{ text: 'n' },
{ text: 'e' }
])
}
])
}
])
})
})

View File

@@ -0,0 +1,21 @@
import { Block, Character, Document, Inline, Mark, State, Text } from '../../../../../..'
export default State.create({
document: Document.create({
nodes: Block.createList([
{
type: 'paragraph',
nodes: Text.createList([
{
characters: Character.createList([
{ text: 'o' },
{ text: 'n' },
{ text: 'e' }
])
}
])
}
])
})
})

View File

@@ -0,0 +1 @@
one

View File

@@ -0,0 +1,28 @@
import { Block, Character, Document, Inline, Mark, State, Text } from '../../../../../..'
export default State.create({
document: Document.create({
nodes: Block.createList([
{
type: 'paragraph',
nodes: Text.createList([
{
characters: Character.createList([
{ text: 'o' },
{ text: 'n' },
{
text: 'e',
marks: Mark.createSet([
{
type: 'bold'
}
])
}
])
}
])
}
])
})
})

View File

@@ -0,0 +1,31 @@
import { Block, Character, Document, Inline, Mark, State, Text } from '../../../../../..'
export default State.create({
document: Document.create({
nodes: Block.createList([
{
type: 'paragraph',
nodes: Inline.createList([
{
type: 'link',
nodes: Inline.createList([
{
type: 'hashtag',
nodes: Text.createList([
{
characters: Character.createList([
{ text: 'o' },
{ text: 'n' },
{ text: 'e' }
])
}
])
}
])
}
])
}
])
})
})

View File

@@ -0,0 +1 @@
one

View File

@@ -0,0 +1,27 @@
import { Block, Character, Document, Inline, Mark, State, Text } from '../../../../../..'
export default State.create({
document: Document.create({
nodes: Block.createList([
{
type: 'paragraph',
nodes: Inline.createList([
{
type: 'link',
data: { key: 'value' },
nodes: Text.createList([
{
characters: Character.createList([
{ text: 'o' },
{ text: 'n' },
{ text: 'e' }
])
}
])
}
])
}
])
})
})

View File

@@ -0,0 +1,27 @@
import { Block, Character, Document, Inline, Mark, State, Text } from '../../../../../..'
export default State.create({
document: Document.create({
nodes: Block.createList([
{
type: 'paragraph',
nodes: Inline.createList([
{
type: 'link',
isVoid: true,
nodes: Text.createList([
{
characters: Character.createList([
{ text: 'o' },
{ text: 'n' },
{ text: 'e' }
])
}
])
}
])
}
])
})
})

View File

@@ -0,0 +1,26 @@
import { Block, Character, Document, Inline, Mark, State, Text } from '../../../../../..'
export default State.create({
document: Document.create({
nodes: Block.createList([
{
type: 'paragraph',
nodes: Inline.createList([
{
type: 'link',
nodes: Text.createList([
{
characters: Character.createList([
{ text: 'o' },
{ text: 'n' },
{ text: 'e' }
])
}
])
}
])
}
])
})
})

View File

@@ -0,0 +1 @@
one

View File

@@ -11,9 +11,32 @@ import { resolve } from 'path'
*/
const SERIALIZERS = {
html: Html,
plain: Plain,
raw: Raw
html: (dir) => {
const module = require(dir)
const html = new Html(module)
return {
extension: 'html',
deserialize: html.deserialize,
serialize: html.serialize,
read: file => fs.readFileSync(file, 'utf8').trim()
}
},
plain: (dir) => ({
extension: 'txt',
deserialize: Plain.deserialize,
serialize: Plain.serialize,
read: file => fs.readFileSync(file, 'utf8').trim()
}),
raw: (dir) => ({
extension: 'yaml',
deserialize: Raw.deserialize,
serialize: Raw.serialize,
read: file => readMetadata.sync(file)
})
}
/**
@@ -32,9 +55,10 @@ describe('serializers', () => {
for (const test of tests) {
it(test, () => {
const innerDir = resolve(dir, test)
const input = readMetadata.sync(resolve(innerDir, 'input.yaml'))
const Serializer = SERIALIZERS[serializer](innerDir)
const expected = readMetadata.sync(resolve(innerDir, 'output.yaml'))
const Serializer = SERIALIZERS[serializer]
const input = Serializer.read(resolve(innerDir, `input.${Serializer.extension}`))
const state = Serializer.deserialize(input)
const json = state.document.toJS()
strictEqual(clean(json), expected)
@@ -49,10 +73,12 @@ describe('serializers', () => {
for (const test of tests) {
it(test, () => {
const innerDir = resolve(dir, test)
const Serializer = SERIALIZERS[serializer](innerDir)
const input = require(resolve(innerDir, 'input.js')).default
const expected = readMetadata.sync(resolve(innerDir, 'output.yaml'))
const Serializer = SERIALIZERS[serializer]
const expected = Serializer.read(resolve(innerDir, `output.${Serializer.extension}`))
const serialized = Serializer.serialize(input)
debugger
strictEqual(serialized, expected)
})
}