/** * @license * Copyright (C) 2020 The Android Open Source Project * * 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. */ function populateWithDummyData(coverageData) { coverageData['/COMMIT_MSG'] = { linesMissingCoverage: [3, 4, 7, 14], totalLines: 14, changeNum: 94, patchNum: 2, }; // more coverage info on other files } /** * This plugin will add a toggler on file diff page to * display fake coverage data. * * As the fake coverage data only provided for COMMIT_MSG file, * so it will only work for COMMIT_MSG file diff. */ Gerrit.install(plugin => { const coverageData = {}; let displayCoverage = false; const annotationApi = plugin.annotationApi(); const styleApi = plugin.styles(); const coverageStyle = styleApi.css('background-color: #EF9B9B !important'); const emptyStyle = styleApi.css(''); annotationApi.addLayer(context => { if (Object.keys(coverageData).length === 0) { // Coverage data is not ready yet. return; } const path = context.path; const line = context.line; // Highlight lines missing coverage with this background color if // coverage should be displayed, else do nothing. const annotationStyle = displayCoverage ? coverageStyle : emptyStyle; // ideally should check to make sure its the same patch for same change // for demo purpose, this is only checking to make sure we have fake data if (coverageData[path]) { const linesMissingCoverage = coverageData[path].linesMissingCoverage; if (linesMissingCoverage.includes(line.afterNumber)) { context.annotateRange(0, line.text.length, annotationStyle, 'right'); context.annotateLineNumber(annotationStyle, 'right'); } } }).enableToggleCheckbox('Display Coverage', checkbox => { // Checkbox is attached so now add the notifier that will be controlled // by the checkbox. // Checkbox will only be added to the file diff page, in the top right // section near the "Diff view". annotationApi.addNotifier(notifyFunc => { populateWithDummyData(coverageData); checkbox.disabled = false; checkbox.onclick = e => { displayCoverage = e.target.checked; Object.keys(coverageData).forEach(file => { notifyFunc(file, 0, coverageData[file].totalLines, 'right'); }); }; }); }); });