Ignore:
Timestamp:
12/30/08 08:30:52 (6 years ago)
Author:
xi
Message:

Fixed str/bytes issues with Python 3 in _yaml.pyx.

File:
1 copied

Legend:

Unmodified
Added
Removed
  • pyyaml/trunk/tests/lib3/test_input_output.py

    r333 r334  
    11 
    22import yaml 
    3 import codecs, StringIO 
    4  
    5 def _unicode_open(file, encoding, errors='strict'): 
    6     info = codecs.lookup(encoding) 
    7     srw = codecs.StreamReaderWriter(file, info.streamreader, info.streamwriter, errors) 
    8     srw.encoding = encoding 
    9     return srw 
     3import codecs, io 
    104 
    115def test_unicode_input(unicode_filename, verbose=False): 
    126    data = open(unicode_filename, 'rb').read().decode('utf-8') 
    137    value = ' '.join(data.split()) 
    14     output = yaml.load(_unicode_open(StringIO.StringIO(data.encode('utf-8')), 'utf-8')) 
     8    output = yaml.load(data) 
    159    assert output == value, (output, value) 
    16     for input in [data, data.encode('utf-8'), 
     10    output = yaml.load(io.StringIO(data)) 
     11    assert output == value, (output, value) 
     12    for input in [data.encode('utf-8'), 
    1713                    codecs.BOM_UTF8+data.encode('utf-8'), 
    1814                    codecs.BOM_UTF16_BE+data.encode('utf-16-be'), 
    1915                    codecs.BOM_UTF16_LE+data.encode('utf-16-le')]: 
    2016        if verbose: 
    21             print "INPUT:", repr(input[:10]), "..." 
     17            print("INPUT:", repr(input[:10]), "...") 
    2218        output = yaml.load(input) 
    2319        assert output == value, (output, value) 
    24         output = yaml.load(StringIO.StringIO(input)) 
     20        output = yaml.load(io.BytesIO(input)) 
    2521        assert output == value, (output, value) 
    2622 
     
    3329                    codecs.BOM_UTF8+data.encode('utf-16-be'), 
    3430                    codecs.BOM_UTF16_BE+data.encode('utf-16-le'), 
    35                     codecs.BOM_UTF16_LE+data.encode('utf-8')+'!']: 
     31                    codecs.BOM_UTF16_LE+data.encode('utf-8')+b'!']: 
    3632        try: 
    3733            yaml.load(input) 
    38         except yaml.YAMLError, exc: 
     34        except yaml.YAMLError as exc: 
    3935            if verbose: 
    40                 print exc 
     36                print(exc) 
    4137        else: 
    4238            raise AssertionError("expected an exception") 
    4339        try: 
    44             yaml.load(StringIO.StringIO(input)) 
    45         except yaml.YAMLError, exc: 
     40            yaml.load(io.BytesIO(input)) 
     41        except yaml.YAMLError as exc: 
    4642            if verbose: 
    47                 print exc 
     43                print(exc) 
    4844        else: 
    4945            raise AssertionError("expected an exception") 
     
    5450    data = open(unicode_filename, 'rb').read().decode('utf-8') 
    5551    value = ' '.join(data.split()) 
    56     for encoding in [None, 'utf-8', 'utf-16-be', 'utf-16-le']: 
    57         for allow_unicode in [False, True]: 
    58             data1 = yaml.dump(value, allow_unicode=allow_unicode) 
    59             stream = StringIO.StringIO() 
    60             yaml.dump(value, _unicode_open(stream, 'utf-8'), encoding=encoding, allow_unicode=allow_unicode) 
     52    for allow_unicode in [False, True]: 
     53        data1 = yaml.dump(value, allow_unicode=allow_unicode) 
     54        for encoding in [None, 'utf-8', 'utf-16-be', 'utf-16-le']: 
     55            stream = io.StringIO() 
     56            yaml.dump(value, stream, encoding=encoding, allow_unicode=allow_unicode) 
    6157            data2 = stream.getvalue() 
    6258            data3 = yaml.dump(value, encoding=encoding, allow_unicode=allow_unicode) 
    63             stream = StringIO.StringIO() 
    64             yaml.dump(value, stream, encoding=encoding, allow_unicode=allow_unicode) 
    65             data4 = stream.getvalue() 
     59            stream = io.BytesIO() 
     60            if encoding is None: 
     61                try: 
     62                    yaml.dump(value, stream, encoding=encoding, allow_unicode=allow_unicode) 
     63                except TypeError as exc: 
     64                    if verbose: 
     65                        print(exc) 
     66                    data4 = None 
     67                else: 
     68                    raise AssertionError("expected an exception") 
     69            else: 
     70                yaml.dump(value, stream, encoding=encoding, allow_unicode=allow_unicode) 
     71                data4 = stream.getvalue() 
     72                if verbose: 
     73                    print("BYTES:", data4[:50]) 
     74                data4 = data4.decode(encoding) 
    6675            for copy in [data1, data2, data3, data4]: 
     76                if copy is None: 
     77                    continue 
     78                assert isinstance(copy, str) 
    6779                if allow_unicode: 
    6880                    try: 
    6981                        copy[4:].encode('ascii') 
    70                     except (UnicodeDecodeError, UnicodeEncodeError), exc: 
     82                    except UnicodeEncodeError as exc: 
    7183                        if verbose: 
    72                             print exc 
     84                            print(exc) 
    7385                    else: 
    7486                        raise AssertionError("expected an exception") 
     
    7688                    copy[4:].encode('ascii') 
    7789            assert isinstance(data1, str), (type(data1), encoding) 
    78             data1.decode('utf-8') 
    7990            assert isinstance(data2, str), (type(data2), encoding) 
    80             data2.decode('utf-8') 
    81             if encoding is None: 
    82                 assert isinstance(data3, unicode), (type(data3), encoding) 
    83                 assert isinstance(data4, unicode), (type(data4), encoding) 
    84             else: 
    85                 assert isinstance(data3, str), (type(data3), encoding) 
    86                 data3.decode(encoding) 
    87                 assert isinstance(data4, str), (type(data4), encoding) 
    88                 data4.decode(encoding) 
    8991 
    9092test_unicode_output.unittest = ['.unicode'] 
     
    9597        input = data 
    9698        if encoding is not None: 
    97             input = (u'\ufeff'+input).encode(encoding) 
     99            input = ('\ufeff'+input).encode(encoding) 
    98100        output1 = yaml.emit(yaml.parse(input), allow_unicode=True) 
    99         stream = StringIO.StringIO() 
    100         yaml.emit(yaml.parse(input), _unicode_open(stream, 'utf-8'), 
    101                             allow_unicode=True) 
     101        if encoding is None: 
     102            stream = io.StringIO() 
     103        else: 
     104            stream = io.BytesIO() 
     105        yaml.emit(yaml.parse(input), stream, allow_unicode=True) 
    102106        output2 = stream.getvalue() 
     107        assert isinstance(output1, str), (type(output1), encoding) 
    103108        if encoding is None: 
    104             assert isinstance(output1, unicode), (type(output1), encoding) 
     109            assert isinstance(output2, str), (type(output1), encoding) 
    105110        else: 
    106             assert isinstance(output1, str), (type(output1), encoding) 
    107             output1.decode(encoding) 
    108         assert isinstance(output2, str), (type(output2), encoding) 
    109         output2.decode('utf-8') 
     111            assert isinstance(output2, bytes), (type(output1), encoding) 
     112            output2.decode(encoding) 
    110113 
    111114test_unicode_transfer.unittest = ['.unicode'] 
Note: See TracChangeset for help on using the changeset viewer.