| Index: test/analyzer/gyptest-analyzer.new.py
|
| ===================================================================
|
| --- test/analyzer/gyptest-analyzer.new.py (revision 0)
|
| +++ test/analyzer/gyptest-analyzer.new.py (revision 0)
|
| @@ -0,0 +1,199 @@
|
| +#!/usr/bin/env python
|
| +# Copyright (c) 2014 Google Inc. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +"""Tests for analyzer
|
| +"""
|
| +
|
| +import json
|
| +import TestGyp
|
| +
|
| +# TODO(sky): when done migrating recipes rename to gyptest-analyzer and nuke
|
| +# existing gyptest-analyzer.
|
| +
|
| +found = 'Found dependency'
|
| +not_found = 'No dependencies'
|
| +
|
| +def _CreateTestFile(files, targets):
|
| + f = open('test_file', 'w')
|
| + to_write = {'files': files, 'targets': targets }
|
| + json.dump(to_write, f)
|
| + f.close()
|
| +
|
| +def _CreateBogusTestFile():
|
| + f = open('test_file','w')
|
| + f.write('bogus')
|
| + f.close()
|
| +
|
| +def _ReadOutputFileContents():
|
| + f = open('analyzer_output', 'r')
|
| + result = json.load(f)
|
| + f.close()
|
| + return result
|
| +
|
| +# NOTE: this would be clearer if it subclassed TestGypCustom, but that trips
|
| +# over a bug in pylint (E1002).
|
| +test = TestGyp.TestGypCustom(format='analyzer')
|
| +
|
| +def run_analyzer(*args, **kw):
|
| + """Runs the test specifying a particular config and output path."""
|
| + args += ('-Gconfig_path=test_file',
|
| + '-Ganalyzer_output_path=analyzer_output')
|
| + test.run_gyp('test.gyp', *args, **kw)
|
| +
|
| +def EnsureContains(targets=set(), matched=False):
|
| + """Verifies output contains |targets| and |direct_targets|."""
|
| + result = _ReadOutputFileContents()
|
| + if result.get('error', None):
|
| + print 'unexpected error', result.get('error')
|
| + test.fail_test()
|
| +
|
| + if result.get('warning', None):
|
| + print 'unexpected warning', result.get('warning')
|
| + test.fail_test()
|
| +
|
| + actual_targets = set(result['targets'])
|
| + if actual_targets != targets:
|
| + print 'actual targets:', actual_targets, '\nexpected targets:', targets
|
| + test.fail_test()
|
| +
|
| + if matched and result['status'] != found:
|
| + print 'expected', found, 'got', result['status']
|
| + test.fail_test()
|
| + elif not matched and result['status'] != not_found:
|
| + print 'expected', not_found, 'got', result['status']
|
| + test.fail_test()
|
| +
|
| +def EnsureError(expected_error_string):
|
| + """Verifies output contains the error string."""
|
| + result = _ReadOutputFileContents()
|
| + if result.get('error', '').find(expected_error_string) == -1:
|
| + print 'actual error:', result.get('error', ''), '\nexpected error:', \
|
| + expected_error_string
|
| + test.fail_test()
|
| +
|
| +def EnsureWarning(expected_warning_string):
|
| + """Verifies output contains the warning string."""
|
| + result = _ReadOutputFileContents()
|
| + if result.get('warning', '').find(expected_warning_string) == -1:
|
| + print 'actual warning:', result.get('warning', ''), \
|
| + '\nexpected warning:', expected_warning_string
|
| + test.fail_test()
|
| +
|
| +# Verifies file_path must be specified.
|
| +test.run_gyp('test.gyp',
|
| + stdout='Must specify files to analyze via file_path generator '
|
| + 'flag\n')
|
| +
|
| +# Verifies config_path must point to a valid file.
|
| +test.run_gyp('test.gyp', '-Gconfig_path=bogus_file',
|
| + '-Ganalyzer_output_path=analyzer_output')
|
| +EnsureError('Unable to open file bogus_file')
|
| +
|
| +# Verify get error when bad target is specified.
|
| +_CreateTestFile(['exe2.c'], ['bad_target'])
|
| +run_analyzer()
|
| +EnsureWarning('Unable to find all targets')
|
| +
|
| +# Verifies config_path must point to a valid json file.
|
| +_CreateBogusTestFile()
|
| +run_analyzer()
|
| +EnsureError('Unable to parse config file test_file')
|
| +
|
| +# Trivial test of a source.
|
| +_CreateTestFile(['foo.c'], [])
|
| +run_analyzer()
|
| +EnsureContains(matched=True)
|
| +
|
| +# Conditional source that is excluded.
|
| +_CreateTestFile(['conditional_source.c'], [])
|
| +run_analyzer()
|
| +EnsureContains(matched=False)
|
| +
|
| +# Conditional source that is included by way of argument.
|
| +_CreateTestFile(['conditional_source.c'], [])
|
| +run_analyzer('-Dtest_variable=1')
|
| +EnsureContains(matched=True)
|
| +
|
| +# Two unknown files.
|
| +_CreateTestFile(['unknown1.c', 'unoknow2.cc'], [])
|
| +run_analyzer()
|
| +EnsureContains()
|
| +
|
| +# Two unknown files.
|
| +_CreateTestFile(['unknown1.c', 'subdir/subdir_sourcex.c'], [])
|
| +run_analyzer()
|
| +EnsureContains()
|
| +
|
| +# Included dependency
|
| +_CreateTestFile(['unknown1.c', 'subdir/subdir_source.c'], [])
|
| +run_analyzer()
|
| +EnsureContains(matched=True)
|
| +
|
| +# Included inputs to actions.
|
| +_CreateTestFile(['action_input.c'], [])
|
| +run_analyzer()
|
| +EnsureContains(matched=True)
|
| +
|
| +# Don't consider outputs.
|
| +_CreateTestFile(['action_output.c'], [])
|
| +run_analyzer()
|
| +EnsureContains(matched=False)
|
| +
|
| +# Rule inputs.
|
| +_CreateTestFile(['rule_input.c'], [])
|
| +run_analyzer()
|
| +EnsureContains(matched=True)
|
| +
|
| +# Ignore path specified with PRODUCT_DIR.
|
| +_CreateTestFile(['product_dir_input.c'], [])
|
| +run_analyzer()
|
| +EnsureContains(matched=False)
|
| +
|
| +# Path specified via a variable.
|
| +_CreateTestFile(['subdir/subdir_source2.c'], [])
|
| +run_analyzer()
|
| +EnsureContains(matched=True)
|
| +
|
| +# Verifies paths with // are fixed up correctly.
|
| +_CreateTestFile(['parent_source.c'], [])
|
| +run_analyzer()
|
| +EnsureContains(matched=True)
|
| +
|
| +# Verifies relative paths are resolved correctly.
|
| +_CreateTestFile(['subdir/subdir_source.h'], [])
|
| +run_analyzer()
|
| +EnsureContains(matched=True)
|
| +
|
| +# Various permutations when passing in targets.
|
| +_CreateTestFile(['exe2.c', 'subdir/subdir2b_source.c'], ['exe', 'exe3'])
|
| +run_analyzer()
|
| +EnsureContains(matched=True, targets={'exe3'})
|
| +
|
| +_CreateTestFile(['exe2.c', 'subdir/subdir2b_source.c'], ['exe'])
|
| +run_analyzer()
|
| +EnsureContains(matched=True)
|
| +
|
| +# Verifies duplicates are ignored.
|
| +_CreateTestFile(['exe2.c', 'subdir/subdir2b_source.c'], ['exe', 'exe'])
|
| +run_analyzer()
|
| +EnsureContains(matched=True)
|
| +
|
| +_CreateTestFile(['exe2.c'], ['exe'])
|
| +run_analyzer()
|
| +EnsureContains(matched=True)
|
| +
|
| +_CreateTestFile(['exe2.c'], [])
|
| +run_analyzer()
|
| +EnsureContains(matched=True)
|
| +
|
| +_CreateTestFile(['subdir/subdir2b_source.c', 'exe2.c'], [])
|
| +run_analyzer()
|
| +EnsureContains(matched=True)
|
| +
|
| +_CreateTestFile(['exe2.c'], [])
|
| +run_analyzer()
|
| +EnsureContains(matched=True)
|
| +
|
| +test.pass_test()
|
|
|
| Property changes on: test/analyzer/gyptest-analyzer.new.py
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|