flow-coverage-report
Version:
Generate an HTML report of the flow coverage data
109 lines (94 loc) • 2.76 kB
JSX
;
// @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;