skia2/infra/bots/test_utils.py
Hal Canary 389c8e9d2d [minor] mark scripts as executable
if a filename ends with `.py` and  the file begins with '#!.*python.*',
make it executable.

Change-Id: I41de516ff37343d3b0979bde9fd61813aec7365c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/254439
Commit-Queue: Hal Canary <halcanary@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
Auto-Submit: Hal Canary <halcanary@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
2019-11-21 17:06:27 +00:00

74 lines
2.0 KiB
Python
Executable File

#!/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))