Skip to content

Commit 655e7a8

Browse files
fix: Boolean prop casting should use default value (#58)
* Boolean prop casting should use default value * add a test case for setting false on a default true boolean property
1 parent e2b8456 commit 655e7a8

File tree

3 files changed

+26
-5
lines changed

3 files changed

+26
-5
lines changed

src/utils.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ export function convertAttributeValue (value, name, { type } = {}) {
4646
if (value === 'true' || value === 'false') {
4747
return value === 'true'
4848
}
49-
if (value === '' || value === name) {
49+
if (value === '' || value === name || value != null) {
5050
return true
5151
}
52-
return value != null
52+
return value
5353
} else if (isNumber(type)) {
5454
const parsed = parseFloat(value, 10)
5555
return isNaN(parsed) ? value : parsed

test/fixtures/attributes.html

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@
1111
bar: {
1212
type: Boolean
1313
},
14+
baz: {
15+
type: Boolean,
16+
default: true
17+
},
18+
qux: {
19+
type: Boolean,
20+
default: true
21+
},
1422
someNumber: {
1523
type: Number
1624
}
@@ -20,4 +28,4 @@
2028
window.el = document.querySelector('my-element')
2129
</script>
2230

23-
<my-element foo="foo" bar="true" some-number="123"></my-element>
31+
<my-element foo="foo" bar="true" qux="false" some-number="123"></my-element>

test/test.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* global test expect el els */
12
const launchPage = require('./setup')
23

34
test('properties', async () => {
@@ -16,9 +17,9 @@ test('properties', async () => {
1617
el.foo = 234
1718
el.someProp = 'lol'
1819
})
19-
const newFoo = await page.evaluate(() => el.vueComponent.foo)
20+
const newFoo = await page.evaluate(() => el.vueComponent.foo)
2021
expect(newFoo).toBe(234)
21-
const newBar = await page.evaluate(() => el.vueComponent.someProp)
22+
const newBar = await page.evaluate(() => el.vueComponent.someProp)
2223
expect(newBar).toBe('lol')
2324
})
2425

@@ -33,6 +34,14 @@ test('attributes', async () => {
3334
const bar = await page.evaluate(() => el.bar)
3435
expect(bar).toBe(true)
3536

37+
// absence of boolean with default: true
38+
const baz = await page.evaluate(() => el.baz)
39+
expect(baz).toBe(true)
40+
41+
// boolean="false" with default: true
42+
const qux = await page.evaluate(() => el.qux)
43+
expect(qux).toBe(false)
44+
3645
// some-number="123"
3746
const someNumber = await page.evaluate(() => el.someNumber)
3847
expect(someNumber).toBe(123)
@@ -41,12 +50,16 @@ test('attributes', async () => {
4150
await page.evaluate(() => {
4251
el.setAttribute('foo', 'foo')
4352
el.setAttribute('bar', 'false')
53+
el.setAttribute('baz', 'false')
54+
el.setAttribute('qux', '')
4455
el.setAttribute('some-number', '234')
4556
})
4657

4758
// boolean="boolean"
4859
expect(await page.evaluate(() => el.foo)).toBe(true)
4960
expect(await page.evaluate(() => el.bar)).toBe(false)
61+
expect(await page.evaluate(() => el.baz)).toBe(false)
62+
expect(await page.evaluate(() => el.qux)).toBe(true)
5063
expect(await page.evaluate(() => el.someNumber)).toBe(234)
5164
})
5265

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy