// Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.2 OR LicenseRef-Slint-commercial

Base := Rectangle {
    callback blah;
}

export SubElements := Rectangle {
    callback foobar;
    callback foobar;
//           ^error{Duplicated callback declaration}

    callback callback_with_arg(int, string);

    callback invalid_arg(InvalidType);
//                       ^error{Unknown type 'InvalidType'}

    TouchArea {
        clicked => { foobar() }
    }

    TouchArea {
        clicked: 45;
//      ^error{'clicked' is a callback. Use `=>` to connect}
        x => {}
//      ^error{'x' is not a callback in TouchArea}
    }

    TouchArea {
        clicked => { foobar() }
        clicked => { foobar() }
//      ^error{Duplicated callback}
    }

    does_not_exist => {
//  ^error{'does-not-exist' is not a callback in Rectangle}
        root.does_not_exist();
    }

    foobar() => { foobar() }
    callback_with_arg(a, b, c, d) => { }
//  ^error{'callback-with-arg' only has 2 arguments, but 4 were provided}

    Base {
        callback blah;
//               ^error{Cannot override callback 'blah'}
    }

    property <bool> pressed;
    callback pressed;
//           ^error{Cannot declare callback 'pressed' when a property with the same name exists}

    callback init;
//           ^error{Cannot override callback 'init'}

    callback width;
//           ^error{Cannot declare callback 'width' when a property with the same name exists}
}
