• Home
  • History
  • Annotate
  • only in /external/icu/icu4c/source/extra/scrptrun/
18d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# -*- coding: utf-8 -*-
28d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# Copyright 2013 Google Inc. All Rights Reserved.
38d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi#
48d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# Licensed under the Apache License, Version 2.0 (the "License");
58d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# you may not use this file except in compliance with the License.
68d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# You may obtain a copy of the License at
78d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi#
88d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi#     http://www.apache.org/licenses/LICENSE-2.0
98d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi#
108d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# Unless required by applicable law or agreed to in writing, software
118d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# distributed under the License is distributed on an "AS IS" BASIS,
128d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# See the License for the specific language governing permissions and
148d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# limitations under the License.
158d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi"""Unit tests for FilePart class."""
168d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
178d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoifrom __future__ import absolute_import
188d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
198d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiimport os
208d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
218d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoifrom gslib.file_part import FilePart
228d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiimport gslib.tests.testcase as testcase
238d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
248d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
258d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# pylint: disable=protected-access
268d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass TestFilePart(testcase.GsUtilUnitTestCase):
278d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi  """Unit tests for FilePart class."""
288d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
298d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi  def test_tell(self):
308d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    filename = 'test_tell'
318d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    contents = 100 * 'x'
328d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    fpath = self.CreateTempFile(file_name=filename, contents=contents)
338d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    part_length = 23
348d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    start_pos = 50
358d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    fp = FilePart(fpath, start_pos, part_length)
368d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    self.assertEqual(start_pos, fp._fp.tell())
378d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    self.assertEqual(0, fp.tell())
388d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
398d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi  def test_seek(self):
408d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    """Tests seeking in a FilePart."""
418d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    filename = 'test_seek'
428d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    contents = 100 * 'x'
438d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    part_length = 23
448d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    start_pos = 50
458d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    fpath = self.CreateTempFile(file_name=filename, contents=contents)
468d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    fp = FilePart(fpath, start_pos, part_length)
478d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    offset = 10
488d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
498d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    # Absolute positioning.
508d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    fp.seek(offset)
518d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    self.assertEqual(start_pos + offset, fp._fp.tell())
528d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    self.assertEqual(offset, fp.tell())
538d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
548d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    # Relative positioning.
558d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    fp.seek(offset, whence=os.SEEK_CUR)
568d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    self.assertEqual(start_pos + 2 * offset, fp._fp.tell())
578d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    self.assertEqual(2 * offset, fp.tell())
588d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
598d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    # Absolute positioning from EOF.
608d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    fp.seek(-offset, whence=os.SEEK_END)
618d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    self.assertEqual(start_pos + part_length - offset, fp._fp.tell())
628d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    self.assertEqual(part_length - offset, fp.tell())
638d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
648d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    # Seek past EOF.
658d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    fp.seek(1, whence=os.SEEK_END)
668d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    self.assertEqual(start_pos + part_length + 1, fp._fp.tell())
678d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    self.assertEqual(part_length + 1, fp.tell())
688d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
698d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi  def test_read(self):
708d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    """Tests various reaad operations with FilePart."""
718d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    filename = 'test_read'
728d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    contents = ''
738d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    for i in range(1, 256):
748d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi      contents += str(i)
758d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    part_length = 23
768d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    start_pos = 50
778d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    fpath = self.CreateTempFile(file_name=filename, contents=contents)
788d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
798d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    # Read in the whole file.
808d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    fp = FilePart(fpath, start_pos, part_length)
818d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    whole_file = fp.read()
828d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    self.assertEqual(contents[start_pos:(start_pos + part_length)], whole_file)
838d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
848d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    # Read in a piece of the file from the beginning.
858d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    fp.seek(0)
868d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    offset = 10
878d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    partial_file = fp.read(offset)
888d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    self.assertEqual(
898d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        contents[start_pos:(start_pos + offset)],
908d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        partial_file)
918d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
928d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    # Read in the rest of the file.
938d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    remaining_file = fp.read(part_length - offset)
948d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    self.assertEqual(
958d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        contents[(start_pos + offset):(start_pos + part_length)],
968d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        remaining_file)
978d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    self.assertEqual(
988d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        contents[start_pos:(start_pos + part_length)],
998d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi        partial_file + remaining_file)
1008d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1018d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    # Try to read after reaching EOF.
1028d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    empty_file = fp.read(100)
1038d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    self.assertEqual('', empty_file)
1048d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi
1058d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    empty_file = fp.read()
1068d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi    self.assertEqual('', empty_file)
107