import 'mocha';
import { expect } from 'chai';
import { ExpressionPosition } from '@/application/Parser/Script/Compiler/Expressions/Expression/ExpressionPosition';

describe('ExpressionPosition', () => {
    describe('ctor', () => {
        it('sets as expected', () => {
            // arrange
            const expectedStart = 0;
            const expectedEnd = 5;
            // act
            const sut = new ExpressionPosition(expectedStart, expectedEnd);
            // assert
            expect(sut.start).to.equal(expectedStart);
            expect(sut.end).to.equal(expectedEnd);
        });
        describe('throws when invalid', () => {
            // arrange
            const testCases = [
                { start: 5, end: 5, error: 'no length (start = end = 5)' },
                { start: 5, end: 3, error: 'start (5) after end (3)' },
                { start: -1, end: 3, error: 'negative start position: -1' },
            ];
            for (const testCase of testCases) {
                it(testCase.error, () => {
                    // act
                    const act = () => new ExpressionPosition(testCase.start, testCase.end);
                    // assert
                    expect(act).to.throw(testCase.error);
                });
            }
        });
    });
});
