How to view a Clover XML file in a readable way (like as HTML or on console)? - phpunit

I run a couple of different PHPUnit test suits and for each of them, a coverage file is generated, like:
vendor/bin/phpunit -c phpunit-no-db.xml --coverage-php ./test/coverage/cov_files/NO_DB.cov
Afterwards all these coverage files are merged using php-cov to generate a clover file (XML):
/home/backbone/.local/bin/phpcov merge --clover ./test/coverage/clover.xml ./test/coverage/cov_files
This clover file looks like:
<?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1661852015">
<project timestamp="1661852015">
<file name="/var/www/html/src/App/Console/CronjobRunnerCommand.php">
<class name="App\Console\CronjobRunnerCommand" namespace="global">
<metrics complexity="3" methods="3" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="4" coveredstatements="0" elements="7" coveredelements="0"/>
</class>
<line num="18" type="method" name="__construct" visibility="public" complexity="1" crap="2" count="0"/>
<line num="20" type="stmt" count="0"/>
<line num="22" type="stmt" count="0"/>
<line num="25" type="method" name="configure" visibility="protected" complexity="1" crap="2" count="0"/>
<line num="27" type="stmt" count="0"/>
<line num="30" type="method" name="execute" visibility="protected" complexity="1" crap="2" count="0"/>
<line num="32" type="stmt" count="0"/>
<metrics loc="35" ncloc="35" classes="1" methods="3" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="4" coveredstatements="0" elements="7" coveredelements="0"/>
</file>
...
My question: How to view this clover file in a readable way (like in a browser or as readable console output)?
What I tried so far:
https://github.com/sebastianbergmann/phpcov doesn't seem to have this functionality
https://github.com/sebastianbergmann/php-code-coverage is not very good documented, so I didn't come far
I tried OpenClover's commandline tools, but it's documentation says, it needs a clover**.db** (for HTML: https://openclover.org/doc/manual/latest/commandline--htmlreporter.html). Not sure how to generate it.
https://github.com/daison12006013/clover-coverage-to-html seems to allow transforming a Clover XML file to HTML, but it only runs on PHP 7.x, but my project is on PHP 8.1.
If possible I don't want to install an IDE like JetBrains just to view clover.xml (https://youtrack.jetbrains.com/issue/WI-64063/Show-coverage-based-on-existing-cloverxml-instead-of-generating-IDE-coverage-file)
except there is a viewer for Visual Studio Code (which I use), but I already checked, there is none available
Note: I am new to the Clover-world and may be a bit confused about file types etc.

I found it myself, after diving into the code of phpcov. The trick is to add html argument in the merge command. Badly documented.
For completeness: Assume you run a a couple of PHPUnit test suits and each generates a Clover XML report like:
vendor/bin/phpunit -c phpunit-no-db.xml --coverage-php ./coverage/NO_DB.cov
After they finished, run phpcov merge using html argument:
phpcov merge --html ./html-report ./coverage
It will generate HTML report in ./html-report. Voila!

Related

solr.KeywordTokenizerFactory does not work with wildcard and space

My schema.xml has the below field type:
<fieldType name="string_searchable" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="pub_title" type="string_searchable" indexed="true" stored="true" multiValued="true"/>
Below data is present in one of the facet (without double quotes):
pub_title:"Current Concept on the Classification and Treatment of Spondylolisthesis"
I am firing the below query on solr query console in q and I am getting no results:
pub_title:*Treatment of Spondylolisthesis*
When I try to search using the below q parameter, it works, but the search operation takes twice longer:
pub_title:*Treatment\ of\ Spondylolisthesis*
I want to have a facet with the complete string (without double quotes) "Current Concept on the Classification and Treatment of Spondylolisthesis". I also need highlighting on this field.
I tried using solr.StandardTokenizerFactory, but facets were tokenized.
Please let me know where I am going wrong.
Thanks,
Pranay

Syntax for the Region tag in KML

I have several hundred placemarks that are all in one folder. I'm trying to make the labels appear only below a certain altitude. (The placemarks were created by exporting a layer from ArcGIS, and I presume that the altitude should be specified in the units used by the coordinate system of the layer, in this case, in feet; correct me if I'm wrong.) However, nothing I do with the <Region> tag seems to work; the labels happily appear at all altitudes. Here is the code that I'm using; can anyone tell what is wrong with it?
<Document id="DocumentName">
<name>NameGoesHere</name>
<Snippet></Snippet>
<Folder id="NameOfTheFolder">
<name>NameGoesHere</name>
<Region id="highAltitude">
<LatLonAltBox>
<north>40</north>
<south>37</south>
<east>-74</east>
<west>-79</west>
<minAltitude>50000</minAltitude>
<maxAltitude>500000</maxAltitude>
</LatLonAltBox>
<LabelStyle id="styleNameHere">
<scale>0</scale>
</LabelStyle>
</Region>
<Snippet></Snippet>
...
<placemark> ... </placemark>
<placemark> ... </placemark>
<placemark> ... </placemark>
...
</Folder>
</Document>
The point of all this code is to suppress labels at altitudes above 50,000 feet, but it does nothing of the sort. Toward the end of the code, after the </Folder> tag but before the </Document> tag, there is some code, generated when the file was exported, that specifies label styles. But whether or not I delete the <scale> part of it, it seems to have no effect. That code is as follows:
<Style id="Stylename">
<IconStyle>
...
</IconStyle>
<LabelStyle>
<color> ... </color>
<scale> ... </scale>
</LabelStyle>
<PolyStyle>
...
</PolyStyle>
</Style>
I suspect that I'm doing something wrong here in terms of syntax, but, because I've had no experience with KML at all until a few days ago, I'm not sure what the issue is. I appreciate any ideas as to why this isn't working.
You need to define the Lod (Level of Detail) in the Region otherwise it will always appear.
<Region id="highAltitude">
<LatLonAltBox>
...
</LatLonAltBox>
<Lod>
<minLodPixels>256</minLodPixels>
</Lod>
<Region>
The minLodPixels defines the size of the region where if it is less than this minimum number of pixels on the screen then the region is not shown.
https://developers.google.com/kml/documentation/kmlreference#lod
Also, the LabelStyle is not valid within the Region. That must appear in a <Style> element. If KML doesn't behave as you'd expect 9 out of 10 times the syntax is wrong -- try to validate it using a KML validator.

XPROC - Generation of files in secondary port

My requirement is to generate one XML file and few HTML files in the secondary port. I have configured few steps in XProc.
Here’s the sample code:
<p:xslt name="create-document">
<p:input port="stylesheet">
<p:document href="stylesheet.xsl" />
</p:input>
</p:xslt>
<p:for-each>
<p:iteration-source>
<p:pipe step="create-document" port="secondary" />
</p:iteration-source>
<p:store>
<p:with-option name="doctype-public" select="'-//W3C//DTD XHTML 1.0 Frameset//EN'" />
<p:with-option name="doctype-system" select="'http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd'" />
<p:with-option name="encoding" select="'UTF-8'" />
<p:with-option name="media-type" select="'text/html'" />
<p:with-option name="method" select="'xhtml'" />
<p:with-option name="omit-xml-declaration" select="'no'" />
</p:store>
</p:for-each>
The problem here is HTML file is generated properly. And the XML file is generated, but I am not able to view the XML content. Instead it displays everything in HTML format.This is because of <p:store> in the above code snippet.
How do you have two <p:store> steps? (One for HTML and the other for XML)
It would be nice if you could somehow determine with which xsl:result-document parameters each document on the secondary output was written. You would be able to duplicate those for your p:store. But you can derive other things from each document. You can retrieve the document name using base-uri(), and you can look at for instance the root element. You can put these values in a variable using:
<p:variable name="path" select="base-uri(/*)"/>
<p:variable name="root" select="local-name(/*)"/>
(Put these just below the p:iteration-source.)
You then need to decide how to call p:store. You could use XPath if, provided your XProc parser supports XPath 2.0 (like XMLCalabash does). But I’d recommend using a p:choose like this:
<p:choose>
<p:when test="ends-with($path, '.xhtml')">
<p:store
doctype-public="-//W3C//DTD XHTML 1.0 Frameset//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"
encoding="UTF-8"
media-type="text/html"
method="xhtml"
omit-xml-declaration="no">
<p:with-option name="href" select="$path"/>
</p:store>
</p:when>
<p:otherwise>
<p:store
encoding="UTF-8"
media-type="application/xml"
method="xml"
omit-xml-declaration="no">
<p:with-option name="href" select="$path"/>
</p:store>
</p:otherwise>
</p:choose>
(This entire p:choose replaces the p:store you already have.)
The test in p:when only looks at $path, but you could include a test for $root as well, if you like.
It also requires you to use .xhtml as extension in your xsl:result-document statements for the HTML output, but you can easily tweak that if you like.
The var and the choose should be enough to get your XML written properly, at least.
Good luck!

Why doesn't ${locale} resolve in my <compc> Ant task?

I've seen a number of examples, e.g. here, where people are including locale resource bundles by referencing the locale attribute in the element. For some reason this doesn't work for me. Here's what I have for the task:
<compc output="${deploy.dir}/myfrmwrk.swc" locale="en_US">
<source-path path-element="${basedir}/src/main/flex"/>
<include-sources dir="${basedir}/src/main/flex" includes="*" />
<include-libraries file="${basedir}/libs"/>
<compiler.external-library-path dir="${FLEX_HOME}/frameworks/libs/player/9" append="true">
<include name="playerglobal.swc"/>
</compiler.external-library-path>
<compiler.library-path dir="${FLEX_HOME}/frameworks" append="true">
<include name="libs"/>
<include name="locale/${locale}"/>
</compiler.library-path>
<load-config filename="${basedir}/fb3config.xml" />
</compc>
This fails with a bunch of errors of the form:
[compc] Error: could not find source for resource bundle ...
I can make it build with this one change:
<include name="locale/en_US"/>
The configuration file generated by Flex Builder 3 actually renders this as "locale/{locale}" (notice the $ is missing). I've tried that as well with the same (failing) results.
For now, I'm doing OK directly injecting en_US as we won't be doing localization bundles for quite some time, but I will eventually need to get this working. Also, it bugs me that I can't make it work the way that it SHOULD work!
I think the problem here is that ${locale} is interpreted by ant as a property, rather than a string literal to pass to the compc task. What I mean is that ant sees ${locale} and thinks that you want to substitute the value of the property locale which is (supposedly) defined in your build file. Of course, this isn't what you want at all, and things break miserably because of it.
The way I've done things in my build files is to remove the $ prefix and everything seems to work as expected. So your example would look something like this:
<compc output="${deploy.dir}/myfrmwrk.swc" locale="en_US">
<source-path path-element="${basedir}/src/main/flex"/>
<include-sources dir="${basedir}/src/main/flex" includes="*" />
<include-libraries file="${basedir}/libs"/>
<compiler.external-library-path dir="${FLEX_HOME}/frameworks/libs/player/9" append="true">
<include name="playerglobal.swc"/>
</compiler.external-library-path>
<compiler.library-path dir="${FLEX_HOME}/frameworks" append="true">
<include name="libs"/>
<!-- Ditch the dollar sign and things should work! -->
<include name="locale/{locale}"/>
</compiler.library-path>
<load-config filename="${basedir}/fb3config.xml" />
</compc>

How to compile a SWC file with mulitple namespaces

I'm trying to compile an SWC file from a list of given ActionScript classes. I'm using the compc compiler. The problem is that there are so many classes grouped into multiple namespaces that I am finding it very tedious to specify each individual class to be included in the SWC. Is there any easier way of doing this like just simply specifying a root directory of these classes?
At the moment I have something like this:
<?xml version="1.0"?>
<flex-config xmlns="http://www.adobe.com/2006/flex-config">
<output>C:\SomeFolder\testSWC.swc</output>
<compiler>
<source-path>.</source-path>
</compiler>
<include-classes>
<class>SomeNamespaceOne.One</class>
<class>SomeNamespaceOne.Two</class>
<class>SomeNamespaceOne.Three</class>
<class>SomeNamespaceOne.Four</class>
...
<class>SomeNamespaceFifty.One</class>
</include-classes>
</flex-config>
But I want something like this:
<?xml version="1.0"?>
<flex-config xmlns="http://www.adobe.com/2006/flex-config">
<output>C:\SomeFolder\testSWC.swc</output>
<compiler>
<source-path>. </source-path>
</compiler>
<include-classes>
<class>SomeRootDirectoryOfClassesToCompile</class>
</include-classes>
</flex-config>
Is this possible?
We wanted something similar, in "Ant".
I am assuming you are not using Flex Builder. In that case, I will definitely recommend using Ant and Flex Ant tasks available from Adobe. Even when you use Ant, its not easy doing what you want to do, so I am including our code below.
Following is our code. I don't remember where I got the idea from, so cannot thank the source for it :)
<pathconvert property="XXX.classes" pathsep=" ">
<fileset dir="${basedir}/XXX/src">
<include name="**/*.as"/>
<include name="**/*.mxml"/>
</fileset>
<compositemapper>
<packagemapper from="${basedir}\XXX\src\*.as" to="*"/>
<packagemapper from="${basedir}/XXX/src/*.as" to="*"/>
<packagemapper from="${basedir}\XXX\src\*.mxml" to="*"/>
<packagemapper from="${basedir}/XXX/src/*.mxml" to="*"/>
</compositemapper>
</pathconvert>
<compc optimize="true" debug="false"
include-classes="${XXX.classes}" output="${BUILD_FOLDER}/XXX.swc">
</compc>
Like Tanmay said, you should use the ANT tasks to make life easier, but there's an even simpler wach include an entire directory in the compc ant task. If you just need to include everything in src.dir you can do it like this:
<compc output="${target.dir}/foo.swc">
<source-path path-element="${src.dir}"/>
<include-sources dir="${src.dir}">
<include name="**/*" />
</include-sources>
</compc>

Resources