1717
1818import unittest
1919import tempfile
20+ import os
2021import sqlite3
2122import os
2223from abc import abstractmethod , ABCMeta
@@ -97,58 +98,101 @@ def _setup_instance_helper(self,
9798 self .test_append_enabled = test_append
9899 self .round_timestamps = round_timestamps
99100
101+ def setUp (self ):
102+ with tempfile .NamedTemporaryFile ('w+' , delete = False ) as test_file :
103+ self .test_file_name = test_file .name
104+
105+ def tearDown (self ):
106+ os .remove (self .test_file_name )
107+ del self .test_file_name
108+
100109 def test_path_like_explicit_stop (self ):
101110 """testing with path-like and explicit stop() call"""
102- filename = self ._get_temp_filename ()
103111
104112 # create writer
105113 print ("writing all messages/comments" )
106- writer = self .writer_constructor (filename )
114+ writer = self .writer_constructor (self . test_file_name )
107115 self ._write_all (writer )
108116 if hasattr (writer .file , 'fileno' ):
109117 os .fsync (writer .file .fileno ())
110118 writer .stop ()
119+ if hasattr (writer .file , 'closed' ):
120+ self .assertTrue (writer .file .closed )
111121
112122 print ("reading all messages" )
113- reader = self .reader_constructor (filename )
123+ reader = self .reader_constructor (self . test_file_name )
114124 read_messages = list (reader )
115125 # redundant, but this checks if stop() can be called multiple times
116126 reader .stop ()
127+ if hasattr (writer .file , 'closed' ):
128+ self .assertTrue (writer .file .closed )
117129
118130 # check if at least the number of messages matches
119131 # could use assertCountEqual in later versions of Python and in the other methods
120132 self .assertEqual (len (read_messages ), len (self .original_messages ),
121133 "the number of written messages does not match the number of read messages" )
122134
123135 self .assertMessagesEqual (read_messages )
124- self .assertIncludesComments (filename )
136+ self .assertIncludesComments (self . test_file_name )
125137
126138 def test_path_like_context_manager (self ):
127139 """testing with path-like object and context manager"""
128- filename = self ._get_temp_filename ()
129140
130141 # create writer
131142 print ("writing all messages/comments" )
132- with self .writer_constructor (filename ) as writer :
143+ with self .writer_constructor (self . test_file_name ) as writer :
133144 self ._write_all (writer )
134145 if hasattr (writer .file , 'fileno' ):
135146 os .fsync (writer .file .fileno ())
147+ w = writer
148+ if hasattr (w .file , 'closed' ):
149+ self .assertTrue (w .file .closed )
136150
137151 # read all written messages
138152 print ("reading all messages" )
139- with self .reader_constructor (filename ) as reader :
153+ with self .reader_constructor (self . test_file_name ) as reader :
140154 read_messages = list (reader )
155+ r = reader
156+ if hasattr (r .file , 'closed' ):
157+ self .assertTrue (r .file .closed )
141158
142159 # check if at least the number of messages matches;
143160 self .assertEqual (len (read_messages ), len (self .original_messages ),
144161 "the number of written messages does not match the number of read messages" )
145162
146163 self .assertMessagesEqual (read_messages )
147- self .assertIncludesComments (filename )
164+ self .assertIncludesComments (self . test_file_name )
148165
149166 def test_file_like_explicit_stop (self ):
150167 """testing with file-like object and explicit stop() call"""
151- raise unittest .SkipTest ("not yet implemented" )
168+
169+ # create writer
170+ print ("writing all messages/comments" )
171+ my_file = open (self .test_file_name , 'w' )
172+ writer = self .writer_constructor (my_file )
173+ self ._write_all (writer )
174+ if hasattr (writer .file , 'fileno' ):
175+ os .fsync (writer .file .fileno ())
176+ writer .stop ()
177+ if hasattr (my_file , 'closed' ):
178+ self .assertTrue (my_file .closed )
179+
180+ print ("reading all messages" )
181+ my_file = open (self .test_file_name , 'r' )
182+ reader = self .reader_constructor (my_file )
183+ read_messages = list (reader )
184+ # redundant, but this checks if stop() can be called multiple times
185+ reader .stop ()
186+ if hasattr (my_file , 'closed' ):
187+ self .assertTrue (my_file .closed )
188+
189+ # check if at least the number of messages matches
190+ # could use assertCountEqual in later versions of Python and in the other methods
191+ self .assertEqual (len (read_messages ), len (self .original_messages ),
192+ "the number of written messages does not match the number of read messages" )
193+
194+ self .assertMessagesEqual (read_messages )
195+ self .assertIncludesComments (self .test_file_name )
152196
153197 def test_file_like_context_manager (self ):
154198 """testing with file-like object and context manager"""
@@ -161,25 +205,24 @@ def test_append_mode(self):
161205 if not self .test_append_enabled :
162206 raise unittest .SkipTest ("do not test append mode" )
163207
164- filename = self ._get_temp_filename ()
165208 count = len (self .original_messages )
166209 first_part = self .original_messages [:count // 2 ]
167210 second_part = self .original_messages [count // 2 :]
168211
169212 # write first half
170- with self .writer_constructor (filename ) as writer :
213+ with self .writer_constructor (self . test_file_name ) as writer :
171214 for message in first_part :
172215 writer (message )
173216 if hasattr (writer .file , 'fileno' ):
174217 os .fsync (writer .file .fileno ())
175218
176219 # use append mode for second half
177220 try :
178- writer = self .writer_constructor (filename , append = True )
221+ writer = self .writer_constructor (self . test_file_name , append = True )
179222 except TypeError as e :
180223 # maybe "append" is not a formal parameter
181224 try :
182- writer = self .writer_constructor (filename )
225+ writer = self .writer_constructor (self . test_file_name )
183226 except TypeError :
184227 # is the is still a problem, raise the initial error
185228 raise e
@@ -188,16 +231,11 @@ def test_append_mode(self):
188231 writer (message )
189232 if hasattr (writer .file , 'fileno' ):
190233 os .fsync (writer .file .fileno ())
191- with self .reader_constructor (filename ) as reader :
234+ with self .reader_constructor (self . test_file_name ) as reader :
192235 read_messages = list (reader )
193236
194237 self .assertMessagesEqual (read_messages )
195238
196- @staticmethod
197- def _get_temp_filename ():
198- with tempfile .NamedTemporaryFile ('w+' , delete = False ) as temp :
199- return temp .name
200-
201239 def _write_all (self , writer ):
202240 """Writes messages and insert comments here and there."""
203241 # Note: we make no assumptions about the length of original_messages and original_comments
@@ -237,7 +275,7 @@ def assertIncludesComments(self, filename):
237275 """
238276 if self .original_comments :
239277 # read the entire outout file
240- with open (filename , 'rt ' ) as file :
278+ with open (filename , 'r ' ) as file :
241279 output_contents = file .read ()
242280 # check each, if they can be found in there literally
243281 for comment in self .original_comments :
0 commit comments