From ad64f82242459ada9b4e7e45f89437d064751fbd Mon Sep 17 00:00:00 2001 From: Nathaniel Furniss Date: Tue, 7 Aug 2018 16:24:47 -0700 Subject: [PATCH] [BUGFIX beta] Enable @ember/object#get to be called with an empty string --- .../tests/integration/syntax/each-in-test.js | 16 ++++++++++++++++ packages/ember-metal/lib/property_get.ts | 1 - packages/ember-metal/tests/accessors/get_test.js | 15 ++++++++++++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/packages/ember-glimmer/tests/integration/syntax/each-in-test.js b/packages/ember-glimmer/tests/integration/syntax/each-in-test.js index f87e96f6d54..5b35145c453 100644 --- a/packages/ember-glimmer/tests/integration/syntax/each-in-test.js +++ b/packages/ember-glimmer/tests/integration/syntax/each-in-test.js @@ -281,6 +281,22 @@ class EachInTest extends AbstractEachInTest { this.assertText('Empty!'); } + + [`@test it can render items with a key of empty string`]() { + this.makeHash({ '': 'empty-string', a: 'a' }); + + this.render( + `` + ); + + this.assertText(': empty-stringa: a'); + + this.assertStableRerender(); + + this.clear(); + + this.assertText('Empty!'); + } } moduleFor( diff --git a/packages/ember-metal/lib/property_get.ts b/packages/ember-metal/lib/property_get.ts index 4718df01e1a..e6ced5144ba 100644 --- a/packages/ember-metal/lib/property_get.ts +++ b/packages/ember-metal/lib/property_get.ts @@ -90,7 +90,6 @@ export function get(obj: object, keyName: string): any { `'this' in paths is not supported`, typeof keyName !== 'string' || keyName.lastIndexOf('this.', 0) !== 0 ); - assert('Cannot call `get` with an empty string', keyName !== ''); let type = typeof obj; diff --git a/packages/ember-metal/tests/accessors/get_test.js b/packages/ember-metal/tests/accessors/get_test.js index 918c8c22470..f8049df1943 100644 --- a/packages/ember-metal/tests/accessors/get_test.js +++ b/packages/ember-metal/tests/accessors/get_test.js @@ -59,6 +59,20 @@ moduleFor( assert.equal(get(arr, 1), 'second'); } + ['@test should retrieve an empty string key on an object'](assert) { + let obj = { '': 'empty-string' }; + + assert.equal(get(obj, ''), 'empty-string'); + } + + ['@test should return undefined when passed an empty string if that key does not exist on an object']( + assert + ) { + let obj = { tomster: true }; + + assert.equal(get(obj, ''), undefined); + } + ['@test should not access a property more than once'](assert) { let count = 0; let obj = { @@ -177,7 +191,6 @@ moduleFor( () => get(obj, false), /The key provided to get must be a string or number, you passed false/ ); - expectAssertion(() => get(obj, ''), /Cannot call `get` with an empty string/); } // ..........................................................