10
10
import html
11
11
import io
12
12
import itertools
13
- import locale
14
13
import operator
15
14
import os
16
15
import pickle
@@ -975,15 +974,13 @@ def test_tostring_xml_declaration(self):
975
974
976
975
def test_tostring_xml_declaration_unicode_encoding (self ):
977
976
elem = ET .XML ('<body><tag/></body>' )
978
- preferredencoding = locale .getpreferredencoding ()
979
977
self .assertEqual (
980
- f"<?xml version='1.0' encoding='{ preferredencoding } '?> \n <body><tag /></body>" ,
981
- ET . tostring ( elem , encoding = 'unicode' , xml_declaration = True )
978
+ ET . tostring ( elem , encoding = 'unicode' , xml_declaration = True ) ,
979
+ "<?xml version='1.0' encoding='utf-8'?> \n <body><tag /></body>"
982
980
)
983
981
984
982
def test_tostring_xml_declaration_cases (self ):
985
983
elem = ET .XML ('<body><tag>ø</tag></body>' )
986
- preferredencoding = locale .getpreferredencoding ()
987
984
TESTCASES = [
988
985
# (expected_retval, encoding, xml_declaration)
989
986
# ... xml_declaration = None
@@ -1010,7 +1007,7 @@ def test_tostring_xml_declaration_cases(self):
1010
1007
b"<body><tag>ø</tag></body>" , 'US-ASCII' , True ),
1011
1008
(b"<?xml version='1.0' encoding='ISO-8859-1'?>\n "
1012
1009
b"<body><tag>\xf8 </tag></body>" , 'ISO-8859-1' , True ),
1013
- (f "<?xml version='1.0' encoding='{ preferredencoding } '?>\n "
1010
+ ("<?xml version='1.0' encoding='utf-8 '?>\n "
1014
1011
"<body><tag>ø</tag></body>" , 'unicode' , True ),
1015
1012
1016
1013
]
@@ -1048,11 +1045,10 @@ def test_tostringlist_xml_declaration(self):
1048
1045
b"<?xml version='1.0' encoding='us-ascii'?>\n <body><tag /></body>"
1049
1046
)
1050
1047
1051
- preferredencoding = locale .getpreferredencoding ()
1052
1048
stringlist = ET .tostringlist (elem , encoding = 'unicode' , xml_declaration = True )
1053
1049
self .assertEqual (
1054
1050
'' .join (stringlist ),
1055
- f "<?xml version='1.0' encoding='{ preferredencoding } '?>\n <body><tag /></body>"
1051
+ "<?xml version='1.0' encoding='utf-8 '?>\n <body><tag /></body>"
1056
1052
)
1057
1053
self .assertRegex (stringlist [0 ], r"^<\?xml version='1.0' encoding='.+'?>" )
1058
1054
self .assertEqual (['<body' , '>' , '<tag' , ' />' , '</body>' ], stringlist [1 :])
@@ -3712,49 +3708,114 @@ def test_encoding(self):
3712
3708
"<tag key=\" åöö<>\" />" % enc ).encode (enc ))
3713
3709
3714
3710
def test_write_to_filename (self ):
3715
- self .addCleanup (os_helper .unlink , TESTFN )
3716
- tree = ET .ElementTree (ET .XML ('''<site />''' ))
3711
+ tree = ET .ElementTree (ET .XML ('''<site>\xf8 </site>''' ))
3717
3712
tree .write (TESTFN )
3718
3713
with open (TESTFN , 'rb' ) as f :
3719
- self .assertEqual (f .read (), b'''<site />''' )
3714
+ self .assertEqual (f .read (), b'''<site>ø</site>''' )
3715
+
3716
+ def test_write_to_filename_with_encoding (self ):
3717
+ self .addCleanup (os_helper .unlink , TESTFN )
3718
+ tree = ET .ElementTree (ET .XML ('''<site>\xf8 </site>''' ))
3719
+ tree .write (TESTFN , encoding = 'utf-8' )
3720
+ with open (TESTFN , 'rb' ) as f :
3721
+ self .assertEqual (f .read (), b'''<site>\xc3 \xb8 </site>''' )
3722
+
3723
+ tree .write (TESTFN , encoding = 'ISO-8859-1' )
3724
+ with open (TESTFN , 'rb' ) as f :
3725
+ self .assertEqual (f .read (),
3726
+ b'''<?xml version='1.0' encoding='ISO-8859-1'?>\n '''
3727
+ b'''<site>\xf8 </site>''' )
3728
+
3729
+ def test_write_to_filename_as_unicode (self ):
3730
+ self .addCleanup (os_helper .unlink , TESTFN )
3731
+ with open (TESTFN , 'w' ) as f :
3732
+ encoding = f .encoding
3733
+ os_helper .unlink (TESTFN )
3734
+
3735
+ tree = ET .ElementTree (ET .XML ('''<site>\xf8 </site>''' ))
3736
+ tree .write (TESTFN , encoding = 'unicode' )
3737
+ with open (TESTFN , 'rb' ) as f :
3738
+ data = f .read ()
3739
+ expected = "<site>\xf8 </site>" .encode (encoding , 'xmlcharrefreplace' )
3740
+ self .assertIn (
3741
+ "<site>\xf8 </site>" .encode (encoding , 'xmlcharrefreplace' ),
3742
+ data )
3743
+ if encoding .lower () in ('utf-8' , 'ascii' ):
3744
+ self .assertEqual (data , expected )
3745
+ else :
3746
+ self .assertIn (b"<?xml version='1.0' encoding=" , data )
3747
+ self .assertIn (expected , data )
3720
3748
3721
3749
def test_write_to_text_file (self ):
3722
3750
self .addCleanup (os_helper .unlink , TESTFN )
3723
- tree = ET .ElementTree (ET .XML ('''<site / >''' ))
3751
+ tree = ET .ElementTree (ET .XML ('''<site> \xf8 </site >''' ))
3724
3752
with open (TESTFN , 'w' , encoding = 'utf-8' ) as f :
3725
3753
tree .write (f , encoding = 'unicode' )
3726
3754
self .assertFalse (f .closed )
3727
3755
with open (TESTFN , 'rb' ) as f :
3728
- self .assertEqual (f .read (), b'''<site />''' )
3756
+ self .assertEqual (f .read (), b'''<site>\xc3 \xb8 </site>''' )
3757
+
3758
+ with open (TESTFN , 'w' , encoding = 'ascii' , errors = 'xmlcharrefreplace' ) as f :
3759
+ tree .write (f , encoding = 'unicode' )
3760
+ self .assertFalse (f .closed )
3761
+ with open (TESTFN , 'rb' ) as f :
3762
+ self .assertEqual (f .read (),
3763
+ b'''<?xml version='1.0' encoding='ascii'?>\n '''
3764
+ b'''<site>ø</site>''' )
3765
+
3766
+ with open (TESTFN , 'w' , encoding = 'ISO-8859-1' ) as f :
3767
+ tree .write (f , encoding = 'unicode' )
3768
+ self .assertFalse (f .closed )
3769
+ with open (TESTFN , 'rb' ) as f :
3770
+ self .assertEqual (f .read (),
3771
+ b'''<?xml version='1.0' encoding='ISO-8859-1'?>\n '''
3772
+ b'''<site>\xf8 </site>''' )
3729
3773
3730
3774
def test_write_to_binary_file (self ):
3731
3775
self .addCleanup (os_helper .unlink , TESTFN )
3732
- tree = ET .ElementTree (ET .XML ('''<site / >''' ))
3776
+ tree = ET .ElementTree (ET .XML ('''<site> \xf8 </site >''' ))
3733
3777
with open (TESTFN , 'wb' ) as f :
3734
3778
tree .write (f )
3735
3779
self .assertFalse (f .closed )
3736
3780
with open (TESTFN , 'rb' ) as f :
3737
- self .assertEqual (f .read (), b'''<site />''' )
3781
+ self .assertEqual (f .read (), b'''<site>ø</site>''' )
3782
+
3783
+ def test_write_to_binary_file_with_encoding (self ):
3784
+ self .addCleanup (os_helper .unlink , TESTFN )
3785
+ tree = ET .ElementTree (ET .XML ('''<site>\xf8 </site>''' ))
3786
+ with open (TESTFN , 'wb' ) as f :
3787
+ tree .write (f , encoding = 'utf-8' )
3788
+ self .assertFalse (f .closed )
3789
+ with open (TESTFN , 'rb' ) as f :
3790
+ self .assertEqual (f .read (), b'''<site>\xc3 \xb8 </site>''' )
3791
+
3792
+ with open (TESTFN , 'wb' ) as f :
3793
+ tree .write (f , encoding = 'ISO-8859-1' )
3794
+ self .assertFalse (f .closed )
3795
+ with open (TESTFN , 'rb' ) as f :
3796
+ self .assertEqual (f .read (),
3797
+ b'''<?xml version='1.0' encoding='ISO-8859-1'?>\n '''
3798
+ b'''<site>\xf8 </site>''' )
3738
3799
3739
3800
def test_write_to_binary_file_with_bom (self ):
3740
3801
self .addCleanup (os_helper .unlink , TESTFN )
3741
- tree = ET .ElementTree (ET .XML ('''<site / >''' ))
3802
+ tree = ET .ElementTree (ET .XML ('''<site> \xf8 </site >''' ))
3742
3803
# test BOM writing to buffered file
3743
3804
with open (TESTFN , 'wb' ) as f :
3744
3805
tree .write (f , encoding = 'utf-16' )
3745
3806
self .assertFalse (f .closed )
3746
3807
with open (TESTFN , 'rb' ) as f :
3747
3808
self .assertEqual (f .read (),
3748
3809
'''<?xml version='1.0' encoding='utf-16'?>\n '''
3749
- '''<site / >''' .encode ("utf-16" ))
3810
+ '''<site> \xf8 </site >''' .encode ("utf-16" ))
3750
3811
# test BOM writing to non-buffered file
3751
3812
with open (TESTFN , 'wb' , buffering = 0 ) as f :
3752
3813
tree .write (f , encoding = 'utf-16' )
3753
3814
self .assertFalse (f .closed )
3754
3815
with open (TESTFN , 'rb' ) as f :
3755
3816
self .assertEqual (f .read (),
3756
3817
'''<?xml version='1.0' encoding='utf-16'?>\n '''
3757
A851
td>
- '''<site / >''' .encode ("utf-16" ))
3818
+ '''<site> \xf8 </site >''' .encode ("utf-16" ))
3758
3819
3759
3820
def test_read_from_stringio (self ):
3760
3821
tree = ET .ElementTree ()
@@ -3763,10 +3824,10 @@ def test_read_from_stringio(self):
3763
3824
self .assertEqual (tree .getroot ().tag , 'site' )
3764
3825
3765
3826
def test_write_to_stringio (self ):
3766
- tree = ET .ElementTree (ET .XML ('''<site / >''' ))
3827
+ tree = ET .ElementTree (ET .XML ('''<site> \xf8 </site >''' ))
3767
3828
stream = io .StringIO ()
3768
3829
tree .write (stream , encoding = 'unicode' )
3769
- self .assertEqual (stream .getvalue (), '''<site / >''' )
3830
+ self .assertEqual (stream .getvalue (), '''<site> \xf8 </site >''' )
3770
3831
3771
3832
def test_read_from_bytesio (self ):
3772
3833
tree = ET .ElementTree ()
@@ -3775,10 +3836,10 @@ def test_read_from_bytesio(self):
3775
3836
self .assertEqual (tree .getroot ().tag , 'site' )
3776
3837
3777
3838
def test_write_to_bytesio (self ):
3778
- tree = ET .ElementTree (ET .XML ('''<site / >''' ))
3839
+ tree = ET .ElementTree (ET .XML ('''<site> \xf8 </site >''' ))
3779
3840
raw = io .BytesIO ()
3780
3841
tree .write (raw )
3781
- self .assertEqual (raw .getvalue (), b'''<site / >''' )
3842
+ self .assertEqual (raw .getvalue (), b'''<site>ø</site >''' )
3782
3843
3783
3844
class dummy :
3784
3845
pass
@@ -3792,12 +3853,12 @@ def test_read_from_user_text_reader(self):
3792
3853
self .assertEqual (tree .getroot ().tag , 'site' )
3793
3854
3794
3855
def test_write_to_user_text_writer (self ):
3795
- tree = ET .ElementTree (ET .XML ('''<site / >''' ))
3856
+ tree = ET .ElementTree (ET .XML ('''<site> \xf8 </site >''' ))
3796
3857
stream = io .StringIO ()
3797
3858
writer = self .dummy ()
3798
3859
writer .write = stream .write
3799
3860
tree .write (writer , encoding = 'unicode' )
3800
- self .assertEqual (stream .getvalue (), '''<site / >''' )
3861
+ self .assertEqual (stream .getvalue (), '''<site> \xf8 </site >''' )
3801
3862
3802
3863
def test_read_from_user_binary_reader (self ):
3803
3864
raw = io .BytesIO (b'''<?xml version="1.0"?><site></site>''' )
@@ -3809,12 +3870,12 @@ def test_read_from_user_binary_reader(self):
3809
3870
tree = ET .ElementTree ()
3810
3871
3811
3872
def test_write_to_user_binary_writer (self ):
3812
- tree = ET .ElementTree (ET .XML ('''<site / >''' ))
3873
+ tree = ET .ElementTree (ET .XML ('''<site> \xf8 </site >''' ))
3813
3874
raw = io .BytesIO ()
3814
3875
writer = self .dummy ()
3815
3876
writer .write = raw .write
3816
3877
tree .write (writer )
3817
- self .assertEqual (raw .getvalue (), b'''<site / >''' )
3878
+ self .assertEqual (raw .getvalue (), b'''<site>ø</site >''' )
3818
3879
3819
3880
def test_write_to_user_binary_writer_with_bom (self ):
3820
3881
tree = ET .ElementTree (ET .XML ('''<site />''' ))
0 commit comments