Skip to content
Snippets Groups Projects
pow-expects-update-expression-on-lhs.js 1.66 KiB
Newer Older
  • Learn to ignore specific revisions
  • function testSyntax(script) {
        try {
            eval(script);
        } catch (error) {
            if (error instanceof SyntaxError)
                throw new Error("Bad error: " + String(error));
        }
    }
    
    function testSyntaxError(script, message) {
        var error = null;
        try {
            eval(script);
        } catch (e) {
            error = e;
        }
        if (!error)
            throw new Error("Expected syntax error not thrown");
    
        if (String(error) !== message)
            throw new Error("Bad error: " + String(error));
    }
    
    {
        let tokens = [
            '-',
            '+',
            '~',
            '!',
            'typeof',
            'void',
            'delete',
        ];
    
        for (let token of tokens) {
            testSyntaxError(`
            function pow(a, b)
            {
                return ${token} a ** b;
            }
            `, `SyntaxError: Unexpected token '**'. Ambiguous unary expression in the left hand side of the exponentiation expression; parentheses must be used to disambiguate the expression.`);
        }
    }
    
    {
        let tokens = [
            '-',
            '+',
            '~',
            '!',
            'typeof',
            'void',
            'delete',
        ];
    
        for (let token of tokens) {
            testSyntax(`
            function pow(a, b)
            {
                return (${token} a) ** b;
            }
            `);
        }
    }
    
    {
        let tokens = [
            '++',
            '--',
        ];
    
        for (let token of tokens) {
            testSyntax(`
            function pow(a, b)
            {
                return ${token} a ** b;
            }
            `);
        }
    }
    
    {
        let tokens = [
            '++',
            '--',
        ];
    
        for (let token of tokens) {
            testSyntax(`
            function pow(a, b)
            {
                return a ${token} ** b;
            }
            `);
        }
    }