diff options
Diffstat (limited to 'src/App.js')
-rw-r--r-- | src/App.js | 55 |
1 files changed, 15 insertions, 40 deletions
@@ -18,9 +18,10 @@ | |||
18 | */ | 18 | */ |
19 | 19 | ||
20 | import React, { Component } from 'react'; | 20 | import React, { Component } from 'react'; |
21 | import {Parser} from 'xml2js'; | 21 | import { Parser } from 'xml2js'; |
22 | import JSZip from 'jszip'; | ||
22 | 23 | ||
23 | import {Counters, SessionInfo, PackagesCoverage} from './Blocks.js'; | 24 | import { Report } from './Report.js'; |
24 | import './App.css'; | 25 | import './App.css'; |
25 | 26 | ||
26 | class App extends Component { | 27 | class App extends Component { |
@@ -28,24 +29,31 @@ class App extends Component { | |||
28 | super(props); | 29 | super(props); |
29 | this.state = { | 30 | this.state = { |
30 | report: null, | 31 | report: null, |
32 | sourceSet: null, | ||
31 | hasError: false | 33 | hasError: false |
32 | }; | 34 | }; |
33 | } | 35 | } |
34 | 36 | ||
35 | componentDidCatch(error, info) { | 37 | componentDidCatch(error, info) { |
36 | this.setState({ hasError: true }); | 38 | this.setState({ hasError: true }); |
37 | console.err(error, info); | 39 | console.error(error, info); |
38 | } | 40 | } |
39 | 41 | ||
40 | _useReportFile(file) { | 42 | _useReportFile(file) { |
41 | const fileReader = new FileReader(); | 43 | const fileReader = new FileReader(); |
42 | fileReader.onloadend = (readEvent) => this._useReport(readEvent.target.result); | 44 | fileReader.onloadend = readEvent => this._useReport(readEvent.target.result); |
43 | fileReader.readAsText(file); | 45 | fileReader.readAsText(file); |
44 | } | 46 | } |
45 | 47 | ||
46 | _useReport(xmlString) { | 48 | _useReport(xmlString) { |
49 | this.setState({ hasError: false }); | ||
47 | const xmlParser = new Parser(); | 50 | const xmlParser = new Parser(); |
48 | xmlParser.parseString(xmlString, (err, result) => this.setState({ report: result.report })); | 51 | xmlParser.parseString(xmlString, (_, result) => this.setState({ report: result.report })); |
52 | } | ||
53 | |||
54 | _useSourceArchive(file) { | ||
55 | this.setState({ hasError: false }); | ||
56 | JSZip.loadAsync(file).then(zip => this.setState({ sourceSet: zip.files })); | ||
49 | } | 57 | } |
50 | 58 | ||
51 | _renderError() { | 59 | _renderError() { |
@@ -58,7 +66,7 @@ class App extends Component { | |||
58 | } | 66 | } |
59 | 67 | ||
60 | _renderReport() { | 68 | _renderReport() { |
61 | return this.state.hasError ? this._renderError(): (<Report report={this.state.report} />); | 69 | return this.state.hasError ? this._renderError(): (<Report report={this.state.report} sourceSet={this.state.sourceSet} />); |
62 | } | 70 | } |
63 | 71 | ||
64 | render() { | 72 | render() { |
@@ -73,7 +81,7 @@ class App extends Component { | |||
73 | 81 | ||
74 | <div> | 82 | <div> |
75 | <label htmlFor="sourceJar">Source JAR: </label> | 83 | <label htmlFor="sourceJar">Source JAR: </label> |
76 | <input id="sourceJar" type="file" accept=".jar" onChange={event => null} /> | 84 | <input id="sourceJar" type="file" accept=".jar" onChange={event => this._useSourceArchive(event.target.files[0])} /> |
77 | </div> | 85 | </div> |
78 | 86 | ||
79 | <hr /> | 87 | <hr /> |
@@ -83,37 +91,4 @@ class App extends Component { | |||
83 | } | 91 | } |
84 | } | 92 | } |
85 | 93 | ||
86 | class Report extends Component { | ||
87 | _renderNone() { | ||
88 | return (<span>Please provide a JaCoCo XML report file to visualise.</span>); | ||
89 | } | ||
90 | |||
91 | _renderReport() { | ||
92 | return ( | ||
93 | <div> | ||
94 | <h2>Viewing report: "{this.props.report.$.name}"</h2> | ||
95 | |||
96 | <section> | ||
97 | <h3>Session info</h3> | ||
98 | <SessionInfo data={this.props.report.sessioninfo} /> | ||
99 | </section> | ||
100 | |||
101 | <section> | ||
102 | <h3>Global coverage</h3> | ||
103 | <Counters data={this.props.report.counter} /> | ||
104 | </section> | ||
105 | |||
106 | <section> | ||
107 | <h3>Details</h3> | ||
108 | <PackagesCoverage packages={this.props.report.package} /> | ||
109 | </section> | ||
110 | </div> | ||
111 | ); | ||
112 | } | ||
113 | |||
114 | render() { | ||
115 | return this.props.report ? this._renderReport() : this._renderNone(); | ||
116 | } | ||
117 | } | ||
118 | |||
119 | export default App; | 94 | export default App; |