diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts
index 42a89f13..ad902615 100644
--- a/src/compiler/parser.ts
+++ b/src/compiler/parser.ts
@@ -336,10 +336,10 @@ function parseDOMNode(node: Element, ctx: ParsingContext): AST | null {
for (let attr of nodeAttrsNames) {
const value = node.getAttribute(attr)!;
- if (attr.startsWith("t-on")) {
- if (attr === "t-on") {
- throw new OwlError("Missing event name with t-on directive");
- }
+ if (attr === "t-on" || attr === "t-on-") {
+ throw new OwlError("Missing event name with t-on directive");
+ }
+ if (attr.startsWith("t-on-")) {
on = on || {};
on[attr.slice(5)] = value;
} else if (attr.startsWith("t-model")) {
diff --git a/tests/compiler/parser.test.ts b/tests/compiler/parser.test.ts
index cdbbcace..d261f020 100644
--- a/tests/compiler/parser.test.ts
+++ b/tests/compiler/parser.test.ts
@@ -1147,6 +1147,24 @@ describe("qweb parser", () => {
});
});
+ test("t-onclick without dash", async () => {
+ expect(() => parse(``)).toThrowError(
+ "Unknown QWeb directive: 't-onclick'"
+ );
+ });
+
+ test("t-on without event", async () => {
+ expect(() => parse(``)).toThrowError(
+ "Missing event name with t-on directive"
+ );
+ });
+
+ test("t-on- without event", async () => {
+ expect(() => parse(``)).toThrowError(
+ "Missing event name with t-on directive"
+ );
+ });
+
// ---------------------------------------------------------------------------
// t-model
// ---------------------------------------------------------------------------
@@ -1275,6 +1293,12 @@ describe("qweb parser", () => {
});
});
+ test("component with event handler", async () => {
+ expect(() => parse(``)).toThrowError(
+ "unsupported directive on Component: t-onclick"
+ );
+ });
+
test("component with t-ref", async () => {
expect(() => parse(``)).toThrow(
"t-ref is no longer supported on components. Consider exposing only the public part of the component's API through a callback prop."