Skip to content

Commit

Permalink
Dumper: fix negative integers in bin/octal/hex formats, close #399
Browse files Browse the repository at this point in the history
  • Loading branch information
Vitaly Puzrin committed Mar 5, 2018
1 parent c62fd62 commit dc2227b
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 4 deletions.
9 changes: 5 additions & 4 deletions lib/js-yaml/type/int.js
Expand Up @@ -157,10 +157,11 @@ module.exports = new Type('tag:yaml.org,2002:int', {
construct: constructYamlInteger,
predicate: isInteger,
represent: {
binary: function (object) { return '0b' + object.toString(2); },
octal: function (object) { return '0' + object.toString(8); },
decimal: function (object) { return object.toString(10); },
hexadecimal: function (object) { return '0x' + object.toString(16).toUpperCase(); }
binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); },
octal: function (obj) { return obj >= 0 ? '0' + obj.toString(8) : '-0' + obj.toString(8).slice(1); },
decimal: function (obj) { return obj.toString(10); },
/* eslint-disable max-len */
hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); }
},
defaultStyle: 'decimal',
styleAliases: {
Expand Down
19 changes: 19 additions & 0 deletions test/issues/0399.js
@@ -0,0 +1,19 @@
'use strict';


var assert = require('assert');
var yaml = require('../../');


test('should properly dump negative ints in different styles', function () {
var dump, src = { integer: -100 };

dump = yaml.dump(src, { styles: { '!!int': 'binary' } });
assert.deepEqual(yaml.safeLoad(dump), src);

dump = yaml.dump(src, { styles: { '!!int': 'octal' } });
assert.deepEqual(yaml.safeLoad(dump), src);

dump = yaml.dump(src, { styles: { '!!int': 'hex' } });
assert.deepEqual(yaml.safeLoad(dump), src);
});

0 comments on commit dc2227b

Please sign in to comment.