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

Diff for: src/utils.js

+2-2
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

Diff for: test/fixtures/attributes.html

+9-1
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>

Diff for: test/test.js

+15-2
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)