})
})
+ // #6617
+ test('should remove boolean attribute for `false`', () => {
+ const { ast } = compileWithStringify(
+ `<button :disabled="false">enable</button>${repeat(
+ `<div></div>`,
+ StringifyThresholds.NODE_COUNT
+ )}`
+ )
+ expect(ast.hoists[0]).toMatchObject({
+ type: NodeTypes.JS_CALL_EXPRESSION,
+ callee: CREATE_STATIC,
+ arguments: [
+ JSON.stringify(
+ `<button>enable</button>${repeat(
+ `<div></div>`,
+ StringifyThresholds.NODE_COUNT
+ )}`
+ ),
+ '21'
+ ]
+ })
+ })
+
test('should stringify svg', () => {
const svg = `<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">`
const repeated = `<rect width="50" height="50" fill="#C4C4C4"></rect>`
normalizeStyle,
stringifyStyle,
makeMap,
- isKnownSvgAttr
+ isKnownSvgAttr,
+ isBooleanAttr
} from '@vue/shared'
import { DOMNamespaces } from '../parserOptions'
}="__VUE_EXP_START__${exp.content}__VUE_EXP_END__"`
continue
}
+ // #6568
+ if (
+ isBooleanAttr((p.arg as SimpleExpressionNode).content) &&
+ exp.content === 'false'
+ ) {
+ continue
+ }
// constant v-bind, e.g. :foo="1"
let evaluated = evaluateConstant(exp)
if (evaluated != null) {