# -*- coding: utf-8 -*-
require File.dirname(__FILE__) + '/../../test_helper'
require 'sass/engine'

class ScssRxTest < MiniTest::Test
  include Sass::SCSS::RX

  def test_identifiers
    assert_match IDENT, "foo"
    assert_match IDENT, "\xC3\xBFoo" # Initial char can be nonascii
    assert_match IDENT, "\\123abcoo" # Initial char can be unicode escape
    assert_match IDENT, "\\f oo" # Unicode escapes can be followed by whitespace
    assert_match IDENT, "\\fa\too"
    assert_match IDENT, "\\ff2\roo"
    assert_match IDENT, "\\f13a\foo"
    assert_match IDENT, "\\f13abcoo"
    assert_match IDENT, "\\ oo" # Initial char can be a plain escape as well
    assert_match IDENT, "\\~oo"
    assert_match IDENT, "\\\\oo"
    assert_match IDENT, "\\{oo"
    assert_match IDENT, "\\\xC3\xBFoo"
    assert_match IDENT, "-foo" # Can put a - before anything
    assert_match IDENT, "-\xC3\xBFoo"
    assert_match IDENT, "-\\f oo"
    assert_match IDENT, "_foo" # Can put a _ before anything
    assert_match IDENT, "_\xC3\xBFoo"
    assert_match IDENT, "_\\f oo"
    assert_match IDENT, "--foo" # "Custom" identifier

    assert_match IDENT, "foo-bar"
    assert_match IDENT, "f012-23"
    assert_match IDENT, "foo_-_bar"
    assert_match IDENT, "f012_23"

    # http://www.w3.org/Style/CSS/Test/CSS2.1/current/xhtml1/escapes-003.xht
    assert_match IDENT, "c\\lass"
    # http://www.w3.org/Style/CSS/Test/CSS2.1/current/xhtml1/escapes-004.xht
    assert_match IDENT, "c\\00006Cas\\000073"
    # http://www.w3.org/Style/CSS/Test/CSS2.1/current/xhtml1/ident-001.xht
    assert_match IDENT, "IdE6n-3t0_6"
    # http://www.w3.org/Style/CSS/Test/CSS2.1/current/xhtml1/ident-006.xht
    assert_match IDENT, "\\6000ident"
    # http://www.w3.org/Style/CSS/Test/CSS2.1/current/xhtml1/ident-007.xht
    assert_match IDENT, "iden\\6000t\\6000"
    # http://www.w3.org/Style/CSS/Test/CSS2.1/current/xhtml1/ident-013.xht
    assert_match IDENT, "\\-ident"
  end

  def test_underscores_in_identifiers
    assert_match IDENT, "foo_bar"
    assert_match IDENT, "_\xC3\xBFfoo"
    assert_match IDENT, "__foo"
    assert_match IDENT, "_1foo"
    assert_match IDENT, "-_foo"
    assert_match IDENT, "_-foo"
  end

  def test_invalid_identifiers
    assert_no_match IDENT, ""
    assert_no_match IDENT, "1foo"
    assert_no_match IDENT, "-1foo"
    assert_no_match IDENT, "foo bar"
    assert_no_match IDENT, "foo~bar"

    # http://www.w3.org/Style/CSS/Test/CSS2.1/current/xhtml1/escapes-008.xht
    assert_no_match IDENT, "c\\06C  ass"
    assert_no_match IDENT, "back\\67\n round"
  end

  def test_double_quote_strings
    assert_match STRING, '"foo bar"'
    assert_match STRING, '"foo\\\nbar"'
    assert_match STRING, "\"\\\"\""
    assert_match STRING, '"\t !#$%&(-~()*+,-./0123456789~"'
  end

  def test_single_quote_strings
    assert_match STRING, "'foo bar'"
    assert_match STRING, "'foo\\\nbar'"
    assert_match STRING, "'\\''"
    assert_match STRING, "'\t !#\$%&(-~()*+,-./0123456789~'"
  end

  def test_invalid_strings
    assert_no_match STRING, "\"foo\nbar\""
    assert_no_match STRING, "\"foo\"bar\""
    assert_no_match STRING, "'foo\nbar'"
    assert_no_match STRING, "'foo'bar'"
  end

  def test_uri
    assert_match URI, 'url("foo bar)")'
    assert_match URI, "url('foo bar)')"
    assert_match URI, 'url( "foo bar)" )'
    assert_match URI, "url(#\\%&**+,-./0123456789~)"
  end

  def test_invalid_uri
    assert_no_match URI, 'url(foo)bar)'
  end

  def test_unicode_range
    assert_match UNICODERANGE, 'U+00-Ff'
    assert_match UNICODERANGE, 'u+980-9FF'
    assert_match UNICODERANGE, 'U+9aF??'
    assert_match UNICODERANGE, 'U+??'
  end

  def test_escape_empty_ident
    assert_equal "", Sass::SCSS::RX.escape_ident("")
  end

  def test_escape_just_prefix_ident
    assert_equal "\\-", Sass::SCSS::RX.escape_ident("-")
    assert_equal "\\_", Sass::SCSS::RX.escape_ident("_")
  end

  def test_escape_plain_ident
    assert_equal "foo", Sass::SCSS::RX.escape_ident("foo")
    assert_equal "foo-1bar", Sass::SCSS::RX.escape_ident("foo-1bar")
    assert_equal "-foo-bar", Sass::SCSS::RX.escape_ident("-foo-bar")
    assert_equal "f2oo_bar", Sass::SCSS::RX.escape_ident("f2oo_bar")
    assert_equal "_foo_bar", Sass::SCSS::RX.escape_ident("_foo_bar")
  end

  def test_escape_initial_funky_ident
    assert_equal "\\000035foo", Sass::SCSS::RX.escape_ident("5foo")
    assert_equal "-\\000035foo", Sass::SCSS::RX.escape_ident("-5foo")
    assert_equal "_\\000035foo", Sass::SCSS::RX.escape_ident("_5foo")

    assert_equal "\\&foo", Sass::SCSS::RX.escape_ident("&foo")
    assert_equal "-\\&foo", Sass::SCSS::RX.escape_ident("-&foo")

    assert_equal "-\\ foo", Sass::SCSS::RX.escape_ident("- foo")
  end

  def test_escape_mid_funky_ident
    assert_equal "foo\\&bar", Sass::SCSS::RX.escape_ident("foo&bar")
    assert_equal "foo\\ \\ bar", Sass::SCSS::RX.escape_ident("foo  bar")
    assert_equal "foo\\00007fbar", Sass::SCSS::RX.escape_ident("foo\177bar")
  end

  def test_no_static_hyphenated_units
    assert_no_match STATIC_VALUE, "20px-20px"
  end

  private

  def assert_match(rx, str)
    refute_nil(match = rx.match(str))
    assert_equal str.size, match[0].size
  end

  def assert_no_match(rx, str)
    match = rx.match(str)
    refute_equal str.size, match && match[0].size
  end

end
