blob: 03940191415caedae92249346013023e9f9a2aa8 (
plain)
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
|
#!/usr/bin/env python
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
"""
tests for mozfile.NamedTemporaryFile
"""
from __future__ import absolute_import
import mozfile
import os
import unittest
import mozunit
import six
class TestNamedTemporaryFile(unittest.TestCase):
"""test our fix for NamedTemporaryFile"""
def test_named_temporary_file(self):
"""Ensure the fix for re-opening a NamedTemporaryFile works
Refer to https://bugzilla.mozilla.org/show_bug.cgi?id=818777
and https://bugzilla.mozilla.org/show_bug.cgi?id=821362
"""
test_string = b"A simple test"
with mozfile.NamedTemporaryFile() as temp:
# Test we can write to file
temp.write(test_string)
# Forced flush, so that we can read later
temp.flush()
# Test we can open the file again on all platforms
self.assertEqual(open(temp.name, "rb").read(), test_string)
def test_iteration(self):
"""ensure the line iterator works"""
# make a file and write to it
tf = mozfile.NamedTemporaryFile()
notes = [b"doe", b"rae", b"mi"]
for note in notes:
tf.write(b"%s\n" % note)
tf.flush()
# now read from it
tf.seek(0)
lines = [line.rstrip(b"\n") for line in tf.readlines()]
self.assertEqual(lines, notes)
# now read from it iteratively
lines = []
for line in tf:
lines.append(line.strip())
self.assertEqual(lines, []) # because we did not seek(0)
tf.seek(0)
lines = []
for line in tf:
lines.append(line.strip())
self.assertEqual(lines, notes)
def test_delete(self):
"""ensure ``delete=True/False`` works as expected"""
# make a deleteable file; ensure it gets cleaned up
path = None
with mozfile.NamedTemporaryFile(delete=True) as tf:
path = tf.name
self.assertTrue(isinstance(path, six.string_types))
self.assertFalse(os.path.exists(path))
# it is also deleted when __del__ is called
# here we will do so explicitly
tf = mozfile.NamedTemporaryFile(delete=True)
path = tf.name
self.assertTrue(os.path.exists(path))
del tf
self.assertFalse(os.path.exists(path))
# Now the same thing but we won't delete the file
path = None
try:
with mozfile.NamedTemporaryFile(delete=False) as tf:
path = tf.name
self.assertTrue(os.path.exists(path))
finally:
if path and os.path.exists(path):
os.remove(path)
path = None
try:
tf = mozfile.NamedTemporaryFile(delete=False)
path = tf.name
self.assertTrue(os.path.exists(path))
del tf
self.assertTrue(os.path.exists(path))
finally:
if path and os.path.exists(path):
os.remove(path)
if __name__ == "__main__":
mozunit.main()
|