UNPKG

flow-coverage-report

Version:

Generate an HTML report of the flow coverage data

109 lines (94 loc) 2.76 kB
'use strict'; // @flow import React from 'react'; import type {Node} from 'react'; const LinkToSourceFileReport = (props: {+targetFilename: string}) => { const filename = props.targetFilename; const href = `sourcefiles/${filename}.html`; return <a href={href}>{filename}</a>; }; const FlowCoverageFileTableRow = ( props: { +filename: string, +annotation: string, +covered_count: number, +uncovered_count: number, +percent: number, +disableLink: boolean, +threshold: number, +isError: boolean, +isFlow: boolean, +flowCoverageError: ?string, +flowCoverageParsingError: ?string, +flowCoverageException: ?string, +flowCoverageStderr: ?string|?Buffer, } ): Node => { /* eslint-disable camelcase */ const { filename, annotation, covered_count, uncovered_count, percent, isError, isFlow, disableLink, threshold } = props; const aboveThreshold = percent >= threshold; let className = (!isError && isFlow && aboveThreshold) ? 'positive' : 'negative'; let errorPopup; if (isError) { className = 'error'; let errorType; let errorContent; if (props.flowCoverageError) { errorType = 'flow coverage'; errorContent = <pre>{props.flowCoverageError}</pre>; } if (props.flowCoverageParsingError) { errorType = 'JSON Parsing'; errorContent = <pre>{props.flowCoverageParsingError}</pre>; } if (props.flowCoverageException) { errorType = 'Flow command unexpected error'; errorContent = <pre>{props.flowCoverageException}</pre>; } if (props.flowCoverageStderr) { errorType = 'Flow command stderr'; errorContent = <pre>{props.flowCoverageStderr}</pre>; } errorPopup = ( <div className="ui popup"> <div className="header">Flow Error: {errorType}</div> <div>{errorContent}</div> </div> ); } return ( <tr key={filename} className={className}> <td key="filename" className={disableLink ? '' : 'selectable'}> {disableLink ? filename : <LinkToSourceFileReport targetFilename={filename}/>} </td> <td key="annotation"> @{annotation} </td> <td key="percent" className={isError ? 'error' : ''}> { isError ? <span> <i className="attention icon" data-position="bottom right"/> Error {errorPopup} </span> : <span>{percent} %</span> } </td> <td key="total"> {covered_count + uncovered_count} </td> <td key="covered"> {covered_count} </td> <td key="uncovered"> {uncovered_count} </td> </tr> ); /* eslint-enable camelcase */ }; export default FlowCoverageFileTableRow;