diff --git a/src/utils.js b/src/utils.js
index 0834f03..c909f02 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -46,10 +46,10 @@ export function convertAttributeValue (value, name, { type } = {}) {
if (value === 'true' || value === 'false') {
return value === 'true'
}
- if (value === '' || value === name) {
+ if (value === '' || value === name || value != null) {
return true
}
- return value != null
+ return value
} else if (isNumber(type)) {
const parsed = parseFloat(value, 10)
return isNaN(parsed) ? value : parsed
diff --git a/test/fixtures/attributes.html b/test/fixtures/attributes.html
index de789f4..f851639 100644
--- a/test/fixtures/attributes.html
+++ b/test/fixtures/attributes.html
@@ -11,6 +11,14 @@
bar: {
type: Boolean
},
+ baz: {
+ type: Boolean,
+ default: true
+ },
+ qux: {
+ type: Boolean,
+ default: true
+ },
someNumber: {
type: Number
}
@@ -20,4 +28,4 @@
window.el = document.querySelector('my-element')
-
+
diff --git a/test/test.js b/test/test.js
index 9423d7a..9f60f7f 100644
--- a/test/test.js
+++ b/test/test.js
@@ -1,3 +1,4 @@
+/* global test expect el els */
const launchPage = require('./setup')
test('properties', async () => {
@@ -16,9 +17,9 @@ test('properties', async () => {
el.foo = 234
el.someProp = 'lol'
})
- const newFoo = await page.evaluate(() => el.vueComponent.foo)
+ const newFoo = await page.evaluate(() => el.vueComponent.foo)
expect(newFoo).toBe(234)
- const newBar = await page.evaluate(() => el.vueComponent.someProp)
+ const newBar = await page.evaluate(() => el.vueComponent.someProp)
expect(newBar).toBe('lol')
})
@@ -33,6 +34,14 @@ test('attributes', async () => {
const bar = await page.evaluate(() => el.bar)
expect(bar).toBe(true)
+ // absence of boolean with default: true
+ const baz = await page.evaluate(() => el.baz)
+ expect(baz).toBe(true)
+
+ // boolean="false" with default: true
+ const qux = await page.evaluate(() => el.qux)
+ expect(qux).toBe(false)
+
// some-number="123"
const someNumber = await page.evaluate(() => el.someNumber)
expect(someNumber).toBe(123)
@@ -41,12 +50,16 @@ test('attributes', async () => {
await page.evaluate(() => {
el.setAttribute('foo', 'foo')
el.setAttribute('bar', 'false')
+ el.setAttribute('baz', 'false')
+ el.setAttribute('qux', '')
el.setAttribute('some-number', '234')
})
// boolean="boolean"
expect(await page.evaluate(() => el.foo)).toBe(true)
expect(await page.evaluate(() => el.bar)).toBe(false)
+ expect(await page.evaluate(() => el.baz)).toBe(false)
+ expect(await page.evaluate(() => el.qux)).toBe(true)
expect(await page.evaluate(() => el.someNumber)).toBe(234)
})