1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
# -*- 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
|