From 66e07b24aebd066617a2a43676aa86943e5e9065 Mon Sep 17 00:00:00 2001 From: Ethan Smith Date: Sun, 16 Apr 2017 19:12:39 -0400 Subject: [PATCH] Prevent space after dash for arrays that wrap Related to issue #342 --- lib/js-yaml/dumper.js | 9 ++++++- test/issues/0342.js | 61 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 test/issues/0342.js diff --git a/lib/js-yaml/dumper.js b/lib/js-yaml/dumper.js index 203f436b..c04230ad 100644 --- a/lib/js-yaml/dumper.js +++ b/lib/js-yaml/dumper.js @@ -504,7 +504,14 @@ function writeBlockSequence(state, level, object, compact) { if (!compact || index !== 0) { _result += generateNextLine(state, level); } - _result += '- ' + state.dump; + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + _result += '-'; + } else { + _result += '- '; + } + + _result += state.dump; } } diff --git a/test/issues/0342.js b/test/issues/0342.js new file mode 100644 index 00000000..4182682d --- /dev/null +++ b/test/issues/0342.js @@ -0,0 +1,61 @@ +'use strict'; + + +var assert = require('assert'); +var yaml = require('../../'); +var simpleArray = [ 'a', 'b' ]; +var arrayOfSimpleObj = [ { a: 1 }, { b: 2 } ]; +var arrayOfObj = [ { a: 1, b: 'abc' }, { c: 'def', d: 2 } ]; + + +test('space should be added for array, regardless of indent', function () { + assert.deepEqual( + yaml.dump(simpleArray, { indent: 1 }), + '- a\n- b\n' + ); + assert.deepEqual( + yaml.dump(simpleArray, { indent: 2 }), + '- a\n- b\n' + ); + assert.deepEqual( + yaml.dump(simpleArray, { indent: 3 }), + '- a\n- b\n' + ); + assert.deepEqual( + yaml.dump(simpleArray, { indent: 4 }), + '- a\n- b\n' + ); +}); + +test('array of objects should not wrap at indentation of 2', function () { + assert.deepEqual( + yaml.dump(arrayOfSimpleObj, { indent: 2 }), + '- a: 1\n- b: 2\n' + ); + assert.deepEqual( + yaml.dump(arrayOfObj, { indent: 2 }), + '- a: 1\n b: abc\n- c: def\n d: 2\n' + ); +}); + +test('EOL space should not be added on array of objects at indentation of 3', function () { + assert.deepEqual( + yaml.dump(arrayOfSimpleObj, { indent: 3 }), + '-\n a: 1\n-\n b: 2\n' + ); + assert.deepEqual( + yaml.dump(arrayOfObj, { indent: 3 }), + '-\n a: 1\n b: abc\n-\n c: def\n d: 2\n' + ); +}); + +test('EOL space should not be added on array of objects at indentation of 4', function () { + assert.deepEqual( + yaml.dump(arrayOfSimpleObj, { indent: 4 }), + '-\n a: 1\n-\n b: 2\n' + ); + assert.deepEqual( + yaml.dump(arrayOfObj, { indent: 4 }), + '-\n a: 1\n b: abc\n-\n c: def\n d: 2\n' + ); +});