Author: kotkov Date: Fri Nov 18 14:06:25 2022 New Revision: 1905384 URL: http://svn.apache.org/viewvc?rev=1905384&view=rev Log: On the 'pristines-on-demand-on-mwf' branch: Add a new file with explicit test cases for a pristines-on-demand working copy.
I plan to add an option to run the whole test suite in this mode, but this change ensures that we have a set of tests for the feature that runs by default. Also, we'd have a dedicated location to write tests for certain cases that are specific to the pristines-on-demand mode. * subversion/tests/cmdline/pristines_on_demand_tests.py: New file, containing… (simple_checkout, simple_commit, simple_update, simple_status, simple_diff, simple_revert, update_modified_file): …these new tests. * subversion/tests/cmdline/svntest/main.py (is_wc_pristines_on_demand_supported): New predicate. Added: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/pristines_on_demand_tests.py (with props) Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/main.py Added: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/pristines_on_demand_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/pristines_on_demand_tests.py?rev=1905384&view=auto ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/pristines_on_demand_tests.py (added) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/pristines_on_demand_tests.py Fri Nov 18 14:06:25 2022 @@ -0,0 +1,292 @@ +#!/usr/bin/env python +# +# pristines_on_demand_tests.py: testing pristines-on-demand +# +# Subversion is a tool for revision control. +# See https://subversion.apache.org for more information. +# +# ==================================================================== +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +###################################################################### + +# General modules +import os, logging, base64, functools + +# Our testing module +import svntest + +# (abbreviation) +Skip = svntest.testcase.Skip_deco +SkipUnless = svntest.testcase.SkipUnless_deco +XFail = svntest.testcase.XFail_deco +Issues = svntest.testcase.Issues_deco +Issue = svntest.testcase.Issue_deco +Wimp = svntest.testcase.Wimp_deco +Item = svntest.wc.StateItem + +###################################################################### +# Tests + +@SkipUnless(svntest.main.is_wc_pristines_on_demand_supported) +def simple_checkout(sbox): + "simple checkout with pristines-on-demand" + + sbox.build(empty=True, create_wc=False) + expected_output = svntest.wc.State(sbox.wc_dir, {}) + expected_disk = svntest.wc.State('', {}) + svntest.actions.run_and_verify_checkout(sbox.repo_url, + sbox.wc_dir, + expected_output, + expected_disk, + [], + "--store-pristines=no") + +@SkipUnless(svntest.main.is_wc_pristines_on_demand_supported) +def simple_commit(sbox): + "simple commit with pristines-on-demand" + + sbox.build(empty=True, create_wc=False) + expected_output = svntest.wc.State(sbox.wc_dir, {}) + expected_disk = svntest.wc.State('', {}) + svntest.actions.run_and_verify_checkout(sbox.repo_url, + sbox.wc_dir, + expected_output, + expected_disk, + [], + "--store-pristines=no") + + sbox.simple_append('file', 'contents') + sbox.simple_add('file') + + expected_output = svntest.wc.State(sbox.wc_dir, { + 'file' : Item(verb='Adding'), + }) + expected_status = svntest.wc.State(sbox.wc_dir, { + '' : Item(status=' ', wc_rev=0), + 'file' : Item(status=' ', wc_rev=1), + }) + svntest.actions.run_and_verify_commit(sbox.wc_dir, + expected_output, + expected_status) + +@SkipUnless(svntest.main.is_wc_pristines_on_demand_supported) +def simple_update(sbox): + "simple update with pristines-on-demand" + + sbox.build(empty=True, create_wc=False) + expected_output = svntest.wc.State(sbox.wc_dir, {}) + expected_wc = svntest.wc.State('', {}) + svntest.actions.run_and_verify_checkout(sbox.repo_url, + sbox.wc_dir, + expected_output, + expected_wc, + [], + "--store-pristines=no") + sbox.simple_append('file', 'foo') + sbox.simple_add('file') + sbox.simple_commit(message='r1') + + sbox.simple_append('file', 'bar') + sbox.simple_commit(message='r2') + + expected_output = svntest.wc.State(sbox.wc_dir, { + 'file' : Item(status='U '), + }) + expected_disk = svntest.wc.State('', { + 'file' : Item(contents='foo'), + }) + expected_status = svntest.wc.State(sbox.wc_dir, { + '' : Item(status=' ', wc_rev=1), + 'file' : Item(status=' ', wc_rev=1), + }) + svntest.actions.run_and_verify_update(sbox.wc_dir, + expected_output, + expected_disk, + expected_status, + [], False, + '-r1', sbox.wc_dir) + +@SkipUnless(svntest.main.is_wc_pristines_on_demand_supported) +def simple_status(sbox): + "simple status with pristines-on-demand" + + sbox.build(empty=True, create_wc=False) + expected_output = svntest.wc.State(sbox.wc_dir, {}) + expected_wc = svntest.wc.State('', {}) + svntest.actions.run_and_verify_checkout(sbox.repo_url, + sbox.wc_dir, + expected_output, + expected_wc, + [], + "--store-pristines=no") + sbox.simple_append('file', 'foo') + sbox.simple_add('file') + + expected_status = svntest.wc.State(sbox.wc_dir, { + '' : Item(status=' ', wc_rev=0), + 'file' : Item(status='A ', wc_rev='-'), + }) + svntest.actions.run_and_verify_status(sbox.wc_dir, + expected_status) + + sbox.simple_commit(message='r1') + + expected_status = svntest.wc.State(sbox.wc_dir, { + '' : Item(status=' ', wc_rev=0), + 'file' : Item(status=' ', wc_rev=1), + }) + svntest.actions.run_and_verify_status(sbox.wc_dir, + expected_status) + + sbox.simple_append('file', 'bar') + + expected_status = svntest.wc.State(sbox.wc_dir, { + '' : Item(status=' ', wc_rev=0), + 'file' : Item(status='M ', wc_rev=1), + }) + svntest.actions.run_and_verify_status(sbox.wc_dir, + expected_status) + + # Change back to the unmodified contents + sbox.simple_append('file', 'foo', truncate=True) + + expected_status = svntest.wc.State(sbox.wc_dir, { + '' : Item(status=' ', wc_rev=0), + 'file' : Item(status=' ', wc_rev=1), + }) + svntest.actions.run_and_verify_status(sbox.wc_dir, + expected_status) + +@SkipUnless(svntest.main.is_wc_pristines_on_demand_supported) +def simple_diff(sbox): + "simple diff with pristines-on-demand" + + sbox.build(empty=True, create_wc=False) + expected_output = svntest.wc.State(sbox.wc_dir, {}) + expected_wc = svntest.wc.State('', {}) + svntest.actions.run_and_verify_checkout(sbox.repo_url, + sbox.wc_dir, + expected_output, + expected_wc, + [], + "--store-pristines=no") + sbox.simple_append('file', 'foo\n') + sbox.simple_add('file') + sbox.simple_commit(message='r1') + + sbox.simple_append('file', 'bar\n', truncate=True) + + diff_output = svntest.verify.make_diff_header( + sbox.ospath('file'), 'revision 1', 'working copy') + [ + "@@ -1 +1 @@\n", + "-foo\n", + "+bar\n" + ] + svntest.actions.run_and_verify_svn(diff_output, [], + 'diff', sbox.ospath('file')) + +@SkipUnless(svntest.main.is_wc_pristines_on_demand_supported) +def simple_revert(sbox): + "simple revert with pristines-on-demand" + + sbox.build(empty=True, create_wc=False) + expected_output = svntest.wc.State(sbox.wc_dir, {}) + expected_wc = svntest.wc.State('', {}) + svntest.actions.run_and_verify_checkout(sbox.repo_url, + sbox.wc_dir, + expected_output, + expected_wc, + [], + "--store-pristines=no") + sbox.simple_append('file', 'foo\n') + sbox.simple_add('file') + sbox.simple_commit(message='r1') + + sbox.simple_append('file', 'bar\n', truncate=True) + + svntest.actions.run_and_verify_revert([sbox.ospath('file')]) + + expected_status = svntest.wc.State(sbox.wc_dir, { + '' : Item(status=' ', wc_rev=0), + 'file' : Item(status=' ', wc_rev=1), + }) + svntest.actions.run_and_verify_status(sbox.wc_dir, + expected_status) + +@SkipUnless(svntest.main.is_wc_pristines_on_demand_supported) +def update_modified_file(sbox): + "update locally modified file" + + sbox.build(empty=True, create_wc=False) + expected_output = svntest.wc.State(sbox.wc_dir, {}) + expected_wc = svntest.wc.State('', {}) + svntest.actions.run_and_verify_checkout(sbox.repo_url, + sbox.wc_dir, + expected_output, + expected_wc, + [], + "--store-pristines=no") + sbox.simple_append('file', 'foo') + sbox.simple_add('file') + sbox.simple_commit(message='r1') + + sbox.simple_append('file', 'bar') + sbox.simple_commit(message='r2') + + sbox.simple_update(revision=1) + + # Make the same edit again so that the contents would merge. + sbox.simple_append('file', 'bar') + + expected_output = svntest.wc.State(sbox.wc_dir, { + 'file' : Item(status='G '), + }) + expected_disk = svntest.wc.State('', { + 'file' : Item(contents='foobar'), + }) + expected_status = svntest.wc.State(sbox.wc_dir, { + '' : Item(status=' ', wc_rev=2), + 'file' : Item(status=' ', wc_rev=2), + }) + svntest.actions.run_and_verify_update(sbox.wc_dir, + expected_output, + expected_disk, + expected_status) + +######################################################################## +# Run the tests + + +# list all tests here, starting with None: +test_list = [ None, + simple_checkout, + simple_commit, + simple_update, + simple_status, + simple_diff, + simple_revert, + update_modified_file, + ] +serial_only = True + +if __name__ == '__main__': + svntest.main.run_tests(test_list) + # NOTREACHED + + +### End of file. Propchange: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/pristines_on_demand_tests.py ------------------------------------------------------------------------------ svn:eol-style = native Propchange: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/pristines_on_demand_tests.py ------------------------------------------------------------------------------ svn:executable = * Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/main.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/main.py?rev=1905384&r1=1905383&r2=1905384&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/main.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/main.py Fri Nov 18 14:06:25 2022 @@ -1765,6 +1765,11 @@ def wc_format(ver=None): return 31 raise Exception("Unrecognized version number '%s'" % (ver,)) +def is_wc_pristines_on_demand_supported(): + if options.wc_format_version is None: + return True + else: + return wc_format(options.wc_format_version) >= 32 ######################################################################