/IronPython_Main/Languages/IronPython/Tests/modules/io_related/cStringIO_test.py

# · Python · 361 lines · 261 code · 60 blank · 40 comment · 5 complexity · a58353b18e623c04de6fcc8d497506e3 MD5 · raw file

  1. #####################################################################################
  2. #
  3. # Copyright (c) Microsoft Corporation. All rights reserved.
  4. #
  5. # This source code is subject to terms and conditions of the Apache License, Version 2.0. A
  6. # copy of the license can be found in the License.html file at the root of this distribution. If
  7. # you cannot locate the Apache License, Version 2.0, please send an email to
  8. # ironpy@microsoft.com. By using this source code in any fashion, you are agreeing to be bound
  9. # by the terms of the Apache License, Version 2.0.
  10. #
  11. # You must not remove this notice, or any other, from this software.
  12. #
  13. #
  14. #####################################################################################
  15. ##
  16. ## Test the cStringIO module
  17. ##
  18. from iptest.assert_util import *
  19. import cStringIO
  20. text = "Line 1\nLine 2\nLine 3\nLine 4\nLine 5"
  21. # close
  22. def call_close(i):
  23. AreEqual(i.closed, False)
  24. i.close()
  25. AreEqual(i.closed, True)
  26. i.close()
  27. AreEqual(i.closed, True)
  28. i.close()
  29. AreEqual(i.closed, True)
  30. def call_isatty(i):
  31. AreEqual(i.isatty(), False)
  32. # read
  33. def call_read(i):
  34. AreEqual(i.read(), text)
  35. AreEqual(i.read(), "")
  36. AreEqual(i.read(), "")
  37. i.close()
  38. i.close()
  39. AssertError(ValueError, i.read)
  40. # readline
  41. def call_readline(i):
  42. AreEqual(i.readline(), "Line 1\n")
  43. AreEqual(i.readline(), "Line 2\n")
  44. AreEqual(i.readline(), "Line 3\n")
  45. AreEqual(i.readline(), "Line 4\n")
  46. AreEqual(i.readline(), "Line 5")
  47. AreEqual(i.readline(), "")
  48. i.close()
  49. AssertError(ValueError, i.readline)
  50. def call_readline_n(i):
  51. AreEqual(i.readline(50), "Line 1\n")
  52. AreEqual(i.readline(0), "")
  53. AreEqual(i.readline(1), "L")
  54. AreEqual(i.readline(9), "ine 2\n")
  55. AreEqual(i.readline(50), "Line 3\n")
  56. AreEqual(i.readline(6), "Line 4")
  57. AreEqual(i.readline(50), "\n")
  58. AreEqual(i.readline(50), "Line 5")
  59. i.close()
  60. AssertError(ValueError, i.readline)
  61. # readlines
  62. def call_readlines(i):
  63. AreEqual(i.readlines(), ["Line 1\n", "Line 2\n", "Line 3\n", "Line 4\n", "Line 5"])
  64. AreEqual(i.readlines(), [])
  65. i.close()
  66. AssertError(ValueError, i.readlines)
  67. def call_readlines_n(i):
  68. AreEqual(i.readlines(10), ["Line 1\n", "Line 2\n"])
  69. AreEqual(i.readlines(50), ["Line 3\n", "Line 4\n", "Line 5"])
  70. AreEqual(i.readlines(50), [])
  71. i.close()
  72. AssertError(ValueError, i.readlines)
  73. # getvalue
  74. def call_getvalue(i):
  75. AreEqual(i.getvalue(), text)
  76. AreEqual(i.read(6), "Line 1")
  77. AreEqual(i.getvalue(True), "Line 1")
  78. AreEqual(i.getvalue(), text)
  79. i.close()
  80. AssertError(ValueError, i.getvalue)
  81. # __iter__, next
  82. def call_next(i):
  83. AreEqual(i.__iter__(), i)
  84. AreEqual(i.next(), "Line 1\n")
  85. AreEqual(i.next(), "Line 2\n")
  86. AreEqual([l for l in i], ["Line 3\n", "Line 4\n", "Line 5"])
  87. i.close()
  88. AssertError(ValueError, i.readlines)
  89. # read, readline, reset
  90. def call_reset(i):
  91. AreEqual(i.read(0), "")
  92. AreEqual(i.read(4), "Line")
  93. AreEqual(i.readline(), " 1\n")
  94. i.reset()
  95. AreEqual(i.read(4), "Line")
  96. AreEqual(i.readline(), " 1\n")
  97. i.reset()
  98. AreEqual(i.read(37),text)
  99. i.reset()
  100. AreEqual(i.read(38),text)
  101. i.close()
  102. AssertError(ValueError, i.read, 5)
  103. AssertError(ValueError, i.readline)
  104. # seek, tell, read
  105. def call_seek_tell(i):
  106. AreEqual(i.read(4), "Line")
  107. AreEqual(i.tell(), 4)
  108. i.seek(10)
  109. AreEqual(i.tell(), 10)
  110. AreEqual(i.read(3), "e 2")
  111. i.seek(15, 0)
  112. AreEqual(i.tell(), 15)
  113. AreEqual(i.read(5), "ine 3")
  114. i.seek(3, 1)
  115. AreEqual(i.read(4), "ne 4")
  116. i.seek(-5, 2)
  117. AreEqual(i.tell(), len(text) - 5)
  118. AreEqual(i.read(), "ine 5")
  119. i.seek(1000)
  120. AreEqual(i.tell(), 1000)
  121. AreEqual(i.read(), "")
  122. i.seek(2000, 0)
  123. AreEqual(i.tell(), 2000)
  124. AreEqual(i.read(), "")
  125. i.seek(400, 1)
  126. AreEqual(i.tell(), 2400)
  127. AreEqual(i.read(), "")
  128. i.seek(100, 2)
  129. AreEqual(i.tell(), len(text) + 100)
  130. AreEqual(i.read(), "")
  131. i.close()
  132. AssertError(ValueError, i.tell)
  133. AssertError(ValueError, i.seek, 0)
  134. AssertError(ValueError, i.seek, 0, 2)
  135. # truncate
  136. def call_truncate(i):
  137. AreEqual(i.read(6), "Line 1")
  138. i.truncate(20)
  139. AreEqual(i.tell(), 20)
  140. AreEqual(i.getvalue(), "Line 1\nLine 2\nLine 3")
  141. i.truncate(30)
  142. AreEqual(i.tell(), 20)
  143. AreEqual(i.getvalue(), "Line 1\nLine 2\nLine 3")
  144. i.reset()
  145. AreEqual(i.tell(), 0)
  146. AreEqual(i.read(6), "Line 1")
  147. i.truncate()
  148. AreEqual(i.getvalue(), "Line 1")
  149. i.close()
  150. AssertError(ValueError, i.truncate)
  151. AssertError(ValueError, i.truncate, 10)
  152. # write
  153. def call_write(o):
  154. AreEqual(o.getvalue(), text)
  155. o.write("Data")
  156. o.write(buffer(' 1'))
  157. AssertError(TypeError, o.write, None)
  158. AreEqual(o.read(7), "\nLine 2")
  159. AreEqual(o.getvalue(), "Data 1\nLine 2\nLine 3\nLine 4\nLine 5")
  160. o.close()
  161. AssertError(ValueError, o.write, "Hello")
  162. # writelines
  163. def call_writelines(o):
  164. AreEqual(o.getvalue(), text)
  165. o.writelines(["Data 1", "Data 2"])
  166. AreEqual(o.read(8), "2\nLine 3")
  167. AreEqual(o.getvalue(), "Data 1Data 22\nLine 3\nLine 4\nLine 5")
  168. AssertError(TypeError, o.writelines, [buffer('foo')])
  169. AssertError(TypeError, o.writelines, [None])
  170. o.close()
  171. AssertError(ValueError, o.writelines, "Hello")
  172. AssertError(ValueError, o.writelines, ['foo', buffer('foo')])
  173. AssertError(TypeError, o.writelines, [buffer('foo')])
  174. # softspace
  175. def call_softspace(o):
  176. o.write("Hello")
  177. o.write("Hi")
  178. o.softspace = 1
  179. AreEqual(o.softspace, 1)
  180. AreEqual(o.getvalue(), "HelloHiLine 2\nLine 3\nLine 4\nLine 5")
  181. # flush
  182. def call_flush(i):
  183. i.flush()
  184. AreEqual(i,i)
  185. def init_StringI():
  186. return cStringIO.StringIO(text)
  187. def init_StringO():
  188. o = cStringIO.StringIO()
  189. o.write(text)
  190. o.reset()
  191. return o
  192. def init_emptyStringI():
  193. return cStringIO.StringIO("")
  194. def test_empty():
  195. i = init_emptyStringI()
  196. # test closed
  197. AreEqual(i.closed,False)
  198. i.close()
  199. AreEqual(i.closed,True)
  200. #test read
  201. i = init_emptyStringI()
  202. AreEqual(i.read(),"")
  203. i.close()
  204. AssertError(ValueError, i.read)
  205. i.close()
  206. AssertError(ValueError, i.read, 2)
  207. #test readline
  208. i = init_emptyStringI()
  209. AreEqual(i.readline(),"")
  210. i.close()
  211. AssertError(ValueError, i.readline)
  212. i = init_emptyStringI()
  213. AreEqual(i.readline(0),"")
  214. i.close()
  215. AssertError(ValueError, i.readline)
  216. #test readlines
  217. i = init_emptyStringI()
  218. AreEqual(i.readlines(),[])
  219. i = init_emptyStringI()
  220. AreEqual(i.readlines(0),[])
  221. #test getvalue
  222. i = init_emptyStringI()
  223. AreEqual(i.getvalue(),"")
  224. AreEqual(i.getvalue(True),"")
  225. i.close()
  226. AssertError(ValueError, i.getvalue)
  227. #test iter
  228. i = init_emptyStringI()
  229. AreEqual(i.__iter__(), i)
  230. #test reset
  231. i = init_emptyStringI()
  232. AreEqual(i.read(0), "")
  233. i.reset()
  234. AreEqual(i.read(1), "")
  235. i.reset()
  236. AreEqual(i.readline(), "")
  237. i.close()
  238. AssertError(ValueError, i.read, 2)
  239. AssertError(ValueError, i.readline)
  240. #test seek,tell,read
  241. i = init_emptyStringI()
  242. AreEqual(i.read(0), "")
  243. AreEqual(i.tell(), 0)
  244. AreEqual(i.read(1), "")
  245. AreEqual(i.tell(), 0)
  246. i.seek(2)
  247. AreEqual(i.tell(), 2)
  248. AreEqual(i.read(),"")
  249. i.close()
  250. AssertError(ValueError, i.tell)
  251. AssertError(ValueError, i.seek, 0)
  252. AssertError(ValueError, i.seek, 0, 2)
  253. #test truncate
  254. i = init_emptyStringI()
  255. i.truncate(0)
  256. AreEqual(i.tell(), 0)
  257. i.truncate(1)
  258. AreEqual(i.tell(), 0)
  259. i.close()
  260. AssertError(ValueError, i.truncate)
  261. def test_cp8567():
  262. for x in ["", "1", "12", "12345",
  263. #u"123", #CodePlex 19220
  264. ]:
  265. for i in [5, 6, 7, 2**8, 100, 2**16-1, 2**16, 2**16, 2**31-2, 2**31-1]:
  266. cio = cStringIO.StringIO(x)
  267. cio.truncate(i)
  268. AreEqual(cio.tell(), len(x))
  269. cio.close()
  270. def test_i_o():
  271. for t in [ call_close,
  272. call_isatty,
  273. call_read,
  274. call_readline,
  275. call_readline_n,
  276. call_readlines,
  277. call_readlines_n,
  278. call_getvalue,
  279. call_next,
  280. call_reset,
  281. call_seek_tell,
  282. call_truncate,
  283. call_flush ]:
  284. i = init_StringI()
  285. t(i)
  286. o= init_StringO()
  287. t(o)
  288. def test_o():
  289. for t in [ call_write,
  290. call_writelines,
  291. call_softspace ]:
  292. o = init_StringO()
  293. t(o)
  294. def test_cp22017():
  295. m = cStringIO.StringIO()
  296. m.seek(2)
  297. m.write("hello!")
  298. AreEqual(m.getvalue(), '\x00\x00hello!')
  299. m.seek(2)
  300. AreEqual(m.getvalue(), '\x00\x00hello!')
  301. run_test(__name__)