1414import unittest
1515import warnings
1616
17- from six import PY3 , StringIO , b , text_type
17+ from six import PY3 , StringIO , b , string_types , text_type
1818from werkzeug .test import Client
1919from werkzeug .wrappers import Response
2020
2828 def normalize_path (path ):
2929 path = os .path .abspath (os .path .normpath (path ))
3030 return path .replace (os .sep , os .altsep )
31-
32- def normalize_source_map_path (path ):
33- """To workaround strange path separators made by libsass ---
34- which seems a bug of libsass on win32.
35-
36- """
37- return path .replace (os .altsep , '//' )
3831else :
3932 def normalize_path (path ):
4033 return path
4134
42- normalize_source_map_path = normalize_path
43-
4435
4536A_EXPECTED_CSS = '''\
4637 body {
@@ -62,7 +53,7 @@ def normalize_path(path):
6253A_EXPECTED_MAP = {
6354 'version' : 3 ,
6455 'file' : 'test/a.css' ,
65- 'sources' : [normalize_source_map_path ( 'test/a.scss' ) ],
56+ 'sources' : ['test/a.scss' ],
6657 'sourcesContent' : [],
6758 'names' : [],
6859 'mappings' : ';AAKA;EAHE,kBAAkB;;EAIpB,KAAK;IAED,OAAO'
@@ -120,7 +111,42 @@ def normalize_path(path):
120111utf8_if_py3 = {'encoding' : 'utf-8' } if PY3 else {}
121112
122113
123- class SassTestCase (unittest .TestCase ):
114+ class BaseTestCase (unittest .TestCase ):
115+
116+ def assert_json_file (self , expected , filename ):
117+ with open (filename ) as f :
118+ try :
119+ tree = json .load (f )
120+ except ValueError as e :
121+ f .seek (0 )
122+ msg = '{0!s}\n \n {1}:\n \n {2}' .format (e , filename , f .read ())
123+ raise ValueError (msg )
124+ self .assertEqual (expected , tree )
125+
126+ def assert_source_map_equal (self , expected , actual , * args , ** kwargs ):
127+ if isinstance (expected , string_types ):
128+ expected = json .loads (expected )
129+ if isinstance (actual , string_types ):
130+ actual = json .loads (actual )
131+ if sys .platform == 'win32' :
132+ # On Windows the result of "mappings" is strange;
133+ # seems a bug of libsass itself
134+ expected .pop ('mappings' , None )
135+ actual .pop ('mappings' , None )
136+ self .assertEqual (expected , actual , * args , ** kwargs )
137+
138+ def assert_source_map_file (self , expected , filename ):
139+ with open (filename ) as f :
140+ try :
141+ tree = json .load (f )
142+ except ValueError as e :
143+ f .seek (0 )
144+ msg = '{0!s}\n \n {1}:\n \n {2}' .format (e , filename , f .read ())
145+ raise ValueError (msg )
146+ self .assert_source_map_equal (expected , tree )
147+
148+
149+ class SassTestCase (BaseTestCase ):
124150
125151 def test_version (self ):
126152 assert re .match (r'^\d+\.\d+\.\d+$' , sass .__version__ )
@@ -143,7 +169,7 @@ def test_and_join(self):
143169 self .assertEqual ('' , sass .and_join ([]))
144170
145171
146- class CompileTestCase (unittest . TestCase ):
172+ class CompileTestCase (BaseTestCase ):
147173
148174 def test_compile_required_arguments (self ):
149175 self .assertRaises (TypeError , sass .compile )
@@ -258,10 +284,7 @@ def test_compile_source_map(self):
258284 ),
259285 actual
260286 )
261- self .assertEqual (
262- A_EXPECTED_MAP ,
263- json .loads (source_map )
264- )
287+ self .assert_source_map_equal (A_EXPECTED_MAP , source_map )
265288
266289 def test_compile_source_map_deprecated_source_comments_map (self ):
267290 filename = 'test/a.scss'
@@ -279,7 +302,7 @@ def test_compile_source_map_deprecated_source_comments_map(self):
279302 self .assertEqual (1 , len (w ))
280303 assert issubclass (w [- 1 ].category , DeprecationWarning )
281304 self .assertEqual (expected , actual )
282- self .assertEqual (expected_map , actual_map )
305+ self .assert_source_map_equal (expected_map , actual_map )
283306
284307 def test_regression_issue_2 (self ):
285308 actual = sass .compile (string = '''
@@ -303,7 +326,7 @@ def test_regression_issue_11(self):
303326 assert normalized == '@media(max-width:3){body{color:black;}}'
304327
305328
306- class BuilderTestCase (unittest . TestCase ):
329+ class BuilderTestCase (BaseTestCase ):
307330
308331 def setUp (self ):
309332 self .temp_path = tempfile .mkdtemp ()
@@ -359,7 +382,7 @@ def test_output_style(self):
359382 css )
360383
361384
362- class ManifestTestCase (unittest . TestCase ):
385+ class ManifestTestCase (BaseTestCase ):
363386
364387 def test_normalize_manifests (self ):
365388 manifests = Manifest .normalize_manifests ({
@@ -401,11 +424,11 @@ def test_build_one(self):
401424 replace_source_path (B_EXPECTED_CSS_WITH_MAP , 'b.scss' ),
402425 f .read ()
403426 )
404- self .assert_json_file (
427+ self .assert_source_map_file (
405428 {
406429 'version' : 3 ,
407430 'file' : '../test/b.css' ,
408- 'sources' : [normalize_source_map_path ( '../test/b.scss' ) ],
431+ 'sources' : ['../test/b.scss' ],
409432 'sourcesContent' : [],
410433 'names' : [],
411434 'mappings' : ';AAAA,EAAE;EAEE,WAAW'
@@ -419,11 +442,11 @@ def test_build_one(self):
419442 replace_source_path (D_EXPECTED_CSS_WITH_MAP , 'd.scss' ),
420443 f .read ()
421444 )
422- self .assert_json_file (
445+ self .assert_source_map_file (
423446 {
424447 'version' : 3 ,
425448 'file' : '../test/d.css' ,
426- 'sources' : [normalize_source_map_path ( '../test/d.scss' ) ],
449+ 'sources' : ['../test/d.scss' ],
427450 'sourcesContent' : [],
428451 'names' : [],
429452 'mappings' : ';AAKA;EAHE,kBAAkB;;EAIpB,KAAK;IAED,MAAM'
@@ -433,18 +456,8 @@ def test_build_one(self):
433456 finally :
434457 shutil .rmtree (d )
435458
436- def assert_json_file (self , expected , filename ):
437- with open (filename ) as f :
438- try :
439- tree = json .load (f )
440- except ValueError as e :
441- f .seek (0 )
442- msg = '{0!s}\n \n {1}:\n \n {2}' .format (e , filename , f .read ())
443- raise ValueError (msg )
444- self .assertEqual (expected , tree )
445-
446459
447- class WsgiTestCase (unittest . TestCase ):
460+ class WsgiTestCase (BaseTestCase ):
448461
449462 @staticmethod
450463 def sample_wsgi_app (environ , start_response ):
@@ -485,7 +498,7 @@ def assert_bytes_equal(self, expected, actual, *args):
485498 * args )
486499
487500
488- class DistutilsTestCase (unittest . TestCase ):
501+ class DistutilsTestCase (BaseTestCase ):
489502
490503 def tearDown (self ):
491504 for filename in self .list_built_css ():
@@ -531,7 +544,7 @@ def test_output_style(self):
531544 )
532545
533546
534- class SasscTestCase (unittest . TestCase ):
547+ class SasscTestCase (BaseTestCase ):
535548
536549 def setUp (self ):
537550 self .out = StringIO ()
@@ -625,7 +638,7 @@ def test_sassc_sourcemap(self):
625638 f .read ().strip ()
626639 )
627640 with open (out_filename + '.map' ) as f :
628- self .assertEqual (
641+ self .assert_source_map_equal (
629642 dict (A_EXPECTED_MAP , sources = None ),
630643 dict (json .load (f ), sources = None )
631644 )
0 commit comments