QA:CodeCoverage: Difference between revisions

no edit summary
No edit summary
No edit summary
Line 65: Line 65:
* STEP 2
* STEP 2


Code coverage for the Javascript part of the Firefox can be dne in multiple ways.  
Code coverage for the Javascript part of the Firefox can be done in multiple ways. But using JSCoverage as the tool seemed to be the best way as JSCoverage is an open source tool.
* Using the Firebug add-on.
* Using the JSCoverage tool.
* Using the venkman.


I will explain in detail the efforts and the problems in using each of these approaches.
I wish to fully acknowledge the great help  Ed Kelly , who maintains the JSCoverage tool , provided in this instrumentation exercise. Ed was very generous in spending cycles to provide enhancements to the  JSCoverage tool to meet Firefox instrumentation requirements.
 
So ... here is how to instrument the javascript portion of Firefox.
 
    Do not download the binary of the JScoverage from http://siliconforks.com/jscoverage/
    You can also check out the source code from its public Subversion repository:
              svn co http://svn.siliconforks.com/jscoverage/trunk jscoverage
              To compile, run bootstrap.sh (requires Automake and Autoconf):
              ./bootstrap.sh
              Then run make as usual.
              Finally execute the make install command so that jscoverage is
              installed in the /usr/local/bin
 
Why  not use the binary from the site and why to build our own jscoverage ??
 
         
              The following enhancements are present in our own build with
              latest revision.
              1.  Instrumenting symbolic links in the case where
                  the destination is a regular file. 
                        * For those who are curious, JSCoverage does not instrument
                          javascript files that are symbolically referenced.
                        * Academic note:use 'cp -r -L' to copy symbolic links as real file.
              2. It copies  file permissions (so that executable files stay executable).
              3. It has the  --mozilla option to copy the jscoverage.html file
                  directly into Firefox's chrome. 
                  The --mozilla option automatically sets the JavaScript version to 180,
                  so it is not necessary to use both --mozilla
                  and --js-version at the same time.
                  NOTE: --js-version=180 would allow instrumenting the symbolic links
 
So, starting from the top of the Firefox build directory , here are the commands to instrument the whole Firefox directory and run the mochitests with the instrumented version:
 
                  cd /dist
                  mv bin bin-original
                  jscoverage \
                --mozilla \
                --no-instrument=defaults \
                --no-instrument=greprefs \
                bin-original bin
                cd ../_tests/testing/mochitest
                python runtests.py
 
It seems that it is necessary to use --no-instrument on the entire defaults and prefs directories because the preferences .js files should  not contain arbitrary JavaScript. 
 
See http://www.xulplanet.com/tutorials/xulqa/q_prefs.html or
https://bugzilla.mozilla.org/show_bug.cgi?id=440777 for details.
 
When we run the instrumented Firefox, there is now a "JSCoverage" menu  in the "Tools" menu.  Tools -> JSCoverage -> View Coverage loads the  jscoverage.html file, and Tools -> JSCoverage -> Store Coverage saves  the coverage data into a directory named "./jscoverage-report/".
 
End of the exercise :)
183

edits