From ee9b078140a84f68b3973ac7094e7c734d96726e Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Fri, 2 Apr 2021 20:33:06 +0300 Subject: [PATCH] Proxy: make sure set value ends up in first scope --- src/helpers/helpers.config.js | 7 ++++++- test/specs/core.controller.tests.js | 2 +- test/specs/helpers.config.tests.js | 24 ++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/helpers/helpers.config.js b/src/helpers/helpers.config.js index 0b66682d0c4..2b22d17f603 100644 --- a/src/helpers/helpers.config.js +++ b/src/helpers/helpers.config.js @@ -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; diff --git a/test/specs/core.controller.tests.js b/test/specs/core.controller.tests.js index ed393deb3cd..fee6832d62c 100644 --- a/test/specs/core.controller.tests.js +++ b/test/specs/core.controller.tests.js @@ -480,7 +480,7 @@ describe('Chart', function() { responsive: false }; chart.update(); - expect(chart.options).toEqual(jasmine.objectContaining(options)); + expect(chart.options).toEqualOptions(options); }); }); diff --git a/test/specs/helpers.config.tests.js b/test/specs/helpers.config.tests.js index e3ace633570..dd7d8878440 100644 --- a/test/specs/helpers.config.tests.js +++ b/test/specs/helpers.config.tests.js @@ -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(); + }); }); });