require "helper"

class ArrayLiteralNodeTest < Johnson::NodeTestCase
  def test_array_literal
    assert_sexp(
                [[:var, [[:assign, [:name, "foo"], [:array, [[:lit, 1]]]]]]],
                @parser.parse('var foo = [1];')
               )
    assert_ecma(
                'var foo = [1];',
                @parser.parse('var foo = [1];')
               )
  end

  def test_paren
    assert_ecma("(a && b);", @parser.parse("(a && b)"))
  end

  def test_array_with_commas
    assert_sexp(
                [[:var, [[:assign, [:name, "foo"], [:array, [
                  [:nil],
                  [:nil],
                  [:lit, 1]
                ]]]]]],
                @parser.parse('var foo = [,,1];')
               )
    assert_ecma(
                'var foo = [null, null, 1];',
                @parser.parse('var foo = [,,1];')
               )
    assert_sexp(
                [[:var, [[:assign, [:name, "foo"], [:array, [
                  [:str, 'foo'],
                  [:nil],
                  [:lit, 1]
                ]]]]]],
                @parser.parse('var foo = ["foo",,1];')
               )
    assert_ecma(
                'var foo = ["foo", null, 1];',
                @parser.parse('var foo = ["foo",,1];')
               )
    assert_sexp(
                [[:var, [[:assign, [:name, "foo"], [:array, [
                  [:name, 'bar'],
                  [:nil],
                  [:lit, 1]
                ]]]]]],
                @parser.parse('var foo = [bar,,1];')
               )
    assert_ecma(
                'var foo = [bar, null, 1];',
                @parser.parse('var foo = [bar,,1];')
               )
  end
end
