]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Proxy: make sure set value ends up in first scope (#8787)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Fri, 2 Apr 2021 17:47:05 +0000 (20:47 +0300)
committerGitHub <noreply@github.com>
Fri, 2 Apr 2021 17:47:05 +0000 (13:47 -0400)
src/helpers/helpers.config.js
test/specs/core.controller.tests.js
test/specs/helpers.config.tests.js

index 0b66682d0c44ad870c84be9ee2b52133146d68e4..2b22d17f603f5f4f573b7423bd15db6625485d1c 100644 (file)
@@ -275,7 +275,12 @@ function createSubResolver(parentScopes, resolver, prop, value) {
   const rootScopes = resolver._rootScopes;
   const fallback = resolveFallback(resolver._fallback, prop, value);
   const allScopes = [...parentScopes, ...rootScopes];
-  const set = new Set([value]);
+  const set = new Set();
+  if (!(prop in parentScopes[0])) {
+    // create an empty scope for possible stored values, so we always set the values in top scope.
+    set.add(parentScopes[0][prop] = {});
+  }
+  set.add(value);
   let key = addScopesFromKey(set, allScopes, prop, fallback || prop);
   if (key === null) {
     return false;
index ed393deb3cd9d3d9a0270faea48f51e99914ae5e..fee6832d62c919e437242dcd3fcb29ec64cb6e4c 100644 (file)
@@ -480,7 +480,7 @@ describe('Chart', function() {
         responsive: false
       };
       chart.update();
-      expect(chart.options).toEqual(jasmine.objectContaining(options));
+      expect(chart.options).toEqualOptions(options);
     });
   });
 
index e3ace633570ec331d6a7b8af2d350240008b29b4..dd7d88784409f64af48ae1f0e9ddcc9b180afe9f 100644 (file)
@@ -472,7 +472,31 @@ describe('Chart.helpers.config', function() {
           'numbers',
         ]);
       });
+    });
+    describe('setting values', function() {
+      it('should set values to first scope', function() {
+        const defaults = {
+          value: true
+        };
+        const options = {};
+        const resolver = _createResolver([options, defaults]);
+        resolver.value = false;
+        expect(options.value).toBeFalse();
+        expect(defaults.value).toBeTrue();
+      });
 
+      it('should set values of sub-objects to first scope', function() {
+        const defaults = {
+          sub: {
+            value: true
+          }
+        };
+        const options = {};
+        const resolver = _createResolver([options, defaults]);
+        resolver.sub.value = false;
+        expect(options.sub.value).toBeFalse();
+        expect(defaults.sub.value).toBeTrue();
+      });
     });
   });