| <dom-module id="coverage-plugin"> |
| <script> |
| |
| function populateWithDummyData(coverageData) { |
| coverageData['NewFile'] = { |
| linesMissingCoverage: [1, 2, 3], |
| totalLines: 5, |
| changeNum: 94, |
| patchNum: 2, |
| }; |
| coverageData['/COMMIT_MSG'] = { |
| linesMissingCoverage: [3, 4, 7, 14], |
| totalLines: 14, |
| changeNum: 94, |
| patchNum: 2, |
| }; |
| coverageData['DEPS'] = { |
| linesMissingCoverage: [3, 4, 7, 14], |
| totalLines: 16, |
| changeNum: 77001, |
| patchNum: 1, |
| }; |
| coverageData['go/sklog/sklog.go'] = { |
| linesMissingCoverage: [3, 322, 323, 324], |
| totalLines: 350, |
| changeNum: 85963, |
| patchNum: 13, |
| }; |
| } |
| |
| 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; |
| if (coverageData[path] && |
| coverageData[path].changeNum === context.changeNum && |
| coverageData[path].patchNum === context.patchNum) { |
| 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. |
| annotationApi.addNotifier(notifyFunc => { |
| new Promise(resolve => setTimeout(resolve, 3000)).then(() => { |
| populateWithDummyData(coverageData); |
| checkbox.disabled = false; |
| checkbox.onclick = e => { |
| displayCoverage = e.target.checked; |
| Object.keys(coverageData).forEach(file => { |
| notifyFunc(file, 0, coverageData[file].totalLines, 'right'); |
| }); |
| }; |
| }); |
| }); |
| }); |
| }); |
| </script> |
| </dom-module> |