#!/usr/bin/env python # Copyright (c) 2014 Google Inc. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """ Make sure overwriting read-only files works as expected (via win-tool). """ import TestGyp import filecmp import os import stat import sys if sys.platform == 'win32': test = TestGyp.TestGyp(formats=['ninja']) # First, create the source files. os.makedirs('subdir') read_only_files = ['read-only-file', 'subdir/A', 'subdir/B', 'subdir/C'] for f in read_only_files: test.write(f, 'source_contents') test.chmod(f, stat.S_IREAD) if os.access(f, os.W_OK): test.fail_test() # Second, create the read-only destination files. Note that we are creating # them where the ninja and win-tool will try to copy them to, in order to test # that copies overwrite the files. os.makedirs(test.built_file_path('dest/subdir')) for f in read_only_files: f = os.path.join('dest', f) test.write(test.built_file_path(f), 'SHOULD BE OVERWRITTEN') test.chmod(test.built_file_path(f), stat.S_IREAD) # Ensure not writable. if os.access(test.built_file_path(f), os.W_OK): test.fail_test() test.run_gyp('copies_readonly_files.gyp') test.build('copies_readonly_files.gyp') # Check the destination files were overwritten by ninja. for f in read_only_files: f = os.path.join('dest', f) test.must_contain(test.built_file_path(f), 'source_contents') # This will fail if the files are not the same mode or contents. for f in read_only_files: if not filecmp.cmp(f, test.built_file_path(os.path.join('dest', f))): test.fail_test() test.pass_test()