blob: 6a004e25a6cd3d1a66968c8d217055c0a57801c6 [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Check that explain_binary_size_delta seems to work."""
import cStringIO
import sys
import unittest
import explain_binary_size_delta
class ExplainBinarySizeDeltaTest(unittest.TestCase):
def testCompare(self):
# List entries have form: symbol_name, symbol_type, symbol_size, file_path
symbol_list1 = (
# File with one symbol, left as-is.
( 'unchanged', 't', 1000, '/file_unchanged' ),
# File with one symbol, changed.
( 'changed', 't', 1000, '/file_all_changed' ),
# File with one symbol, deleted.
( 'removed', 't', 1000, '/file_all_deleted' ),
# File with two symbols, one unchanged, one changed, same bucket
( 'unchanged', 't', 1000, '/file_pair_unchanged_changed' ),
( 'changed', 't', 1000, '/file_pair_unchanged_changed' ),
# File with two symbols, one unchanged, one deleted, same bucket
( 'unchanged', 't', 1000, '/file_pair_unchanged_removed' ),
( 'removed', 't', 1000, '/file_pair_unchanged_removed' ),
# File with two symbols, one unchanged, one added, same bucket
( 'unchanged', 't', 1000, '/file_pair_unchanged_added' ),
# File with two symbols, one unchanged, one changed, different bucket
( 'unchanged', 't', 1000, '/file_pair_unchanged_diffbuck_changed' ),
( 'changed', '@', 1000, '/file_pair_unchanged_diffbuck_changed' ),
# File with two symbols, one unchanged, one deleted, different bucket
( 'unchanged', 't', 1000, '/file_pair_unchanged_diffbuck_removed' ),
( 'removed', '@', 1000, '/file_pair_unchanged_diffbuck_removed' ),
# File with two symbols, one unchanged, one added, different bucket
( 'unchanged', 't', 1000, '/file_pair_unchanged_diffbuck_added' ),
# File with four symbols, one added, one removed,
# one changed, one unchanged
( 'size_changed', 't', 1000, '/file_tetra' ),
( 'removed', 't', 1000, '/file_tetra' ),
( 'unchanged', 't', 1000, '/file_tetra' ),
)
symbol_list2 = (
# File with one symbol, left as-is.
( 'unchanged', 't', 1000, '/file_unchanged' ),
# File with one symbol, changed.
( 'changed', 't', 2000, '/file_all_changed' ),
# File with two symbols, one unchanged, one changed, same bucket
( 'unchanged', 't', 1000, '/file_pair_unchanged_changed' ),
( 'changed', 't', 2000, '/file_pair_unchanged_changed' ),
# File with two symbols, one unchanged, one deleted, same bucket
( 'unchanged', 't', 1000, '/file_pair_unchanged_removed' ),
# File with two symbols, one unchanged, one added, same bucket
( 'unchanged', 't', 1000, '/file_pair_unchanged_added' ),
( 'added', 't', 1000, '/file_pair_unchanged_added' ),
# File with two symbols, one unchanged, one changed, different bucket
( 'unchanged', 't', 1000, '/file_pair_unchanged_diffbuck_changed' ),
( 'changed', '@', 2000, '/file_pair_unchanged_diffbuck_changed' ),
# File with two symbols, one unchanged, one deleted, different bucket
( 'unchanged', 't', 1000, '/file_pair_unchanged_diffbuck_removed' ),
# File with two symbols, one unchanged, one added, different bucket
( 'unchanged', 't', 1000, '/file_pair_unchanged_diffbuck_added' ),
( 'added', '@', 1000, '/file_pair_unchanged_diffbuck_added' ),
# File with four symbols, one added, one removed,
# one changed, one unchanged
( 'size_changed', 't', 2000, '/file_tetra' ),
( 'unchanged', 't', 1000, '/file_tetra' ),
( 'added', 't', 1000, '/file_tetra' ),
# New file with one symbol added
( 'added', 't', 1000, '/file_new' ),
)
# Here we go
(added, removed, changed, unchanged) = \
explain_binary_size_delta.Compare(symbol_list1, symbol_list2)
# File with one symbol, left as-is.
assert ('/file_unchanged', 't', 'unchanged', 1000, 1000) in unchanged
# File with one symbol, changed.
assert ('/file_all_changed', 't', 'changed', 1000, 2000) in changed
# File with one symbol, deleted.
assert ('/file_all_deleted', 't', 'removed', 1000, None) in removed
# New file with one symbol added
assert ('/file_new', 't', 'added', None, 1000) in added
# File with two symbols, one unchanged, one changed, same bucket
assert ('/file_pair_unchanged_changed',
't', 'unchanged', 1000, 1000) in unchanged
assert ('/file_pair_unchanged_changed',
't', 'changed', 1000, 2000) in changed
# File with two symbols, one unchanged, one removed, same bucket
assert ('/file_pair_unchanged_removed',
't', 'unchanged', 1000, 1000) in unchanged
assert ('/file_pair_unchanged_removed',
't', 'removed', 1000, None) in removed
# File with two symbols, one unchanged, one added, same bucket
assert ('/file_pair_unchanged_added',
't', 'unchanged', 1000, 1000) in unchanged
assert ('/file_pair_unchanged_added',
't', 'added', None, 1000) in added
# File with two symbols, one unchanged, one changed, different bucket
assert ('/file_pair_unchanged_diffbuck_changed',
't', 'unchanged', 1000, 1000) in unchanged
assert ('/file_pair_unchanged_diffbuck_changed',
'@', 'changed', 1000, 2000) in changed
# File with two symbols, one unchanged, one removed, different bucket
assert ('/file_pair_unchanged_diffbuck_removed',
't', 'unchanged', 1000, 1000) in unchanged
assert ('/file_pair_unchanged_diffbuck_removed',
'@', 'removed', 1000, None) in removed
# File with two symbols, one unchanged, one added, different bucket
assert ('/file_pair_unchanged_diffbuck_added',
't', 'unchanged', 1000, 1000) in unchanged
assert ('/file_pair_unchanged_diffbuck_added',
'@', 'added', None, 1000) in added
# File with four symbols, one added, one removed, one changed, one unchanged
assert ('/file_tetra', 't', 'size_changed', 1000, 2000) in changed
assert ('/file_tetra', 't', 'unchanged', 1000, 1000) in unchanged
assert ('/file_tetra', 't', 'added', None, 1000) in added
assert ('/file_tetra', 't', 'removed', 1000, None) in removed
# Now check final stats.
orig_stdout = sys.stdout
output_collector = cStringIO.StringIO()
sys.stdout = output_collector
try:
explain_binary_size_delta.CrunchStats(added, removed, changed,
unchanged, True, True)
finally:
sys.stdout = orig_stdout
result = output_collector.getvalue()
expected_output = """\
Symbol statistics:
4 added, totalling 4000 bytes across 4 sources
4 removed, totalling 4000 bytes removed across 4 sources
4 changed, resulting in a net change of 4000 bytes \
(4000 bytes before, 8000 bytes after) across 4 sources
8 unchanged, totalling 8000 bytes
Source stats:
11 sources encountered.
1 completely new.
1 removed completely.
8 partially changed.
1 completely unchanged.
Per-source Analysis:
Source: /file_all_changed
Change: 1000 bytes (gained 1000, lost 0)
Changed symbols:
changed type=t, delta=1000 bytes (was 1000 bytes, now 2000 bytes)
Source: /file_all_deleted
Change: -1000 bytes (gained 0, lost 1000)
Removed symbols:
removed type=t, size=1000 bytes
Source: /file_new
Change: 1000 bytes (gained 1000, lost 0)
New symbols:
added type=t, size=1000 bytes
Source: /file_pair_unchanged_added
Change: 1000 bytes (gained 1000, lost 0)
New symbols:
added type=t, size=1000 bytes
Source: /file_pair_unchanged_changed
Change: 1000 bytes (gained 1000, lost 0)
Changed symbols:
changed type=t, delta=1000 bytes (was 1000 bytes, now 2000 bytes)
Source: /file_pair_unchanged_diffbuck_added
Change: 1000 bytes (gained 1000, lost 0)
New symbols:
added type=@, size=1000 bytes
Source: /file_pair_unchanged_diffbuck_changed
Change: 1000 bytes (gained 1000, lost 0)
Changed symbols:
changed type=@, delta=1000 bytes (was 1000 bytes, now 2000 bytes)
Source: /file_pair_unchanged_diffbuck_removed
Change: -1000 bytes (gained 0, lost 1000)
Removed symbols:
removed type=@, size=1000 bytes
Source: /file_pair_unchanged_removed
Change: -1000 bytes (gained 0, lost 1000)
Removed symbols:
removed type=t, size=1000 bytes
Source: /file_tetra
Change: 1000 bytes (gained 2000, lost 1000)
New symbols:
added type=t, size=1000 bytes
Removed symbols:
removed type=t, size=1000 bytes
Changed symbols:
size_changed type=t, delta=1000 bytes (was 1000 bytes, now 2000 bytes)
"""
self.maxDiff = None
self.assertMultiLineEqual(expected_output, result)
print "explain_binary_size_delta_unittest: All tests passed"
if __name__ == '__main__':
unittest.main()