1d0825bca7fe65beaee391d30da42e937db621564Steve Block# Copyright (C) 2009 Google Inc. All rights reserved. 2d0825bca7fe65beaee391d30da42e937db621564Steve Block# 3d0825bca7fe65beaee391d30da42e937db621564Steve Block# Redistribution and use in source and binary forms, with or without 4d0825bca7fe65beaee391d30da42e937db621564Steve Block# modification, are permitted provided that the following conditions are 5d0825bca7fe65beaee391d30da42e937db621564Steve Block# met: 6d0825bca7fe65beaee391d30da42e937db621564Steve Block# 7d0825bca7fe65beaee391d30da42e937db621564Steve Block# * Redistributions of source code must retain the above copyright 8d0825bca7fe65beaee391d30da42e937db621564Steve Block# notice, this list of conditions and the following disclaimer. 9d0825bca7fe65beaee391d30da42e937db621564Steve Block# * Redistributions in binary form must reproduce the above 10d0825bca7fe65beaee391d30da42e937db621564Steve Block# copyright notice, this list of conditions and the following disclaimer 11d0825bca7fe65beaee391d30da42e937db621564Steve Block# in the documentation and/or other materials provided with the 12d0825bca7fe65beaee391d30da42e937db621564Steve Block# distribution. 13d0825bca7fe65beaee391d30da42e937db621564Steve Block# * Neither the name of Google Inc. nor the names of its 14d0825bca7fe65beaee391d30da42e937db621564Steve Block# contributors may be used to endorse or promote products derived from 15d0825bca7fe65beaee391d30da42e937db621564Steve Block# this software without specific prior written permission. 16d0825bca7fe65beaee391d30da42e937db621564Steve Block# 17d0825bca7fe65beaee391d30da42e937db621564Steve Block# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18d0825bca7fe65beaee391d30da42e937db621564Steve Block# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19d0825bca7fe65beaee391d30da42e937db621564Steve Block# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20d0825bca7fe65beaee391d30da42e937db621564Steve Block# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21d0825bca7fe65beaee391d30da42e937db621564Steve Block# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22d0825bca7fe65beaee391d30da42e937db621564Steve Block# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23d0825bca7fe65beaee391d30da42e937db621564Steve Block# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24d0825bca7fe65beaee391d30da42e937db621564Steve Block# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25d0825bca7fe65beaee391d30da42e937db621564Steve Block# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26d0825bca7fe65beaee391d30da42e937db621564Steve Block# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27d0825bca7fe65beaee391d30da42e937db621564Steve Block# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28d0825bca7fe65beaee391d30da42e937db621564Steve Block 29dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockfrom webkitpy.thirdparty.mock import Mock 30dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockfrom webkitpy.tool.commands.commandtest import CommandsTest 31dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockfrom webkitpy.tool.commands.upload import * 32e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkefrom webkitpy.tool.mocktool import MockOptions, MockTool 33d0825bca7fe65beaee391d30da42e937db621564Steve Block 34d0825bca7fe65beaee391d30da42e937db621564Steve Blockclass UploadCommandsTest(CommandsTest): 35d0825bca7fe65beaee391d30da42e937db621564Steve Block def test_commit_message_for_current_diff(self): 36dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block tool = MockTool() 376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen expected_stdout = "This is a fake commit message that is at least 50 characters.\n" 38d0825bca7fe65beaee391d30da42e937db621564Steve Block self.assert_execute_outputs(CommitMessageForCurrentDiff(), [], expected_stdout=expected_stdout, tool=tool) 39d0825bca7fe65beaee391d30da42e937db621564Steve Block 408a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block def test_clean_pending_commit(self): 418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block self.assert_execute_outputs(CleanPendingCommit(), []) 428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 43d0825bca7fe65beaee391d30da42e937db621564Steve Block def test_assign_to_committer(self): 44dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block tool = MockTool() 458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block expected_stderr = "Warning, attachment 128 on bug 42 has invalid committer (non-committer@example.com)\nBug 77 is already assigned to foo@foo.com (None).\nBug 76 has no non-obsolete patches, ignoring.\n" 46d0825bca7fe65beaee391d30da42e937db621564Steve Block self.assert_execute_outputs(AssignToCommitter(), [], expected_stderr=expected_stderr, tool=tool) 47d0825bca7fe65beaee391d30da42e937db621564Steve Block tool.bugs.reassign_bug.assert_called_with(42, "eric@webkit.org", "Attachment 128 was posted by a committer and has review+, assigning to Eric Seidel for commit.") 48d0825bca7fe65beaee391d30da42e937db621564Steve Block 49d0825bca7fe65beaee391d30da42e937db621564Steve Block def test_obsolete_attachments(self): 50d0825bca7fe65beaee391d30da42e937db621564Steve Block expected_stderr = "Obsoleting 2 old patches on bug 42\n" 51d0825bca7fe65beaee391d30da42e937db621564Steve Block self.assert_execute_outputs(ObsoleteAttachments(), [42], expected_stderr=expected_stderr) 52d0825bca7fe65beaee391d30da42e937db621564Steve Block 53d0825bca7fe65beaee391d30da42e937db621564Steve Block def test_post(self): 54e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke options = MockOptions() 55a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch options.cc = None 56a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch options.check_style = True 57a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch options.comment = None 58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block options.description = "MOCK description" 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block options.request_commit = False 60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block options.review = True 61e14391e94c850b8bd03680c23b38978db68687a8John Reck options.suggest_reviewers = False 622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch expected_stderr = """MOCK: user.open_url: file://... 632fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWas that diff correct? 64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockObsoleting 2 old patches on bug 42 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockMOCK add_patch_to_bug: bug_id=42, description=MOCK description, mark_for_review=True, mark_for_commit_queue=False, mark_for_landing=False 66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockMOCK: user.open_url: http://example.com/42 67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block""" 682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assert_execute_outputs(Post(), [42], options=options, expected_stderr=expected_stderr) 69d0825bca7fe65beaee391d30da42e937db621564Steve Block 702bde8e466a4451c7319e3a072d118917957d6554Steve Block def test_attach_to_bug(self): 712bde8e466a4451c7319e3a072d118917957d6554Steve Block options = MockOptions() 722bde8e466a4451c7319e3a072d118917957d6554Steve Block options.comment = "extra comment" 732bde8e466a4451c7319e3a072d118917957d6554Steve Block options.description = "file description" 742bde8e466a4451c7319e3a072d118917957d6554Steve Block expected_stderr = """MOCK add_attachment_to_bug: bug_id=42, description=file description filename=None 752bde8e466a4451c7319e3a072d118917957d6554Steve Block-- Begin comment -- 762bde8e466a4451c7319e3a072d118917957d6554Steve Blockextra comment 772bde8e466a4451c7319e3a072d118917957d6554Steve Block-- End comment -- 782bde8e466a4451c7319e3a072d118917957d6554Steve Block""" 792bde8e466a4451c7319e3a072d118917957d6554Steve Block self.assert_execute_outputs(AttachToBug(), [42, "path/to/file.txt", "file description"], options=options, expected_stderr=expected_stderr) 802bde8e466a4451c7319e3a072d118917957d6554Steve Block 812bde8e466a4451c7319e3a072d118917957d6554Steve Block def test_attach_to_bug_no_description_or_comment(self): 822bde8e466a4451c7319e3a072d118917957d6554Steve Block options = MockOptions() 832bde8e466a4451c7319e3a072d118917957d6554Steve Block options.comment = None 842bde8e466a4451c7319e3a072d118917957d6554Steve Block options.description = None 852bde8e466a4451c7319e3a072d118917957d6554Steve Block expected_stderr = """MOCK add_attachment_to_bug: bug_id=42, description=file.txt filename=None 862bde8e466a4451c7319e3a072d118917957d6554Steve Block""" 872bde8e466a4451c7319e3a072d118917957d6554Steve Block self.assert_execute_outputs(AttachToBug(), [42, "path/to/file.txt"], options=options, expected_stderr=expected_stderr) 882bde8e466a4451c7319e3a072d118917957d6554Steve Block 89dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block def test_land_safely(self): 90f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch expected_stderr = "Obsoleting 2 old patches on bug 42\nMOCK add_patch_to_bug: bug_id=42, description=Patch for landing, mark_for_review=False, mark_for_commit_queue=False, mark_for_landing=True\n" 91d0825bca7fe65beaee391d30da42e937db621564Steve Block self.assert_execute_outputs(LandSafely(), [42], expected_stderr=expected_stderr) 92d0825bca7fe65beaee391d30da42e937db621564Steve Block 93d0825bca7fe65beaee391d30da42e937db621564Steve Block def test_prepare_diff_with_arg(self): 94d0825bca7fe65beaee391d30da42e937db621564Steve Block self.assert_execute_outputs(Prepare(), [42]) 95d0825bca7fe65beaee391d30da42e937db621564Steve Block 96d0825bca7fe65beaee391d30da42e937db621564Steve Block def test_prepare(self): 97f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch expected_stderr = "MOCK create_bug\nbug_title: Mock user response\nbug_description: Mock user response\ncomponent: MOCK component\ncc: MOCK cc\n" 98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block self.assert_execute_outputs(Prepare(), [], expected_stderr=expected_stderr) 99d0825bca7fe65beaee391d30da42e937db621564Steve Block 100d0825bca7fe65beaee391d30da42e937db621564Steve Block def test_upload(self): 101e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke options = MockOptions() 102a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch options.cc = None 103a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch options.check_style = True 104a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch options.comment = None 105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block options.description = "MOCK description" 106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block options.request_commit = False 107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block options.review = True 108e14391e94c850b8bd03680c23b38978db68687a8John Reck options.suggest_reviewers = False 1092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch expected_stderr = """MOCK: user.open_url: file://... 1102fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWas that diff correct? 111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockObsoleting 2 old patches on bug 42 112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockMOCK add_patch_to_bug: bug_id=42, description=MOCK description, mark_for_review=True, mark_for_commit_queue=False, mark_for_landing=False 113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockMOCK: user.open_url: http://example.com/42 114dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block""" 1152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assert_execute_outputs(Upload(), [42], options=options, expected_stderr=expected_stderr) 116d0825bca7fe65beaee391d30da42e937db621564Steve Block 117d0825bca7fe65beaee391d30da42e937db621564Steve Block def test_mark_bug_fixed(self): 118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block tool = MockTool() 119d0825bca7fe65beaee391d30da42e937db621564Steve Block tool._scm.last_svn_commit_log = lambda: "r9876 |" 120d0825bca7fe65beaee391d30da42e937db621564Steve Block options = Mock() 121d0825bca7fe65beaee391d30da42e937db621564Steve Block options.bug_id = 42 122dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block options.comment = "MOCK comment" 123f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch expected_stderr = """Bug: <http://example.com/42> Bug with two r+'d and cq+'d patches, one of which has an invalid commit-queue setter. 124f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochRevision: 9876 125f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochMOCK: user.open_url: http://example.com/42 1262fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockIs this correct? 127f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochAdding comment to Bug 42. 128f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochMOCK bug comment: bug_id=42, cc=None 129f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch--- Begin comment --- 130f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochMOCK comment 131f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 132f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochCommitted r9876: <http://trac.webkit.org/changeset/9876> 133f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch--- End comment --- 134f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 135f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch""" 1362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block self.assert_execute_outputs(MarkBugFixed(), [], expected_stderr=expected_stderr, tool=tool, options=options) 137d0825bca7fe65beaee391d30da42e937db621564Steve Block 138d0825bca7fe65beaee391d30da42e937db621564Steve Block def test_edit_changelog(self): 139d0825bca7fe65beaee391d30da42e937db621564Steve Block self.assert_execute_outputs(EditChangeLogs(), []) 140