blob: 9fd6ea7dea61f1172dd4ef19e8313dda35108c47 [file] [log] [blame]
# Copyright 2017 The Chromium Authors. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
# * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
from webkitpy.w3c.wpt_github import MergeError, WPTGitHub
class MockWPTGitHub(object):
# Some unused arguments may be included to match the real class's API.
# pylint: disable=unused-argument
def __init__(self, pull_requests, unsuccessful_merge_index=-1, create_pr_fail_index=-1, merged_index=-1):
"""Initializes a mock WPTGitHub.
Args:
pull_requests: A list of wpt_github.PullRequest.
unsuccessful_merge_index: The index to the PR in pull_requests that
cannot be merged. (-1 means all can be merged.)
create_pr_fail_index: The 0-based index of which PR creation request
will fail. (-1 means all will succeed.)
merged_index: The index to the PR in pull_requests that is already
merged. (-1 means none is merged.)
"""
self.pull_requests = pull_requests
self.calls = []
self.pull_requests_created = []
self.pull_requests_merged = []
self.unsuccessful_merge_index = unsuccessful_merge_index
self.create_pr_index = 0
self.create_pr_fail_index = create_pr_fail_index
self.merged_index = merged_index
def all_pull_requests(self, limit=30):
self.calls.append('all_pull_requests')
return self.pull_requests
def is_pr_merged(self, number):
for index, pr in enumerate(self.pull_requests):
if pr.number == number:
return index == self.merged_index
return False
def merge_pr(self, number):
self.calls.append('merge_pr')
for index, pr in enumerate(self.pull_requests):
if pr.number == number and index == self.unsuccessful_merge_index:
raise MergeError(number)
self.pull_requests_merged.append(number)
def create_pr(self, remote_branch_name, desc_title, body):
self.calls.append('create_pr')
if self.create_pr_fail_index != self.create_pr_index:
self.pull_requests_created.append((remote_branch_name, desc_title, body))
self.create_pr_index += 1
return 5678
def update_pr(self, pr_number, desc_title, body):
self.calls.append('update_pr')
return 5678
def delete_remote_branch(self, _):
self.calls.append('delete_remote_branch')
def add_label(self, _, label):
self.calls.append('add_label "%s"' % label)
def remove_label(self, _, label):
self.calls.append('remove_label "%s"' % label)
def get_pr_branch(self, number):
self.calls.append('get_pr_branch')
return 'fake_branch_PR_%d' % number
def pr_for_chromium_commit(self, commit):
self.calls.append('pr_for_chromium_commit')
for pr in self.pull_requests:
if commit.change_id() in pr.body:
return pr
return None
def pr_with_position(self, position):
self.calls.append('pr_with_position')
for pr in self.pull_requests:
if position in pr.body:
return pr
return None
def pr_with_change_id(self, change_id):
self.calls.append('pr_with_change_id')
for pr in self.pull_requests:
if change_id in pr.body:
return pr
return None
def extract_metadata(self, tag, commit_body, all_matches=False):
return WPTGitHub.extract_metadata(tag, commit_body, all_matches)