Source code for robot.reporting.jsexecutionresult

#  Copyright 2008-2015 Nokia Networks
#  Copyright 2016-     Robot Framework Foundation
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

import time

from .stringcache import StringIndex


[docs] class JsExecutionResult: def __init__(self, suite, statistics, errors, strings, basemillis=None, split_results=None, min_level=None, expand_keywords=None): self.suite = suite self.strings = strings self.min_level = min_level self.data = self._get_data(statistics, errors, basemillis or 0, expand_keywords) self.split_results = split_results or [] def _get_data(self, statistics, errors, basemillis, expand_keywords): return {'stats': statistics, 'errors': errors, 'baseMillis': basemillis, 'generated': int(time.time() * 1000) - basemillis, 'expand_keywords': expand_keywords}
[docs] def remove_data_not_needed_in_report(self): self.data.pop('errors') remover = _KeywordRemover() self.suite = remover.remove_keywords(self.suite) self.suite, self.strings = remover.remove_unused_strings(self.suite, self.strings)
class _KeywordRemover: def remove_keywords(self, suite): return self._remove_keywords_from_suite(suite) def _remove_keywords_from_suite(self, suite): return suite[:6] + (self._remove_keywords_from_suites(suite[6]), self._remove_keywords_from_tests(suite[7]), (), suite[9]) def _remove_keywords_from_suites(self, suites): return tuple(self._remove_keywords_from_suite(s) for s in suites) def _remove_keywords_from_tests(self, tests): return tuple(self._remove_keywords_from_test(t) for t in tests) def _remove_keywords_from_test(self, test): return test[:-1] + ((),) def remove_unused_strings(self, model, strings): used = set(self._get_used_indices(model)) remap = {} strings = tuple(self._get_used_strings(strings, used, remap)) model = tuple(self._remap_string_indices(model, remap)) return model, strings def _get_used_indices(self, model): for item in model: if isinstance(item, StringIndex): yield item elif isinstance(item, tuple): for i in self._get_used_indices(item): yield i def _get_used_strings(self, strings, used_indices, remap): offset = 0 for index, string in enumerate(strings): if index in used_indices: remap[index] = index - offset yield string else: offset += 1 def _remap_string_indices(self, model, remap): for item in model: if isinstance(item, StringIndex): yield remap[item] elif isinstance(item, tuple): yield tuple(self._remap_string_indices(item, remap)) else: yield item