Page 1 of 2
Stored Report
Posted: 2009-06-21 11:58 pm
by velo
Hi,
I'm using JScoverage on proxy server mode. Then, at end I store my reports, but, when I click on each file result, I can't see the sources view with the coverage result per file. How can I achieve that?
VELO
Re: Stored Report
Posted: 2009-06-23 8:05 am
by Ed
Can you provide more details? What happens when you click on each file? Is there an error in your browser's error console?
Re: Stored Report
Posted: 2009-06-23 11:01 am
by velo
I uploaded my report to rapidshare...
http://www.easy-share.com/1906069720/site.zip
When I click on links nothing happens
Re: Stored Report
Posted: 2009-06-23 11:36 am
by velo
I debug a bit jscoverage.js...
on function jscoverage_makeTable, it does _$jscoverage[jscoverage_currentFile]....
The all objects inside this array doesn't have source. Does that give you any clue?
VELO
Re: Stored Report
Posted: 2009-06-23 4:28 pm
by Ed
It looks like something went wrong when the report was stored. Were there any errors printed by jscoverage-server (likely printed to stderr) when the report was stored?
Re: Stored Report
Posted: 2009-06-23 4:48 pm
by velo
Hi Ed,
So no errors on console!
I saw that jscoverage_serializeCoverageToJSON() doesn't include the sources.... I guess that is why jscoverage.json doesn't include the sources.... I thought jscoverage will load they from the .js files again.
VELO
Re: Stored Report
Posted: 2009-06-23 5:26 pm
by Ed
velo wrote:I saw that jscoverage_serializeCoverageToJSON() doesn't include the sources.... I guess that is why jscoverage.json doesn't include the sources....
The jscoverage-server proxy server is supposed to retrieve the sources directly from the origin server and store them in the jscoverage.json report. The jscoverage_serializeCoverageToJSON function does not include the sources because the proxy server can retrieve the sources directly from the origin server.
Looking at your jscoverage.json file, it doesn't look like a standard proxy report - in a proxy report, the names of all the scripts are usually absolute URLs (i.e., starting with http://). Can you describe the steps you used to generate this report?
Re: Stored Report
Posted: 2009-06-23 6:01 pm
by velo
I do generate it manually, because I'm running using instrumented JS, not the server, so I just do jscoverage_serializeCoverageToJSON() , then I store the result to jscoverage.json
I had to make a small java API to covert the JSON from jscoverage_serializeCoverageToJSON() to be the same as it is on jscoverage.json from server... but still on server there is no sources...
This is the original report generated by server:
http://www.easy-share.com/1906073451/js ... report.zip
VELO
Re: Stored Report
Posted: 2009-06-23 6:13 pm
by velo
FWIW, I had to build my ow jscoverage exes...
Due to this problem:
http://siliconforks.com/forum/viewtopic.php?f=1&t=141
VELO
Re: Stored Report
Posted: 2009-06-24 12:57 am
by Ed
velo wrote:I do generate it manually, because I'm running using instrumented JS, not the server, so I just do jscoverage_serializeCoverageToJSON() , then I store the result to jscoverage.json
I had to make a small java API to covert the JSON from jscoverage_serializeCoverageToJSON() to be the same as it is on jscoverage.json from server... but still on server there is no sources...
I'm still a bit confused about how you're executing jscoverage-server (or is it just jscoverage?)
Is the source code for this java API, etc., available? E.g., is it in the subversion repository listed here:
http://nexus.sonatype.org/dev/repository.html?
Re: Stored Report
Posted: 2009-06-24 3:16 am
by velo
I'm using jscoverage to emulate jscoverage-server report....
But I couldn't figure out how jscoverage-server retrieves the sources on reports.
The sources are in 2 pieces...
One to convert the JS json into server JSON
http://svn.sonatype.org/spice/trunk/jsc ... component/
The other is the maven plugin that instruments and generate the report it self
http://svn.sonatype.org/plugins/trunk/j ... en-plugin/
VELO
Re: Stored Report
Posted: 2009-06-25 1:02 pm
by velo
No hope for me on getting sources report?
VELO
Re: Stored Report
Posted: 2009-06-25 2:01 pm
by Ed
Sorry, I was busy all day yesterday, I haven't had a chance to look at it yet. I'll try to take a look some time today.
Re: Stored Report
Posted: 2009-06-26 12:09 am
by Ed
I think I understand your workflow now - just let me ask if this is correct:
- Your test suite calls the method org.sonatype.nexus.mock.SeleniumTest.getCoverage(). (There is a Selenium RC server running by this time.)
- This method sends the "getEval" command to the Selenium server, asking it to evaluate the function jscoverage_serializeCoverageToJSON().
- The result of the eval is returned (a JSON object).
- The JsonReportHandler (the spice plexus component) converts that JSON object to the format normally stored to disk in JSCoverage reports, and then persists it to a file. (The intent here is to create a stored report that can be viewed in a web browser in the usual way, i.e., using jscoverage.html. But the problem is the JavaScript source code is missing.)
Is that what's going on?
Re: Stored Report
Posted: 2009-06-29 2:14 pm
by velo
Exactly....
I try to mimic what jscoverage server does....
BTW, I just found a fix for my problem this morning. I changed the method jscoverage_body_load():
Code: Select all
function jscoverage_body_load() {
var progressBar = document.getElementById('progressBar');
ProgressBar.init(progressBar);
function reportError(e) {
jscoverage_endLengthyOperation();
var summaryThrobber = document.getElementById('summaryThrobber');
summaryThrobber.style.visibility = 'hidden';
var div = document.getElementById('summaryErrorDiv');
div.innerHTML = 'Error: ' + e;
}
//start - my change
var currentCoverage = _$jscoverage;
//end - my change
if (jscoverage_isReport) {
jscoverage_beginLengthyOperation();
var summaryThrobber = document.getElementById('summaryThrobber');
summaryThrobber.style.visibility = 'visible';
var request = jscoverage_createRequest();
try {
request.open('GET', 'jscoverage.json', true);
request.onreadystatechange = function (event) {
if (request.readyState === 4) {
try {
if (request.status !== 0 && request.status !== 200) {
throw request.status;
}
var response = request.responseText;
if (response === '') {
throw 404;
}
var json = eval('(' + response + ')');
var file;
for (file in json) {
var fileCoverage = json[file];
//start - my change
var originalSource = currentCoverage[file].source;
_$jscoverage[file] = fileCoverage.coverage;
if(originalSource) {
_$jscoverage[file].source = originalSource;
} else {
_$jscoverage[file].source = fileCoverage.source;
}
//end - my change
}
jscoverage_recalculateSummaryTab();
summaryThrobber.style.visibility = 'hidden';
}
catch (e) {
reportError(e);
}
}
};
request.send(null);
}
catch (e) {
reportError(e);
}
jscoverage_removeTab('browser');
jscoverage_removeTab('store');
}
else {
if (jscoverage_isInvertedMode) {
jscoverage_removeTab('browser');
}
if (! jscoverage_isServer) {
jscoverage_removeTab('store');
}
}
jscoverage_initTabControl();
jscoverage_initTabContents(location.search);
}
I don't know why I had to store _$jscoverage into currentCoverage, but if I didn't do that _$jscoverage[file].source was always empty.
That way my report needs to load all my .js files, but did the trick.
VELO