]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
[bugfix] Clone/wrapper of invalid duration should be invalid (#4323)
authorOjas <ojass.m345@gmail.com>
Wed, 5 Dec 2018 06:55:36 +0000 (12:25 +0530)
committerIskren Chernev <iskren.chernev@gmail.com>
Fri, 24 Apr 2020 21:08:49 +0000 (00:08 +0300)
src/lib/duration/create.js
src/test/moment/duration_invalid.js

index 3f00f3aad4c350e979304d8c14ebd07ef6ce9904..568f1c19c496c5cb69a53f7acb071f92ba84999d 100644 (file)
@@ -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;
 }
 
index 3945d5a6c5c0643876fbefb9f90c47c787242f05..f8488e05f17eab294b11242ecf510f71e1c2ab96 100644 (file)
@@ -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);