async function expectCorrectEventMetaChoiceField(
        formControl,
        { parent, testKeyboardBehavior } = {},
      ) {
        const type = detectType(formControl);

        await resetChoiceFieldToForceRepropagation(formControl);
        mimicUserInput(formControl, 'userValue');

        expect(spy.firstCall.args[0].detail.isTriggeredByUser).to.be.true;

        await resetChoiceFieldToForceRepropagation(formControl);
        mimicUserInput(formControl, 'userValue', { labelInsteadOfInput: true });
        expect(spy.firstCall.args[0].detail.isTriggeredByUser).to.be.true;

        await resetChoiceFieldToForceRepropagation(formControl);
        // eslint-disable-next-line no-param-reassign
        formControl.checked = true;
        expect(spy.firstCall.args[0].detail.isTriggeredByUser).to.be.false;

        // eslint-disable-next-line no-param-reassign
        formControl.modelValue = { value: 'programmaticValue', checked: false };
        expect(spy.secondCall.args[0].detail.isTriggeredByUser).to.be.false;

        if (
          type === 'OptionChoiceField' &&
          testKeyboardBehavior &&
          parent?.constructor.name !== 'LionCombobox' // modelValue only changeable via click or textbox
        ) {
          await resetChoiceFieldToForceRepropagation(formControl);
          mimicUserInput(formControl, 'userValue', { triggerType: 'keypress', parent });
          try {
            expect(spy.firstCall.args[0].detail.isTriggeredByUser).to.be.true;
          } catch (e) {
            throw new Error(
              `model-value-changed of ${formControl.constructor.name} with parent ${parent?.constructor.name} not caught`,
            );
          }
        }
      }
@param {FormControl & {value: string;}} formControl
@param {{parent?: FormControl; testKeyboardBehavior?: boolean}} moreOpts