12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #!/usr/bin/env python
- #
- # Copyright 2016 Google Inc.
- #
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- """Test utilities."""
- import filecmp
- import os
- import uuid
- class FileWriter(object):
- """Write files into a given directory."""
- def __init__(self, cwd):
- self._cwd = cwd
- if not os.path.exists(self._cwd):
- os.makedirs(self._cwd)
- def mkdir(self, dname, mode=0755):
- """Create the given directory with the given mode."""
- dname = os.path.join(self._cwd, dname)
- os.mkdir(dname)
- os.chmod(dname, mode)
- def write(self, fname, mode=0640):
- """Write the file with the given mode and random contents."""
- fname = os.path.join(self._cwd, fname)
- with open(fname, 'w') as f:
- f.write(str(uuid.uuid4()))
- os.chmod(fname, mode)
- def remove(self, fname):
- """Remove the file."""
- fname = os.path.join(self._cwd, fname)
- if os.path.isfile(fname):
- os.remove(fname)
- else:
- os.rmdir(fname)
- def compare_trees(test, a, b):
- """Compare two directory trees, assert if any differences."""
- def _cmp(prefix, dcmp):
- # Verify that the file and directory names are the same.
- test.assertEqual(len(dcmp.left_only), 0)
- test.assertEqual(len(dcmp.right_only), 0)
- test.assertEqual(len(dcmp.diff_files), 0)
- test.assertEqual(len(dcmp.funny_files), 0)
- # Verify that the files are identical.
- for f in dcmp.common_files:
- pathA = os.path.join(a, prefix, f)
- pathB = os.path.join(b, prefix, f)
- test.assertTrue(filecmp.cmp(pathA, pathB, shallow=False))
- statA = os.stat(pathA)
- statB = os.stat(pathB)
- test.assertEqual(statA.st_mode, statB.st_mode)
- with open(pathA, 'rb') as f:
- contentsA = f.read()
- with open(pathB, 'rb') as f:
- contentsB = f.read()
- test.assertEqual(contentsA, contentsB)
- # Recurse on subdirectories.
- for prefix, obj in dcmp.subdirs.iteritems():
- _cmp(prefix, obj)
- _cmp('', filecmp.dircmp(a, b))
|