From: Ojas Date: Wed, 5 Dec 2018 06:55:36 +0000 (+0530) Subject: [bugfix] Clone/wrapper of invalid duration should be invalid (#4323) X-Git-Tag: 2.25.0~46^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bd4950b83e72dd37d20f6faa1c9d77fe8dce34c0;p=thirdparty%2Fmoment.git [bugfix] Clone/wrapper of invalid duration should be invalid (#4323) --- diff --git a/src/lib/duration/create.js b/src/lib/duration/create.js index 3f00f3aad..568f1c19c 100644 --- a/src/lib/duration/create.js +++ b/src/lib/duration/create.js @@ -74,6 +74,10 @@ export function createDuration (input, key) { ret._locale = input._locale; } + if (isDuration(input) && hasOwnProp(input, '_isValid')) { + ret._isValid = input._isValid; + } + return ret; } diff --git a/src/test/moment/duration_invalid.js b/src/test/moment/duration_invalid.js index 3945d5a6c..f8488e05f 100644 --- a/src/test/moment/duration_invalid.js +++ b/src/test/moment/duration_invalid.js @@ -15,6 +15,30 @@ test('valid duration', function (assert) { assert.equal(m.valueOf(), 0); }); +test('invalid duration - clone of invalid duration', function (assert) { + var m = moment.duration.invalid().clone(); // should be invalid + assert.equal(m.isValid(), false); + assert.ok(isNaN(m.valueOf())); +}); + +test('valid duration - clone of valid duration', function (assert) { + var m = moment.duration({d: null}).clone(); // should be valid, for now + assert.equal(m.isValid(), true); + assert.equal(m.valueOf(), 0); +}); + +test('invalid duration - wrapper of invalid duration', function (assert) { + var m = moment.duration(moment.duration.invalid()); // should be invalid + assert.equal(m.isValid(), false); + assert.ok(isNaN(m.valueOf())); +}); + +test('valid duration - wrapper of valid duration', function (assert) { + var m = moment.duration(moment.duration({d: null})); // should be valid, for now + assert.equal(m.isValid(), true); + assert.equal(m.valueOf(), 0); +}); + test('invalid duration - only smallest unit can have decimal', function (assert) { var m = moment.duration({'days': 3.5, 'hours': 1.1}); // should be invalid assert.equal(m.isValid(), false);