зеркало из https://github.com/mozilla/moz-skia.git
rebaseline.py: fix --add-new when there are no expectations at all
BUG=skia:1582 R=rmistry@google.com Review URL: https://codereview.chromium.org/23899003 git-svn-id: http://skia.googlecode.com/svn/trunk@11063 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
Родитель
8b4ba63735
Коммит
93acfd2b49
|
@ -94,47 +94,42 @@ TEST_BUILDERS = [
|
||||||
class _InternalException(Exception):
|
class _InternalException(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Object that handles exceptions, either raising them immediately or collecting
|
|
||||||
# them to display later on.
|
|
||||||
class ExceptionHandler(object):
|
class ExceptionHandler(object):
|
||||||
|
""" Object that handles exceptions, either raising them immediately or
|
||||||
|
collecting them to display later on."""
|
||||||
|
|
||||||
# params:
|
# params:
|
||||||
# keep_going_on_failure: if False, report failures and quit right away;
|
|
||||||
# if True, collect failures until
|
|
||||||
# ReportAllFailures() is called
|
|
||||||
def __init__(self, keep_going_on_failure=False):
|
def __init__(self, keep_going_on_failure=False):
|
||||||
|
"""
|
||||||
|
params:
|
||||||
|
keep_going_on_failure: if False, report failures and quit right away;
|
||||||
|
if True, collect failures until
|
||||||
|
ReportAllFailures() is called
|
||||||
|
"""
|
||||||
self._keep_going_on_failure = keep_going_on_failure
|
self._keep_going_on_failure = keep_going_on_failure
|
||||||
self._failures_encountered = []
|
self._failures_encountered = []
|
||||||
self._exiting = False
|
|
||||||
|
|
||||||
# Exit the program with the given status value.
|
def RaiseExceptionOrContinue(self):
|
||||||
def _Exit(self, status=1):
|
""" We have encountered an exception; either collect the info and keep
|
||||||
self._exiting = True
|
going, or exit the program right away."""
|
||||||
sys.exit(status)
|
# Get traceback information about the most recently raised exception.
|
||||||
|
exc_info = sys.exc_info()
|
||||||
# We have encountered an exception; either collect the info and keep going,
|
|
||||||
# or exit the program right away.
|
|
||||||
def RaiseExceptionOrContinue(self, e):
|
|
||||||
# If we are already quitting the program, propagate any exceptions
|
|
||||||
# so that the proper exit status will be communicated to the shell.
|
|
||||||
if self._exiting:
|
|
||||||
raise e
|
|
||||||
|
|
||||||
if self._keep_going_on_failure:
|
if self._keep_going_on_failure:
|
||||||
print >> sys.stderr, 'WARNING: swallowing exception %s' % e
|
print >> sys.stderr, ('WARNING: swallowing exception %s' %
|
||||||
self._failures_encountered.append(e)
|
repr(exc_info[1]))
|
||||||
|
self._failures_encountered.append(exc_info)
|
||||||
else:
|
else:
|
||||||
print >> sys.stderr, e
|
|
||||||
print >> sys.stderr, (
|
print >> sys.stderr, (
|
||||||
'Halting at first exception; to keep going, re-run ' +
|
'Halting at first exception; to keep going, re-run ' +
|
||||||
'with the --keep-going-on-failure option set.')
|
'with the --keep-going-on-failure option set.')
|
||||||
self._Exit()
|
raise exc_info[1], None, exc_info[2]
|
||||||
|
|
||||||
def ReportAllFailures(self):
|
def ReportAllFailures(self):
|
||||||
if self._failures_encountered:
|
if self._failures_encountered:
|
||||||
print >> sys.stderr, ('Encountered %d failures (see above).' %
|
print >> sys.stderr, ('Encountered %d failures (see above).' %
|
||||||
len(self._failures_encountered))
|
len(self._failures_encountered))
|
||||||
self._Exit()
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
# Object that rebaselines a JSON expectations file (not individual image files).
|
# Object that rebaselines a JSON expectations file (not individual image files).
|
||||||
|
@ -272,7 +267,10 @@ class JsonRebaseliner(object):
|
||||||
expectations_input_filepath = os.path.join(
|
expectations_input_filepath = os.path.join(
|
||||||
self._expectations_root, builder, self._expectations_input_filename)
|
self._expectations_root, builder, self._expectations_input_filename)
|
||||||
expectations_dict = gm_json.LoadFromFile(expectations_input_filepath)
|
expectations_dict = gm_json.LoadFromFile(expectations_input_filepath)
|
||||||
expected_results = expectations_dict[gm_json.JSONKEY_EXPECTEDRESULTS]
|
expected_results = expectations_dict.get(gm_json.JSONKEY_EXPECTEDRESULTS)
|
||||||
|
if not expected_results:
|
||||||
|
expected_results = {}
|
||||||
|
expectations_dict[gm_json.JSONKEY_EXPECTEDRESULTS] = expected_results
|
||||||
|
|
||||||
# Update the expectations in memory, skipping any tests/configs that
|
# Update the expectations in memory, skipping any tests/configs that
|
||||||
# the caller asked to exclude.
|
# the caller asked to exclude.
|
||||||
|
@ -330,7 +328,6 @@ parser.add_argument('--actuals-filename',
|
||||||
'of ACTUALS_BASE_URL) to read a summary of results '
|
'of ACTUALS_BASE_URL) to read a summary of results '
|
||||||
'from; defaults to %(default)s'),
|
'from; defaults to %(default)s'),
|
||||||
default='actual-results.json')
|
default='actual-results.json')
|
||||||
# TODO(epoger): Add test that exercises --add-new argument.
|
|
||||||
parser.add_argument('--add-new', action='store_true',
|
parser.add_argument('--add-new', action='store_true',
|
||||||
help=('in addition to the standard behavior of '
|
help=('in addition to the standard behavior of '
|
||||||
'updating expectations for failing tests, add '
|
'updating expectations for failing tests, add '
|
||||||
|
@ -417,10 +414,13 @@ for builder in builders:
|
||||||
mark_unreviewed=args.unreviewed)
|
mark_unreviewed=args.unreviewed)
|
||||||
try:
|
try:
|
||||||
rebaseliner.RebaselineSubdir(builder=builder)
|
rebaseliner.RebaselineSubdir(builder=builder)
|
||||||
except BaseException as e:
|
except:
|
||||||
exception_handler.RaiseExceptionOrContinue(e)
|
exception_handler.RaiseExceptionOrContinue()
|
||||||
else:
|
else:
|
||||||
exception_handler.RaiseExceptionOrContinue(_InternalException(
|
try:
|
||||||
'expectations_json_file %s not found' % expectations_json_file))
|
raise _InternalException('expectations_json_file %s not found' %
|
||||||
|
expectations_json_file)
|
||||||
|
except:
|
||||||
|
exception_handler.RaiseExceptionOrContinue()
|
||||||
|
|
||||||
exception_handler.ReportAllFailures()
|
exception_handler.ReportAllFailures()
|
||||||
|
|
|
@ -1,34 +1,26 @@
|
||||||
{
|
{
|
||||||
"actual-results" : {
|
"actual-results" : {
|
||||||
"failed" : {
|
"failed" : null,
|
||||||
"aaclip_565.png" : [ "bitmap-64bitMD5", 6190901827590820995 ],
|
|
||||||
"aaclip_8888.png" : [ "bitmap-64bitMD5", 14456211900777561488 ]
|
|
||||||
},
|
|
||||||
"failure-ignored" : null,
|
"failure-ignored" : null,
|
||||||
"no-comparison" : {
|
"no-comparison" : {
|
||||||
|
"aaclip_565.png" : [ "bitmap-64bitMD5", 6190901827590820995 ],
|
||||||
|
"aaclip_8888.png" : [ "bitmap-64bitMD5", 14456211900777561488 ],
|
||||||
|
"aaclip_gpu.png" : [ "bitmap-64bitMD5", 11899819492385205974 ],
|
||||||
"aaclip_pdf.png" : [ "bitmap-64bitMD5", 13515207506164874564 ]
|
"aaclip_pdf.png" : [ "bitmap-64bitMD5", 13515207506164874564 ]
|
||||||
},
|
},
|
||||||
"succeeded" : {
|
"succeeded" : null
|
||||||
"aaclip_gpu.png" : [ "bitmap-64bitMD5", 11899819492385205974 ]
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"expected-results" : {
|
"expected-results" : {
|
||||||
"aaclip_565.png" : {
|
"aaclip_565.png" : {
|
||||||
"allowed-digests" : [
|
"allowed-digests" : null,
|
||||||
[ "bitmap-64bitMD5", 12345 ]
|
|
||||||
],
|
|
||||||
"ignore-failure" : false
|
"ignore-failure" : false
|
||||||
},
|
},
|
||||||
"aaclip_8888.png" : {
|
"aaclip_8888.png" : {
|
||||||
"allowed-digests" : [
|
"allowed-digests" : null,
|
||||||
[ "bitmap-64bitMD5", 67890 ]
|
|
||||||
],
|
|
||||||
"ignore-failure" : false
|
"ignore-failure" : false
|
||||||
},
|
},
|
||||||
"aaclip_gpu.png" : {
|
"aaclip_gpu.png" : {
|
||||||
"allowed-digests" : [
|
"allowed-digests" : null,
|
||||||
[ "bitmap-64bitMD5", 11899819492385205974 ]
|
|
||||||
],
|
|
||||||
"ignore-failure" : false
|
"ignore-failure" : false
|
||||||
},
|
},
|
||||||
"aaclip_pdf.png" : {
|
"aaclip_pdf.png" : {
|
||||||
|
|
|
@ -1,26 +1 @@
|
||||||
{
|
{}
|
||||||
"expected-results" : {
|
|
||||||
"aaclip_565.png" : {
|
|
||||||
"allowed-digests" : [
|
|
||||||
[ "bitmap-64bitMD5", 12345 ]
|
|
||||||
],
|
|
||||||
"ignore-failure" : false
|
|
||||||
},
|
|
||||||
"aaclip_8888.png" : {
|
|
||||||
"allowed-digests" : [
|
|
||||||
[ "bitmap-64bitMD5", 67890 ]
|
|
||||||
],
|
|
||||||
"ignore-failure" : false
|
|
||||||
},
|
|
||||||
"aaclip_gpu.png" : {
|
|
||||||
"allowed-digests" : [
|
|
||||||
[ "bitmap-64bitMD5", 11899819492385205974 ]
|
|
||||||
],
|
|
||||||
"ignore-failure" : false
|
|
||||||
},
|
|
||||||
"aaclip_pdf.png" : {
|
|
||||||
"allowed-digests" : null,
|
|
||||||
"ignore-failure" : false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
python tools/rebaseline.py --expectations-root tools/tests/rebaseline/output/add-new/output-actual/gm-expectations --actuals-base-url tools/tests/rebaseline/input/json1 --add-new --builders Test-Android-GalaxyNexus-SGX540-Arm7-Debug Test-Mac10.6-MacMini4.1-GeForce320M-x86-Release Test-Win7-ShuttleA-HD2000-x86-Release
|
|
@ -0,0 +1,87 @@
|
||||||
|
{
|
||||||
|
"expected-results": {
|
||||||
|
"3x3bitmaprect_565.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
16998423976396106083
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false
|
||||||
|
},
|
||||||
|
"3x3bitmaprect_8888.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
2054956815327187963
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false
|
||||||
|
},
|
||||||
|
"aaclip_gpu.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
11899819492385205974
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false,
|
||||||
|
"unknown-extra-field": "make sure that rebaseline.py maintains this unknown field within a record whose allowed-digest IS NOT modified"
|
||||||
|
},
|
||||||
|
"aarectmodes_565.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
14760033689012826769
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false
|
||||||
|
},
|
||||||
|
"imageblur_565.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
3359963596899141322
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false,
|
||||||
|
"unknown-extra-field": "make sure that rebaseline.py maintains this unknown field within a record whose allowed-digest IS modified"
|
||||||
|
},
|
||||||
|
"imageblur_8888.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
4217923806027861152
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false
|
||||||
|
},
|
||||||
|
"shadertext3_8888.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
3713708307125704716
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false
|
||||||
|
},
|
||||||
|
"xfermodeimagefilter_pdf.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
16502178848783208088
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false
|
||||||
|
},
|
||||||
|
"xfermodes_pdf.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
9151974350149210736
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
{
|
||||||
|
"expected-results": {
|
||||||
|
"aaclip_565.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
6190901827590820995
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"aaclip_8888.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
14456211900777561488
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"aaclip_gpu.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
11899819492385205974
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"aaclip_pdf.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
13515207506164874564
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,85 @@
|
||||||
|
{
|
||||||
|
"expected-results": {
|
||||||
|
"3x3bitmaprect_565.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
16998423976396106083
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false
|
||||||
|
},
|
||||||
|
"3x3bitmaprect_8888.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
2054956815327187963
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false
|
||||||
|
},
|
||||||
|
"aaclip_gpu.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
11899819492385205974
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false
|
||||||
|
},
|
||||||
|
"aarectmodes_565.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
14760033689012826769
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false
|
||||||
|
},
|
||||||
|
"imageblur_565.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
3359963596899141322
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false
|
||||||
|
},
|
||||||
|
"imageblur_8888.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
4217923806027861152
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false
|
||||||
|
},
|
||||||
|
"shadertext3_8888.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
3713708307125704716
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false
|
||||||
|
},
|
||||||
|
"xfermodeimagefilter_pdf.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
16502178848783208088
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false
|
||||||
|
},
|
||||||
|
"xfermodes_pdf.png": {
|
||||||
|
"allowed-digests": [
|
||||||
|
[
|
||||||
|
"bitmap-64bitMD5",
|
||||||
|
9151974350149210736
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"ignore-failure": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
0
|
|
@ -1,26 +1 @@
|
||||||
{
|
{}
|
||||||
"expected-results" : {
|
|
||||||
"aaclip_565.png" : {
|
|
||||||
"allowed-digests" : [
|
|
||||||
[ "bitmap-64bitMD5", 12345 ]
|
|
||||||
],
|
|
||||||
"ignore-failure" : false
|
|
||||||
},
|
|
||||||
"aaclip_8888.png" : {
|
|
||||||
"allowed-digests" : [
|
|
||||||
[ "bitmap-64bitMD5", 67890 ]
|
|
||||||
],
|
|
||||||
"ignore-failure" : false
|
|
||||||
},
|
|
||||||
"aaclip_gpu.png" : {
|
|
||||||
"allowed-digests" : [
|
|
||||||
[ "bitmap-64bitMD5", 11899819492385205974 ]
|
|
||||||
],
|
|
||||||
"ignore-failure" : false
|
|
||||||
},
|
|
||||||
"aaclip_pdf.png" : {
|
|
||||||
"allowed-digests" : null,
|
|
||||||
"ignore-failure" : false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -244,6 +244,7 @@ REBASELINE_INPUT=tools/tests/rebaseline/input
|
||||||
REBASELINE_OUTPUT=tools/tests/rebaseline/output
|
REBASELINE_OUTPUT=tools/tests/rebaseline/output
|
||||||
rebaseline_test "$REBASELINE_INPUT/json1" "--actuals-base-url $REBASELINE_INPUT/json1 --builders Test-Android-GalaxyNexus-SGX540-Arm7-Debug Test-Win7-ShuttleA-HD2000-x86-Release" "$REBASELINE_OUTPUT/using-json1-expectations"
|
rebaseline_test "$REBASELINE_INPUT/json1" "--actuals-base-url $REBASELINE_INPUT/json1 --builders Test-Android-GalaxyNexus-SGX540-Arm7-Debug Test-Win7-ShuttleA-HD2000-x86-Release" "$REBASELINE_OUTPUT/using-json1-expectations"
|
||||||
rebaseline_test "$REBASELINE_INPUT/json1" "--actuals-base-url $REBASELINE_INPUT/json1 --bugs 1234 5678 --builders Test-Android-GalaxyNexus-SGX540-Arm7-Debug Test-Win7-ShuttleA-HD2000-x86-Release --notes notes_content --unreviewed" "$REBASELINE_OUTPUT/marked-unreviewed"
|
rebaseline_test "$REBASELINE_INPUT/json1" "--actuals-base-url $REBASELINE_INPUT/json1 --bugs 1234 5678 --builders Test-Android-GalaxyNexus-SGX540-Arm7-Debug Test-Win7-ShuttleA-HD2000-x86-Release --notes notes_content --unreviewed" "$REBASELINE_OUTPUT/marked-unreviewed"
|
||||||
|
rebaseline_test "$REBASELINE_INPUT/json1" "--actuals-base-url $REBASELINE_INPUT/json1 --add-new --builders Test-Android-GalaxyNexus-SGX540-Arm7-Debug Test-Mac10.6-MacMini4.1-GeForce320M-x86-Release Test-Win7-ShuttleA-HD2000-x86-Release" "$REBASELINE_OUTPUT/add-new"
|
||||||
|
|
||||||
#
|
#
|
||||||
# Test jsondiff.py ...
|
# Test jsondiff.py ...
|
||||||
|
|
Загрузка…
Ссылка в новой задаче