From 67e20a17cf4a89aa5f0b3124e8e9ec9c50a5d819 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 14 Aug 2024 22:40:24 -0400 Subject: [PATCH] add a failing test --- .../svelte/src/internal/client/proxy.test.ts | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/packages/svelte/src/internal/client/proxy.test.ts b/packages/svelte/src/internal/client/proxy.test.ts index e4140eea99..6af73d50f9 100644 --- a/packages/svelte/src/internal/client/proxy.test.ts +++ b/packages/svelte/src/internal/client/proxy.test.ts @@ -10,3 +10,45 @@ test('does not mutate the original object', () => { assert.equal(original.x, 1); assert.equal(state.x, 2); }); + +test('preserves getters', () => { + let count = 0; + const original = { + count: 0, + get x() { + this.count += 1; + count += 1; + return 42; + } + }; + + const state = proxy(original); + + state.x; + state.x; + + assert.equal(original.count, 0); + assert.equal(count, 2); + assert.equal(state.count, 2); +}); + +test('defines a property', () => { + const original = {}; + const state = proxy(original); + + let value = 0; + + Object.defineProperty(state, 'x', { + get: () => value, + set: (v) => (value = v) + }); + + // @ts-ignore + state.x = 1; + + // @ts-ignore + assert.equal(state.x, 1); + assert.equal(value, 1); + + assert.ok(!('x' in original)); +});