diff --git a/__tests__/properties.js b/__tests__/properties.js new file mode 100644 index 00000000..35e21295 --- /dev/null +++ b/__tests__/properties.js @@ -0,0 +1,35 @@ +import YAML from '../src/index' +import * as fc from 'fast-check' + +describe('properties', () => { + test('parse stringified object', () => { + const key = fc.fullUnicodeString() + const values = [ + key, + fc.lorem(1000, false), // words + fc.lorem(100, true), // sentences + fc.boolean(), + fc.integer(), + fc.double(), + fc.constantFrom(null, Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY) + ] + const yamlArbitrary = fc.anything({ key: key, values: values }) + const optionsArbitrary = fc.record( + { + keepBlobsInJSON: fc.boolean(), + keepCstNodes: fc.boolean(), + keepNodeTypes: fc.boolean(), + mapAsMap: fc.constant(false), + merge: fc.boolean(), + schema: fc.constantFrom('core', 'yaml-1.1') // ignore 'failsafe', 'json' + }, + { withDeletedKeys: true } + ) + + fc.assert( + fc.property(yamlArbitrary, optionsArbitrary, (obj, opts) => { + expect(YAML.parse(YAML.stringify(obj, opts), opts)).toStrictEqual(obj) + }) + ) + }) +}) diff --git a/package-lock.json b/package-lock.json index 63130803..3cb1133d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2199,6 +2199,16 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, + "fast-check": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-1.8.2.tgz", + "integrity": "sha512-urQagho0BtUvjhlKnf1xgV453j4qjaWUojD8DCAnB/BwjBXg9kfZaED0LnBqTdKsWb4fGOvQ0thzoldgZNBWXA==", + "dev": true, + "requires": { + "lorem-ipsum": "~1.0.6", + "pure-rand": "^1.5.0" + } + }, "fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", @@ -4723,6 +4733,23 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "lorem-ipsum": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/lorem-ipsum/-/lorem-ipsum-1.0.6.tgz", + "integrity": "sha512-Rx4XH8X4KSDCKAVvWGYlhAfNqdUP5ZdT4rRyf0jjrvWgtViZimDIlopWNfn/y3lGM5K4uuiAoY28TaD+7YKFrQ==", + "dev": true, + "requires": { + "minimist": "~1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, "lru-cache": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", @@ -5389,6 +5416,12 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "pure-rand": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-1.6.0.tgz", + "integrity": "sha512-L6ER1SlIhjuuoWf8N5J3ipzkFeBVduRgeOk87XuPdCp0xSPm4WYz9CteM7fCFaiPYVmVMkoI/nt6dRkVZ9SDNA==", + "dev": true + }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", diff --git a/package.json b/package.json index baa93c37..8ce278af 100644 --- a/package.json +++ b/package.json @@ -74,6 +74,7 @@ "babel-jest": "^23.6.0", "babel-plugin-add-module-exports": "^1.0.0", "babel-plugin-trace": "^1.1.0", + "fast-check": "^1.8.2", "jest": "^23.6.0", "prettier": "^1.15.3" },