Skip to content

Commit

Permalink
test: Port collection-access tests to TypeScript
Browse files Browse the repository at this point in the history
  • Loading branch information
eemeli committed Apr 22, 2022
1 parent 6b6f866 commit c0db02a
Showing 1 changed file with 84 additions and 42 deletions.
126 changes: 84 additions & 42 deletions tests/doc/collection-access.js → tests/collection-access.ts
@@ -1,10 +1,28 @@
import { Document, parseDocument, Pair } from 'yaml'
/* eslint-disable @typescript-eslint/ban-ts-comment */

import {
Document,
parseDocument,
Pair,
Scalar,
YAMLMap,
YAMLOMap,
YAMLSeq,
YAMLSet
} from 'yaml'

describe('Map', () => {
let doc, map
let doc: Document
let map: YAMLMap<
string | Scalar<string>,
| number
| string
| Scalar<number | string>
| YAMLMap<string | Scalar<string>, number | Scalar<number>>
>
beforeEach(() => {
doc = new Document({ a: 1, b: { c: 3, d: 4 } })
map = doc.contents
map = doc.contents as any
expect(map.items).toMatchObject([
{ key: { value: 'a' }, value: { value: 1 } },
{
Expand All @@ -22,6 +40,7 @@ describe('Map', () => {
test('add', () => {
map.add({ key: 'c', value: 'x' })
expect(map.get('c')).toBe('x')
// @ts-expect-error
expect(() => map.add('a')).toThrow(/already set/)
expect(() => map.add(new Pair('c', 'y'))).toThrow(/already set/)
expect(map.items).toHaveLength(3)
Expand All @@ -38,14 +57,19 @@ describe('Map', () => {
test('get with value', () => {
expect(map.get('a')).toBe(1)
expect(map.get('a', true)).toMatchObject({ value: 1 })
expect(map.get('b').toJSON()).toMatchObject({ c: 3, d: 4 })
expect(map.get<YAMLMap<string, number>>('b')?.toJSON()).toMatchObject({
c: 3,
d: 4
})
expect(map.get('c')).toBeUndefined()
})

test('get with node', () => {
expect(map.get(doc.createNode('a'))).toBe(1)
expect(map.get(doc.createNode('a'), true)).toMatchObject({ value: 1 })
expect(map.get(doc.createNode('b')).toJSON()).toMatchObject({ c: 3, d: 4 })
expect(
map.get<YAMLMap<string, number>>(doc.createNode('b'))?.toJSON()
).toMatchObject({ c: 3, d: 4 })
expect(map.get(doc.createNode('c'))).toBeUndefined()
})

Expand All @@ -54,13 +78,15 @@ describe('Map', () => {
expect(map.has('b')).toBe(true)
expect(map.has('c')).toBe(false)
expect(map.has('')).toBe(false)
// @ts-expect-error
expect(map.has()).toBe(false)
})

test('has with node', () => {
expect(map.has(doc.createNode('a'))).toBe(true)
expect(map.has(doc.createNode('b'))).toBe(true)
expect(map.has(doc.createNode('c'))).toBe(false)
// @ts-expect-error
expect(map.has(doc.createNode())).toBe(false)
})

Expand Down Expand Up @@ -95,19 +121,20 @@ describe('Map', () => {
})

describe('Seq', () => {
let doc, seq
let doc: Document
let seq: YAMLSeq<number | Scalar<number> | YAMLSeq<number | Scalar<number>>>
beforeEach(() => {
doc = new Document([1, [2, 3]])
seq = doc.contents
seq = doc.contents as any
expect(seq.items).toMatchObject([
{ value: 1 },
{ items: [{ value: 2 }, { value: 3 }] }
])
})

test('add', () => {
seq.add('x')
expect(seq.get(2)).toBe('x')
seq.add(9)
expect(seq.get(2)).toBe(9)
seq.add(1)
expect(seq.items).toHaveLength(4)
})
Expand All @@ -124,15 +151,19 @@ describe('Seq', () => {
expect(seq.get(0)).toBe(1)
expect(seq.get('0')).toBe(1)
expect(seq.get(0, true)).toMatchObject({ value: 1 })
expect(seq.get(1).toJSON()).toMatchObject([2, 3])
expect(
seq.get<YAMLSeq<number | Scalar<number>>>(1)?.toJSON()
).toMatchObject([2, 3])
expect(seq.get(2)).toBeUndefined()
})

test('get with node', () => {
expect(seq.get(doc.createNode(0))).toBe(1)
expect(seq.get(doc.createNode('0'))).toBe(1)
expect(seq.get(doc.createNode(0), true)).toMatchObject({ value: 1 })
expect(seq.get(doc.createNode(1)).toJSON()).toMatchObject([2, 3])
expect(
seq.get<YAMLSeq<number | Scalar<number>>>(doc.createNode(1))?.toJSON()
).toMatchObject([2, 3])
expect(seq.get(doc.createNode(2))).toBeUndefined()
})

Expand All @@ -142,6 +173,7 @@ describe('Seq', () => {
expect(seq.has(2)).toBe(false)
expect(seq.has('0')).toBe(true)
expect(seq.has('')).toBe(false)
// @ts-expect-error
expect(seq.has()).toBe(false)
})

Expand All @@ -150,6 +182,7 @@ describe('Seq', () => {
expect(seq.has(doc.createNode('0'))).toBe(true)
expect(seq.has(doc.createNode(2))).toBe(false)
expect(seq.has(doc.createNode(''))).toBe(false)
// @ts-expect-error
expect(seq.has(doc.createNode())).toBe(false)
})

Expand Down Expand Up @@ -177,10 +210,11 @@ describe('Seq', () => {
})

describe('Set', () => {
let doc, set
let doc: Document
let set: YAMLSet<number | string | Scalar<number> | Pair>
beforeEach(() => {
doc = new Document(null, { version: '1.1' })
set = doc.createNode([1, 2, 3], { tag: '!!set' })
set = doc.createNode([1, 2, 3], { tag: '!!set' }) as any
doc.contents = set
expect(set.items).toMatchObject([
{ key: { value: 1 }, value: { value: null } },
Expand Down Expand Up @@ -225,10 +259,13 @@ describe('Set', () => {
})

describe('OMap', () => {
let doc, omap
let doc: Document
let omap: YAMLOMap
beforeEach(() => {
doc = new Document(null, { version: '1.1' })
omap = doc.createNode([{ a: 1 }, { b: { c: 3, d: 4 } }], { tag: '!!omap' })
omap = doc.createNode([{ a: 1 }, { b: { c: 3, d: 4 } }], {
tag: '!!omap'
}) as any
doc.contents = omap
expect(omap.items).toMatchObject([
{ key: { value: 'a' }, value: { value: 1 } },
Expand All @@ -247,6 +284,7 @@ describe('OMap', () => {
test('add', () => {
omap.add({ key: 'c', value: 'x' })
expect(omap.get('c')).toBe('x')
// @ts-expect-error
expect(() => omap.add('a')).toThrow(/already set/)
expect(() => omap.add(new Pair('c', 'y'))).toThrow(/already set/)
expect(omap.items).toHaveLength(3)
Expand All @@ -272,6 +310,7 @@ describe('OMap', () => {
expect(omap.has('b')).toBe(true)
expect(omap.has('c')).toBe(false)
expect(omap.has('')).toBe(false)
// @ts-expect-error
expect(omap.has()).toBe(false)
})

Expand All @@ -288,21 +327,22 @@ describe('OMap', () => {
})

describe('Collection', () => {
let doc, map
let doc: Document
let map: YAMLMap<string, Scalar<number> | YAMLSeq<Scalar<number>>>
beforeEach(() => {
doc = new Document({ a: 1, b: [2, 3] })
map = doc.contents
map = doc.contents as any
})

test('addIn', () => {
map.addIn(['b'], 4)
expect(map.getIn(['b', 2])).toBe(4)
map.addIn([], new Pair('c', 5))
expect(map.get('c')).toBe(5)
expect(() => map.addIn(['a'])).toThrow(/Expected YAML collection/)
expect(() => map.addIn(['a'], -1)).toThrow(/Expected YAML collection/)
map.addIn(['b', 3], 6)
expect(map.items).toHaveLength(3)
expect(map.get('b').items).toHaveLength(4)
expect(map.get<YAMLSeq<Scalar<number>>>('b')?.items).toHaveLength(4)
})

test('deleteIn', () => {
Expand All @@ -314,7 +354,7 @@ describe('Collection', () => {
expect(map.deleteIn(['b', 2])).toBe(false)
expect(() => map.deleteIn(['a', 'e'])).toThrow(/Expected YAML collection/)
expect(map.items).toHaveLength(1)
expect(map.get('b').items).toHaveLength(1)
expect(map.get<YAMLSeq<Scalar<number>>>('b')?.items).toHaveLength(1)
})

test('getIn', () => {
Expand Down Expand Up @@ -351,15 +391,15 @@ describe('Collection', () => {
expect(map.getIn(['e', 'e'])).toBe(7)
expect(() => map.setIn(['a', 'e'], 8)).toThrow(/Expected YAML collection/)
expect(map.items).toHaveLength(4)
expect(map.get('b').items).toHaveLength(3)
expect(map.get<YAMLSeq<Scalar<number>>>('b')?.items).toHaveLength(3)
})
})

describe('Document', () => {
let doc
let doc: Document<YAMLMap<string, Scalar<number> | YAMLSeq<Scalar<number>>>>
beforeEach(() => {
doc = new Document({ a: 1, b: [2, 3] })
expect(doc.contents.items).toMatchObject([
expect(doc.contents?.items).toMatchObject([
{ key: { value: 'a' }, value: { value: 1 } },
{
key: { value: 'b' },
Expand All @@ -373,29 +413,29 @@ describe('Document', () => {
expect(doc.get('c')).toBe('x')
expect(() => doc.add('a')).toThrow(/already set/)
expect(() => doc.add(new Pair('c', 'y'))).toThrow(/already set/)
expect(doc.contents.items).toHaveLength(3)
expect(doc.contents?.items).toHaveLength(3)
})

test('addIn', () => {
doc.addIn(['b'], 4)
expect(doc.getIn(['b', 2])).toBe(4)
doc.addIn([], new Pair('c', 5))
expect(doc.get('c')).toBe(5)
expect(() => doc.addIn(['a'])).toThrow(/Expected YAML collection/)
expect(() => doc.addIn(['a'], -1)).toThrow(/Expected YAML collection/)
doc.addIn(['b', 3], 6)
expect(doc.contents.items).toHaveLength(3)
expect(doc.get('b').items).toHaveLength(4)
expect(doc.contents?.items).toHaveLength(3)
expect((doc.get('b') as any).items).toHaveLength(4)
})

test('delete', () => {
expect(doc.delete('a')).toBe(true)
expect(doc.delete('a')).toBe(false)
expect(doc.get('a')).toBeUndefined()
expect(doc.contents.items).toHaveLength(1)
expect(doc.contents?.items).toHaveLength(1)
})

test('delete on scalar contents', () => {
doc.contents = doc.createNode('s')
const doc = new Document('s')
expect(() => doc.set('a', 1)).toThrow(/document contents/)
})

Expand All @@ -407,8 +447,8 @@ describe('Document', () => {
expect(doc.deleteIn([1])).toBe(false)
expect(doc.deleteIn(['b', 2])).toBe(false)
expect(() => doc.deleteIn(['a', 'e'])).toThrow(/Expected/)
expect(doc.contents.items).toHaveLength(1)
expect(doc.get('b').items).toHaveLength(1)
expect(doc.contents?.items).toHaveLength(1)
expect((doc.get('b') as any).items).toHaveLength(1)
expect(doc.deleteIn(null)).toBe(true)
expect(doc.deleteIn(null)).toBe(false)
})
Expand All @@ -420,7 +460,7 @@ describe('Document', () => {
})

test('get on scalar contents', () => {
doc.contents = doc.createNode('s')
const doc = new Document('s')
expect(doc.get('a')).toBeUndefined()
})

Expand All @@ -435,7 +475,7 @@ describe('Document', () => {
})

test('getIn scalar', () => {
doc.contents = doc.createNode('s')
const doc = new Document('s')
expect(doc.getIn([])).toBe('s')
expect(doc.getIn(null, true)).toMatchObject({ value: 's' })
expect(doc.getIn([0])).toBeUndefined()
Expand All @@ -447,7 +487,7 @@ describe('Document', () => {
})

test('has on scalar contents', () => {
doc.contents = doc.createNode('s')
const doc = new Document('s')
expect(doc.has('a')).toBe(false)
})

Expand All @@ -465,11 +505,11 @@ describe('Document', () => {
expect(doc.get('a', true)).toMatchObject({ value: 2 })
doc.set('c', 6)
expect(doc.get('c')).toBe(6)
expect(doc.contents.items).toHaveLength(3)
expect(doc.contents?.items).toHaveLength(3)
})

test('set on scalar contents', () => {
doc.contents = doc.createNode('s')
const doc = new Document('s')
expect(() => doc.set('a', 1)).toThrow(/document contents/)
})

Expand All @@ -490,15 +530,15 @@ describe('Document', () => {
doc.setIn(['e', 1, 'e'], 7)
expect(doc.getIn(['e', 1, 'e'])).toBe(7)
expect(() => doc.setIn(['a', 'e'], 8)).toThrow(/Expected YAML collection/)
expect(doc.contents.items).toHaveLength(4)
expect(doc.get('b').items).toHaveLength(2)
expect(doc.contents?.items).toHaveLength(4)
expect((doc.get('b') as any).items).toHaveLength(2)
expect(String(doc)).toBe(
'a: 2\nb:\n - 2\n - 5\nc: 6\ne:\n - null\n - e: 7\n'
)
})

test('setIn on scalar contents', () => {
doc.contents = doc.createNode('s')
const doc = new Document('s')
expect(() => doc.setIn(['a'], 1)).toThrow(/document contents/)
})

Expand All @@ -511,7 +551,7 @@ describe('Document', () => {
})

test('setIn on parsed document', () => {
doc = parseDocument('{ a: 1, b: [2, 3] }')
const doc = parseDocument('{ a: 1, b: [2, 3] }')
doc.setIn(['c', 1], 9)
expect(String(doc)).toBe('{ a: 1, b: [ 2, 3 ], c: [ null, 9 ] }\n')
})
Expand All @@ -525,7 +565,8 @@ describe('Document', () => {
doc.contents = null
const foo = { foo: 'FOO' }
doc.setIn([foo], 'BAR')
expect(doc.contents.items).toMatchObject([
// @ts-expect-error - Doesn't see that setIn() changes contents
expect(doc.contents?.items).toMatchObject([
{
key: { items: [{ key: { value: 'foo' }, value: { value: 'FOO' } }] },
value: { value: 'BAR' }
Expand All @@ -537,7 +578,8 @@ describe('Document', () => {
doc.contents = null
const foo = { foo: 'FOO' }
doc.setIn([foo, foo], 'BAR')
expect(doc.contents.items).toMatchObject([
// @ts-expect-error - Doesn't see that setIn() changes contents
expect(doc.contents?.items).toMatchObject([
{
key: { items: [{ key: { value: 'foo' }, value: { value: 'FOO' } }] },
value: {
Expand Down

0 comments on commit c0db02a

Please sign in to comment.