// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import { assert } from 'chai';
import * as InlineEditor from './inline_editor.js';
function testValidCase(input, output) {
    const model = InlineEditor.CSSLinearEasingModel.CSSLinearEasingModel.parse(input);
    assert.strictEqual(model.asCSSText(), output, `Parsing is invalid for case "${input}"`);
}
function testInvalidCase(input) {
    const model = InlineEditor.CSSLinearEasingModel.CSSLinearEasingModel.parse(input);
    assert.isNull(model);
}
describe('CSSLinearEasingModel', () => {
    describe('valid WPT cases', () => {
        it('should parse valid cases from WPT', () => {
            testValidCase('linear(0 0%, 1 100%)', 'linear');
            testValidCase('linear(0 0% 50%, 1 50% 100%)', 'linear(0 0%, 0 50%, 1 50%, 1 100%)');
            testValidCase('linear(0, 0.5 25% 75%, 1 100% 100%)', 'linear(0 0%, 0.5 25%, 0.5 75%, 1 100%, 1 100%)');
            testValidCase('linear(0, 1.3, 1, 0.92, 1, 0.99, 1, 1.004, 0.998, 1 100% 100%)', 'linear(0 0%, 1.3 11.11%, 1 22.22%, 0.92 33.33%, 1 44.44%, 0.99 55.56%, 1 66.67%, 1 77.78%, 1 88.89%, 1 100%, 1 100%)');
            testValidCase('linear(0, 1)', 'linear');
            testValidCase('linear(0 0% 50%, 1 50% 100%)', 'linear(0 0%, 0 50%, 1 50%, 1 100%)');
            testValidCase('linear(0, 0.5 25% 75%, 1 100% 100%)', 'linear(0 0%, 0.5 25%, 0.5 75%, 1 100%, 1 100%)');
            testValidCase('linear(0, 1.3, 1, 0.92, 1, 0.99, 1, 0.998, 1 100% 100%)', 'linear(0 0%, 1.3 12.5%, 1 25%, 0.92 37.5%, 1 50%, 0.99 62.5%, 1 75%, 1 87.5%, 1 100%, 1 100%)');
        });
        // Even though these cases should be handled as well, in frontend we bail out when we see something
        // different than a number inside the arguments.
        it('should not parse cases that include non-numbers like calc function in arguments', () => {
            testInvalidCase('linear(0 calc(0%), 0 calc(100%))');
            testInvalidCase('linear(0 calc(50% - 50%), 0 calc(50% + 50%))');
            testInvalidCase('linear(0 calc(min(50%, 60%)), 0 100%)');
        });
    });
    it('should not parse invalid cases from WPT', () => {
        testInvalidCase('linear()');
        testInvalidCase('linear(0)');
        testInvalidCase('linear(100%)');
        testInvalidCase('linear(0% 1 50%)');
        testInvalidCase('linear(0 0% 100%)');
        testInvalidCase('linear(0% 100% 0)');
        testInvalidCase('linear(0 calc(50px - 50%), 0 calc(50em + 50em))');
        testInvalidCase('linear(0 calc(50%, 50%), 0 calc(50% + 50%))');
    });
    it('should parse "linear" as linear(0 0%, 1 100%) function', () => {
        const points = InlineEditor.CSSLinearEasingModel.CSSLinearEasingModel.parse('linear').points();
        assert.deepEqual(points, [{ input: 0, output: 0 }, { input: 100, output: 1 }]);
    });
    it('linear(0 0%, 1 100%) is stringified as "linear"', () => {
        const model = InlineEditor.CSSLinearEasingModel.CSSLinearEasingModel.parse('linear(0 0%, 1 100%)');
        assert.strictEqual(model.asCSSText(), 'linear');
    });
});
//# sourceMappingURL=CSSLinearEasingModel.test.js.map