diff options
author | elenairina <elenairina@google.com> | 2018-06-11 08:25:41 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-06-11 08:27:22 -0700 |
commit | e28c0ab84c7967e10cc3cd5333560c54653084bd (patch) | |
tree | 9a66b0192d9049d16956218ca3bafc65af1de63f /tools/test/LcovMerger/javatests/com/google/devtools/lcovmerger/CoverageTest.java | |
parent | bbf3e421ed8b2b431a72cd3ab4ba591dc8833634 (diff) |
Implement LcovMerger.
LcovMerger is a tool that merges all the intermediate lcov tracefiles (with .dat extension) found under a coverage directory and prints the merged tracefile to a given output file.
A custom implementation for merging lcov tracefiles is needed because the merging functionality of lcov itself is very slow.
LcovMerger is required to get a single coverage report (lcov tracefile) from a bazel coverage command that executes multiple tests.
ATM LcovMerger is only invoked by tools/test/collect_coverage.sh that collects and merges the tracefiles from a single test invocation. It will also be used from a CoverageReportAction.
Progress on #5246.
PiperOrigin-RevId: 200054506
Diffstat (limited to 'tools/test/LcovMerger/javatests/com/google/devtools/lcovmerger/CoverageTest.java')
-rw-r--r-- | tools/test/LcovMerger/javatests/com/google/devtools/lcovmerger/CoverageTest.java | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/tools/test/LcovMerger/javatests/com/google/devtools/lcovmerger/CoverageTest.java b/tools/test/LcovMerger/javatests/com/google/devtools/lcovmerger/CoverageTest.java new file mode 100644 index 0000000000..724a2095a5 --- /dev/null +++ b/tools/test/LcovMerger/javatests/com/google/devtools/lcovmerger/CoverageTest.java @@ -0,0 +1,81 @@ +// Copyright 2016 The Bazel Authors. All rights reserved. +// +// 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. + +package com.google.devtools.lcovmerger; + +import static com.google.common.truth.Truth.assertThat; +import static com.google.devtools.lcovmerger.LcovMergerTestUtils.assertMergedSourceFile; +import static com.google.devtools.lcovmerger.LcovMergerTestUtils.assertTracefile1; +import static com.google.devtools.lcovmerger.LcovMergerTestUtils.createLinesExecution1; +import static com.google.devtools.lcovmerger.LcovMergerTestUtils.createLinesExecution2; +import static com.google.devtools.lcovmerger.LcovMergerTestUtils.createSourceFile1; +import static com.google.devtools.lcovmerger.LcovMergerTestUtils.createSourceFile2; + +import com.google.common.collect.Iterables; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** + * Test for LcovMerger. + */ +@RunWith(JUnit4.class) +public class CoverageTest { + + private Coverage coverage; + + @Before + public void initializeCoverage() { + coverage = new Coverage(); + } + + @Test + public void testOneTracefile() { + SourceFileCoverage sourceFileCoverage = + createSourceFile1(createLinesExecution1()); + coverage.add(sourceFileCoverage); + assertThat(coverage.getAllSourceFiles()).hasSize(1); + assertTracefile1(Iterables.get(coverage.getAllSourceFiles(), 0)); + } + + @Test + public void testTwoOverlappingTracefiles() { + int[] linesExecution1 = createLinesExecution1(); + int[] linesExecution2 = createLinesExecution2(); + SourceFileCoverage sourceFileCoverage1 = createSourceFile1(linesExecution1); + SourceFileCoverage sourceFileCoverage2 = createSourceFile2(linesExecution2); + + coverage.add(sourceFileCoverage1); + coverage.add(sourceFileCoverage2); + + assertThat(coverage.getAllSourceFiles()).hasSize(1); + SourceFileCoverage merged = Iterables.get(coverage.getAllSourceFiles(), 0); + assertMergedSourceFile(merged, linesExecution1, linesExecution2); + } + + @Test + public void testTwoTracefiles() { + SourceFileCoverage sourceFileCoverage1 = + createSourceFile1(createLinesExecution1()); + SourceFileCoverage sourceFileCoverage2 = createSourceFile1( + "SOME_OTHER_FILENAME", createLinesExecution1()); + + coverage.add(sourceFileCoverage1); + coverage.add(sourceFileCoverage2); + assertThat(coverage.getAllSourceFiles()).hasSize(2); + assertTracefile1(Iterables.get(coverage.getAllSourceFiles(), 0)); + assertTracefile1(Iterables.get(coverage.getAllSourceFiles(), 1)); + } +} |