test/sass/css2sass_test.rb in haml-2.2.24 vs test/sass/css2sass_test.rb in haml-3.0.0.beta.1

- old
+ new

@@ -22,17 +22,14 @@ def test_nesting assert_equal(<<SASS, css2sass(<<CSS)) li display: none - a text-decoration: none - span color: yellow - &:hover text-decoration: underline SASS li { display: none; @@ -55,15 +52,13 @@ def test_no_nesting_around_rules assert_equal(<<SASS, css2sass(<<CSS)) div .warning color: #d21a19 - span .debug cursor: crosshair - div .debug cursor: default SASS div .warning { color: #d21a19; } @@ -102,31 +97,38 @@ #one_more { finally: srsly; } /* just a line here */ CSS sass = <<SASS +/* comment + elephant.rawr rampages: excessively +/* actual multiline + comment span.turkey isdinner: true - .turducken + /* Sounds funny + doesn't it chimera: not_really - #overhere bored: sorta + /* it's for a good + cause better_than: thread_pools - #one_more finally: srsly + +/* just a line here SASS - assert_equal(css2sass(css), sass) + assert_equal(sass, css2sass(css)) end def test_fold_commas assert_equal(<<SASS, css2sass(<<CSS)) li @@ -143,16 +145,14 @@ assert_equal(<<SASS, css2sass(<<CSS)) .one color: green - .two color: green color: red - .three color: red SASS .one, .two { color: green; @@ -166,24 +166,19 @@ def test_bad_formatting assert_equal(<<SASS, css2sass(<<CSS)) hello parent: true - there parent: false - who hoo: false - why y: true - when wen: nao - down_here yeah: true SASS hello { parent: true; @@ -212,11 +207,10 @@ assert_equal(<<SASS, css2sass(<<CSS)) .js #location-navigation-form .form-submit, #business-listing-form .form-submit, #detailTabs ul, #detailsEnhanced #addTags, #locationSearchList, #moreHoods display: none - #navListLeft display: none SASS .js #location-navigation-form .form-submit, .js #business-listing-form .form-submit, @@ -233,16 +227,103 @@ def test_pseudo_classes_are_escaped assert_equal(<<SASS, css2sass(<<CSS)) \\:focus a: b - \\:foo bar: baz SASS :focus {a: b;} :focus :foo {bar: baz;} CSS + end + + # Error reporting + + def test_error_reporting + css2sass("foo") + assert(false, "Expected exception") + rescue Sass::SyntaxError => err + assert_equal(1, err.sass_line) + assert_equal('Invalid CSS after "foo": expected "{", was ""', err.message) + end + + def test_error_reporting_in_line + css2sass("foo\nbar }\nbaz") + assert(false, "Expected exception") + rescue Sass::SyntaxError => err + assert_equal(2, err.sass_line) + assert_equal('Invalid CSS after "bar ": expected "{", was "}"', err.message) + end + + def test_error_truncate_after + css2sass("#{"a" * 16}foo") + assert(false, "Expected exception") + rescue Sass::SyntaxError => err + assert_equal(1, err.sass_line) + assert_equal('Invalid CSS after "...aaaaaaaaaaaafoo": expected "{", was ""', err.message) + end + + def test_error_truncate_was + css2sass("foo }foo#{"a" * 15}") + assert(false, "Expected exception") + rescue Sass::SyntaxError => err + assert_equal(1, err.sass_line) + assert_equal('Invalid CSS after "foo ": expected "{", was "}fooaaaaaaaaaaa..."', err.message) + end + + def test_error_doesnt_truncate_after_when_elipsis_would_add_length + css2sass("#{"a" * 15}foo") + assert(false, "Expected exception") + rescue Sass::SyntaxError => err + assert_equal(1, err.sass_line) + assert_equal('Invalid CSS after "aaaaaaaaaaaaaaafoo": expected "{", was ""', err.message) + end + + def test_error_doesnt_truncate_was_when_elipsis_would_add_length + css2sass("foo }foo#{"a" * 14}") + assert(false, "Expected exception") + rescue Sass::SyntaxError => err + assert_equal(1, err.sass_line) + assert_equal('Invalid CSS after "foo ": expected "{", was "}fooaaaaaaaaaaaaaa"', err.message) + end + + def test_error_gets_rid_of_trailing_newline_for_after + css2sass("foo \n ") + assert(false, "Expected exception") + rescue Sass::SyntaxError => err + assert_equal(2, err.sass_line) + assert_equal('Invalid CSS after "foo": expected "{", was ""', err.message) + end + + def test_error_gets_rid_of_trailing_newline_for_was + css2sass("foo \n }foo") + assert(false, "Expected exception") + rescue Sass::SyntaxError => err + assert_equal(2, err.sass_line) + assert_equal('Invalid CSS after "foo": expected "{", was "}foo"', err.message) + end + + # Encodings + + unless Haml::Util.ruby1_8? + def test_encoding_error + css2sass("foo\nbar\nb\xFEaz".force_encoding("utf-8")) + assert(false, "Expected exception") + rescue Sass::SyntaxError => e + assert_equal(3, e.sass_line) + assert_equal('Invalid UTF-8 character "\xFE"', e.message) + end + + def test_ascii_incompatible_encoding_error + template = "foo\nbar\nb_z".encode("utf-16le") + template[9] = "\xFE".force_encoding("utf-16le") + css2sass(template) + assert(false, "Expected exception") + rescue Sass::SyntaxError => e + assert_equal(3, e.sass_line) + assert_equal('Invalid UTF-16LE character "\xFE"', e.message) + end end private def css2sass(string, opts={})