diff --git a/addons/web/static/tests/owl_compatibility_tests.js b/addons/web/static/tests/owl_compatibility_tests.js
index 5aca69326542e5b93236f02bc1202841b5eda6ae..e1ba83e0cf72bf7a936059ca8969a8fd84a8141b 100644
--- a/addons/web/static/tests/owl_compatibility_tests.js
+++ b/addons/web/static/tests/owl_compatibility_tests.js
@@ -935,6 +935,95 @@ odoo.define('web.OwlCompatibilityTests', function (require) {
             widget.update(); // should not crash
         });
 
+        QUnit.test("sub component that triggers events", async function (assert) {
+            assert.expect(3);
+
+            class WidgetComponent extends Component {}
+            WidgetComponent.template = xml`<div>Component</div>`;
+
+            const MyWidget = WidgetAdapter.extend({
+                custom_events: _.extend({}, Widget.custom_events, {
+                    some_event: function (ev) {
+                        assert.step(ev.data.value);
+                    }
+                }),
+                start() {
+                    this.component = new ComponentWrapper(this, WidgetComponent, {});
+                    return this.component.mount(this.el);
+                },
+            });
+
+            const target = testUtils.prepareTarget();
+            const widget = new MyWidget();
+            await widget.appendTo(target);
+
+            widget.component.trigger('some_event', { value: 'a' });
+            widget.component.trigger('some-event', { value: 'b' }); // - are converted to _
+
+            assert.verifySteps(['a', 'b']);
+
+            widget.destroy();
+        });
+
+        QUnit.test("change parent of ComponentWrapper", async function (assert) {
+            assert.expect(7);
+
+            let myComponent;
+            let widget1;
+            let widget2;
+            class WidgetComponent extends Component {}
+            WidgetComponent.template = xml`<div>Component</div>`;
+            const MyWidget = WidgetAdapter.extend({
+                custom_events: _.extend({}, Widget.custom_events, {
+                    some_event: function (ev) {
+                        assert.strictEqual(this, ev.data.widget);
+                        assert.step(ev.data.value);
+                    }
+                }),
+            });
+            const Parent = Widget.extend({
+                start() {
+                    const proms = [];
+                    myComponent = new ComponentWrapper(null, WidgetComponent, {});
+                    widget1 = new MyWidget();
+                    widget2 = new MyWidget();
+                    proms.push(myComponent.mount(this.el));
+                    proms.push(widget1.appendTo(this.$el));
+                    proms.push(widget2.appendTo(this.$el));
+                    return Promise.all(proms);
+                }
+            });
+
+            const target = testUtils.prepareTarget();
+            const parent = new Parent();
+            await parent.appendTo(target);
+
+            // 1. No parent
+            myComponent.trigger('some-event', { value: 'a', widget: null });
+
+            assert.verifySteps([]);
+
+            // 2. No parent --> parent (widget1)
+            myComponent.unmount();
+            await myComponent.mount(widget1.el);
+            myComponent.setParent(widget1);
+
+            myComponent.trigger('some-event', { value: 'b', widget: widget1 });
+
+            assert.verifySteps(['b']);
+
+            // 3. Parent (widget1) --> new parent (widget2)
+            myComponent.unmount();
+            await myComponent.mount(widget2.el);
+            myComponent.setParent(widget2);
+
+            myComponent.trigger('some-event', { value: 'c', widget: widget2 });
+
+            assert.verifySteps(['c']);
+
+            parent.destroy();
+        });
+
         QUnit.module('Several layers of legacy widgets and Owl components');
 
         QUnit.test("Owl over legacy over Owl", async function (assert) {