z3_QJlqGOZHq+cG!)Gd1%v_JhNjTP zschjr&Zy%(l+bJaCd0JH{Sv`I+dBE&R_s{>1zv*SXEmd!Qo0yH#}&~=w0wtd_PWap zBVGsbuCd6cX%qtu!js|5CLK)`5QSz&I8LDIJGj)W*`Cv^(b`|vx^XH=8;Uc>BOVNr zLco)uVpWUfLD{0p)+e_rLf_e6u7re7#J;|Z?hOE=+}y%-U;w8Hdp2+2P#_ zJ{rE|%F=VE{K1R1r@B9xdLY7N=~sV*72PZ{gF&`sZ6I}dm{7}HMH%c#S2pYq*RBM? zwr7Z2qvT-?3}ND Yl`W=1T0W%B3!2X;D2fylNGD4~rw$ukFGpK2yZBhG|qBLIMpQ^R-dN?W-ZM6qT{ z!{KEpU2&E+GX|7m6-AnKnkm7!5g3O}ttgtR%SPbLt7&fj$ElNB+!2PsO*F%45K~y1 z#B zCW)xI3~j<0j= flC z1B3Zzx&a(ZP@$) z=;vg2#wxI=9MD7s(rvx?pAHRP@b= cOM1bD5l~&xvEJ M}B%f<$+DFC4(rA2R9juPit& z5 Vo zG5yP<4)9{r1XWG `jfUIN7nNX`?Q+i0V`cc%5~Mtj >el!Z7=aCc@jsyIJqzrv)%d6c5(G7L(l-ne!2xcNQ zDfukNpk1xX;-iFhDNp7fITJM-^molg`-4kT2wUF-@Q&H j1uFrjAV}`qgkrZEG+87!`y6NCE zebz#w_kyKaho{AYgm%YU&>T6^UY+5o6*EUSl)ZbvUVP<*5CuOEITvKDV^vj9#m!lf z_huuo?`GsrThm9Z8fmCi;)!9k<^c*4{wFZ 5NLxZg+-N<`%D3nfj{pP0jTv9U(s*)gK=d}OVgCy zAk4NxVy)QJsjX!74OPIv>+9+>`>dSht~Zo|XyvCQS1(ri)LL$Nz#R|LFGTfSI#Udw zbH3Trz=Ux{4kUoyj{&SEyJzq2wWI9+V4*}ULl)|6{M8{fU!F^Hmxxc@&Ea7Fy5Vr8 zdDE0jGw+_Zr !;MZ_vBhwXg*9*WW-5n434t1Dq@{?QY`~t5 zFl5r}T;sA;T6gh4O|Vrngv3fGNVMFu1HACNDSb`XNeN)+vt?rh>iUJU!*}~gg>A?1 z`%?*T&080|c5~Ps@fa?Oxn28-E|ZEE(5O^+YvIgKR$v!y9NOa!1qt_5jK!bgRZq6^ za!+_YIO?NiFW=LFEE|jEY>~a7aD7RW)H*aFpiA5v1f=TkT+a+oI3K+Lph{#NX4sxA zO*LFsPf<>!rc^IBq;tX}BgX8Fi*zT~(uMi*hZ|D`2i&{DGW@qHSkb*WWb5`LAz--c zs69nfDFxM5=+J9fdAEx_qu?*$_rF )x!W(vaA@MnU{KFynA0Il}R(u@$U7;Zl*cLx5 zsN>>+PW`^Dh*EV&pou-?->&)qc;?<2<_#utQacdOG!{#hj%HwS9e_z&)bIVbIOwwd zV8iAxMD-AeC6^eKS~=Md_dMEo{dZBlo#V>#eG%V}i#i*t a|@1FT#zD203J3adSpJrcto+_A#*6n+8UNL99M|a?+-*S>F>R2xY45;~H z;pACCo884g;5J{f*>N F(T)v-ZF)N7VITzrqi8&>iqt!6vn|4Qv}*Y4siIJgflCKKXee z&UCW$fG?yE%`Qm&t@=4!lOv^(YubNe;z&A*Gq >nm5k?cqx1J#Pf91*C6dL)fM|$r&LyM z-ak;AT4SjM-EB`~gaU IBQ|*AK3Q}9=z42Z1 zT0ij|&U01BacK&G(o1krXpmqqlYA(mW+; 1KXYl< #-v@&{hTxD^0B}Z z_hZu{{HCTp$9G6P!WZ>-;tnSkuCrez(@nOlqY5e13Rw-Sr!Sm3E~&$=nT!4ndN{#H K$H$#j`TP&9#ZK1% literal 0 HcmV?d00001 diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..408e42f --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Mon Apr 11 02:44:36 CST 2022 +version=1.0-SNAPSHOT +groupId=org.jacoco +artifactId=org.jacoco.examples.maven.java diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..870b652 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,2 @@ +org\jacoco\examples\maven\java\HelloWorld2.class +org\jacoco\examples\maven\java\HelloWorld.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..a916c91 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,2 @@ +C:\Users\zy\Desktop\github\example-java\src\main\java\org\jacoco\examples\maven\java\HelloWorld2.java +C:\Users\zy\Desktop\github\example-java\src\main\java\org\jacoco\examples\maven\java\HelloWorld.java diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..79da4bb --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst @@ -0,0 +1 @@ +org\jacoco\examples\maven\java\HelloWorldTest.class diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..aa9a011 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -0,0 +1 @@ +C:\Users\zy\Desktop\github\example-java\src\test\java\org\jacoco\examples\maven\java\HelloWorldTest.java diff --git a/target/org.jacoco.examples.maven.java-1.0-SNAPSHOT.jar b/target/org.jacoco.examples.maven.java-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..528734c93a0d87feb3dfd5fdf88ae1f1f57a7439 GIT binary patch literal 3759 zcmbtX2{@E%8y+;aEXgvGmLpllEE-!h3fX1`jWOBIh_O^O6K5<<)_*EdC|imwS;o@A zFG dL_x(KY`@HY-+=IvQtP=#WMx0~> z@%v=qAppG1jfnbijD;~0zhK4>iUrKho|Z520Dk@t@Rj({%v|3BV{BwaM3@_YG;e7( z!@&`cgmG|aTTA;*f@+6a|1b@PZEJwx;0FABLs{1GQYsbl^t;JeHE*m>3ba7tI`rh- z 7t10e4gI#phbX~$ R+2g+liBj>1=3ROv}1hyLjd zu7u{km(zM!bEwR{?25Fgk%*GQ^HMh}2o6^oI<4{zoN9)i<_eB~Pt6 ~qp#Ua~qgY^6gE!;eUpG|3q$-s+l=!<-OS zS9Z}#bDmL9+(&*3VIRi%)POA{0|`KCwgRb9{eMz}TF6Z_4p*%w5!(LLBuSb|EqFUp z2zS<72a(h|b%!5HeC3}cG9Hh~mUn-W##|4Ed;^8V)5Vzu{Z+7uf#9iBwYV?SfdPD8 zkq+xm!V;A-2^GbmP-~%l8C#czv?jf}BSMMx_gkZNyBsR ZhfNsrNh=D;unQ^z&x)tHH#XZ6jJZo&Qw(-L{Z ^yNMt9 zE!6&^B`nZ?oo TQBt_P*Ckkjz XF3gl<8-YvbPON%4xaxXCkssmzK8Ci ^i5idhoB>OItionHiya30(<1HE@}3$99Q8p^8mcRr7 yVw z36W{lIHW`DiI2TJYfaeQVgS4ABc_S^1l?{h@-XsCG|Au55r40n5*{8Degk|k!|D8a z`<<`9M8=mB;FlS-jL3-o$_IN6YX>TLxg<27cNZ2gh3meMES%U^^WtEE;m+t$sdm?7 zdCM)Xl%03@;;sH@cIV4+K9(-<`zGX$)Y$_kK4~Q0LWMO%6vWMrN_~Bau1U}Lo*AB) z IuB#HJ~eUkoXB&6zvI+69Nr#`KR~?S>nj9gIPL zJ?T5=^>J($^L5aa<@wvwO@gwGlv)awPtD+Q{>E+-KWd>cG$QDlwK;=i(6u$8uFB+% zaEiaOur`(Ea KwbiG5i{*Q0vf+Gtt&9x~uSf7vJ1jLP2EUWO_%eJNjav_!=)q+7P5+M+yS zY9G#i{ctAC5?XpH>_pLipV3#k{4M>@%Cs_5o>+HG6BY9-Zm(yQmIv|bVliVkGje(w z(A7zG&KilL6Zc#TAu7Qkn{6Ej>o;tn`}>ZjqwiaL8RSoVj!=21j5g(KzZH@3xtWI5 zrOWkcH)(AfIz7T4P+j|Id_*DyGcy7z2wAK^{NEKaStwf>6`wP /g; + var pr_quot = /\"/g; + /** like textToHtml but escapes double quotes to be attribute safe. */ + function attribToHtml(str) { + return str.replace(pr_amp, '&') + .replace(pr_lt, '<') + .replace(pr_gt, '>') + .replace(pr_quot, '"'); + } + + /** escapest html special characters to html. */ + function textToHtml(str) { + return str.replace(pr_amp, '&') + .replace(pr_lt, '<') + .replace(pr_gt, '>'); + } + + + var pr_ltEnt = /</g; + var pr_gtEnt = />/g; + var pr_aposEnt = /'/g; + var pr_quotEnt = /"/g; + var pr_ampEnt = /&/g; + var pr_nbspEnt = / /g; + /** unescapes html to plain text. */ + function htmlToText(html) { + var pos = html.indexOf('&'); + if (pos < 0) { return html; } + // Handle numeric entities specially. We can't use functional substitution + // since that doesn't work in older versions of Safari. + // These should be rare since most browsers convert them to normal chars. + for (--pos; (pos = html.indexOf('', pos + 1)) >= 0;) { + var end = html.indexOf(';', pos); + if (end >= 0) { + var num = html.substring(pos + 3, end); + var radix = 10; + if (num && num.charAt(0) === 'x') { + num = num.substring(1); + radix = 16; + } + var codePoint = parseInt(num, radix); + if (!isNaN(codePoint)) { + html = (html.substring(0, pos) + String.fromCharCode(codePoint) + + html.substring(end + 1)); + } + } + } + + return html.replace(pr_ltEnt, '<') + .replace(pr_gtEnt, '>') + .replace(pr_aposEnt, "'") + .replace(pr_quotEnt, '"') + .replace(pr_nbspEnt, ' ') + .replace(pr_ampEnt, '&'); + } + + /** is the given node's innerHTML normally unescaped? */ + function isRawContent(node) { + return 'XMP' === node.tagName; + } + + var newlineRe = /[\r\n]/g; + /** + * Are newlines and adjacent spaces significant in the given node's innerHTML? + */ + function isPreformatted(node, content) { + // PRE means preformatted, and is a very common case, so don't create + // unnecessary computed style objects. + if ('PRE' === node.tagName) { return true; } + if (!newlineRe.test(content)) { return true; } // Don't care + var whitespace = ''; + // For disconnected nodes, IE has no currentStyle. + if (node.currentStyle) { + whitespace = node.currentStyle.whiteSpace; + } else if (window.getComputedStyle) { + // Firefox makes a best guess if node is disconnected whereas Safari + // returns the empty string. + whitespace = window.getComputedStyle(node, null).whiteSpace; + } + return !whitespace || whitespace === 'pre'; + } + + function normalizedHtml(node, out, opt_sortAttrs) { + switch (node.nodeType) { + case 1: // an element + var name = node.tagName.toLowerCase(); + + out.push('<', name); + var attrs = node.attributes; + var n = attrs.length; + if (n) { + if (opt_sortAttrs) { + var sortedAttrs = []; + for (var i = n; --i >= 0;) { sortedAttrs[i] = attrs[i]; } + sortedAttrs.sort(function (a, b) { + return (a.name < b.name) ? -1 : a.name === b.name ? 0 : 1; + }); + attrs = sortedAttrs; + } + for (var i = 0; i < n; ++i) { + var attr = attrs[i]; + if (!attr.specified) { continue; } + out.push(' ', attr.name.toLowerCase(), + '="', attribToHtml(attr.value), '"'); + } + } + out.push('>'); + for (var child = node.firstChild; child; child = child.nextSibling) { + normalizedHtml(child, out, opt_sortAttrs); + } + if (node.firstChild || !/^(?:br|link|img)$/.test(name)) { + out.push('<\/', name, '>'); + } + break; + case 3: case 4: // text + out.push(textToHtml(node.nodeValue)); + break; + } + } + + /** + * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally + * matches the union o the sets o strings matched d by the input RegExp. + * Since it matches globally, if the input strings have a start-of-input + * anchor (/^.../), it is ignored for the purposes of unioning. + * @param {Array.jH|!rz(QXhmYXnz3eW2iiu4u`p<(8O{u$FV=}G zFl~W1VBnq2U^_kuIBsZ|8xUk%+!8#it4d&*z}Ns9*Jr&K%P0r7vdUx`vqly}5qK`b ze$bp8hUH3+r3L2)%W*X@omYmOP+7{BZNqxAwBh_ zWEXZo#I5d{)m}IZdaE$7o7Cz&EG^05p|8oa&|=tRD{D(OT^8fkzmqLhnw%A{td2P3 zc%ZMXv}f}x{vIiZd_gO5*jMiD?0uM l6(zuS!w*_X3$Pt!G4g-L&4M!E?Ci=li{p(3{ApaWvz(P6Inxyv Z#q!3fV0avumqjcBe2jpE5x>`ye*o@Q3dR5c literal 0 HcmV?d00001 diff --git a/target/site/jacoco/index.html b/target/site/jacoco/index.html new file mode 100644 index 0000000..7a62e21 --- /dev/null +++ b/target/site/jacoco/index.html @@ -0,0 +1 @@ + JaCoCo Maven plug-in example for Java project JaCoCo Maven plug-in example for Java project
\ No newline at end of file diff --git a/target/site/jacoco/jacoco-resources/branchfc.gif b/target/site/jacoco/jacoco-resources/branchfc.gif new file mode 100644 index 0000000000000000000000000000000000000000..989b46d30469b56b014758f846ee6c5abfda16aa GIT binary patch literal 91 zcmZ?wbhEHb
Element Missed Instructions Cov. Missed Branches Cov. Missed Cxty Missed Lines Missed Methods Missed Classes Total 9 of 16 43% 1 of 2 50% 3 5 4 7 2 4 1 2 org.jacoco.examples.maven.java 43% 50% 3 5 4 7 2 4 1 2 6=b<*h$V|V6X-NwhSNb literal 0 HcmV?d00001 diff --git a/target/site/jacoco/jacoco-resources/branchnc.gif b/target/site/jacoco/jacoco-resources/branchnc.gif new file mode 100644 index 0000000000000000000000000000000000000000..1933e07c376bb71bdd9aac91cf858da3fcdb0f1c GIT binary patch literal 91 zcmZ?wbhEHb 6=b<*h$V|V6X-N9U38B literal 0 HcmV?d00001 diff --git a/target/site/jacoco/jacoco-resources/branchpc.gif b/target/site/jacoco/jacoco-resources/branchpc.gif new file mode 100644 index 0000000000000000000000000000000000000000..cbf711b7030929b733f22f7a0cf3dbf61fe7868f GIT binary patch literal 91 zcmZ?wbhEHb m$mi>nCYN#As;!%lJz1A{dHmlPuc literal 0 HcmV?d00001 diff --git a/target/site/jacoco/jacoco-resources/bundle.gif b/target/site/jacoco/jacoco-resources/bundle.gif new file mode 100644 index 0000000000000000000000000000000000000000..fca9c53e629a7a5c07186ac1e2a1e37d8d6e88f4 GIT binary patch literal 709 zcmZ?wbhEHb6krfwxXQrrpW*-7BK; o8CDEUD?$vun5^UNelT%D!ODh RsX(Ohwq+z^!{nkw1lu( zDPc2HV&`P7KEHX-jYA>R6T@ewM9fTyo0E0x)!k _2wz@P-Sk{|^LE{K>+|z);Vi!vF-J zIALI4-caAv+|t_C-oY&>$uA|y-ND80=rPrik*keM);A(7JS@bMXJ#`uzjsjN>eYc> zj1!vJoq|_~`Ugb%`8WwRvs$=Bx;h_qcXM-KZDthLjMNep5fPP;Q{vk%FCD3^prRsd zAfR@-Nl4k$GSW~(G16XNhoM=9$H>NPjk%o(&&DPp6ODz*?)|b>X&fF28jY>Ox-nZU Y5*r^bWMyL$kZ52~Skzz7#K>R`0G8r7i~s-t literal 0 HcmV?d00001 diff --git a/target/site/jacoco/jacoco-resources/down.gif b/target/site/jacoco/jacoco-resources/down.gif new file mode 100644 index 0000000000000000000000000000000000000000..440a14db74e76c2b6e854eacac1c44414b166271 GIT binary patch literal 67 zcmZ?wbhEHb Z%p}jXB Ub$^Lu-Ncq(ygK&ScM%3_0Po}%Qvd(} literal 0 HcmV?d00001 diff --git a/target/site/jacoco/jacoco-resources/greenbar.gif b/target/site/jacoco/jacoco-resources/greenbar.gif new file mode 100644 index 0000000000000000000000000000000000000000..0ba65672530ee09f086821a26156836d0c91bd74 GIT binary patch literal 91 zcmZ?wbhEHbWMtrCc+ADXzmZ>do2<@m9j_x^v8Q5duh#b5>RIq$!Lmoo);w9mu$BQ0 eDgI<(1nOeYVE_V<84N5O20cYWMlKB;4AuaIXBwOU literal 0 HcmV?d00001 diff --git a/target/site/jacoco/jacoco-resources/group.gif b/target/site/jacoco/jacoco-resources/group.gif new file mode 100644 index 0000000000000000000000000000000000000000..a4ea580d278fb727e4ae692838877fa63c4becf9 GIT binary patch literal 351 zcmZ?wbhEHb6krfwxXQpVwXtJrV`pb|Z&Bgo_>{Q`Df1G5Wa`}H^qKLgbHn221;#86 zie2Oyy23SVg;&(l)`=%9{nuIstg#PSrQx<&&vS#m*G7G>4W@o;CvAN*Y1^AgTVGGw z_ImEoPjiobns@ZmyknnMUi-Q7>W`Jzer$aB_t(pL-|kQQ|MAfO*PGv5?Ee3B$^ToO z|A8VGOaEW3eSEO?=BC06Ybq|Tt-P?N@;?|b;0205Sr{1@Oc``Qsz82XV5>PWtH47? zs^4Q~P@BxTjDV;&5*!R(s==>VnJe}-&SEIintfiq!@ Cwn VRxXubL!4|)qjO}gg>klxZ?TGXw~#-V zU_Y2&N}FX?r*L1YbYiM-aj|xBv2}#Mgo3?-guaA=wSS1Yfrz+)iMWB7#*ml2h^x<; ztIwFU(w+bR{{R30A^8LW0015UEC2ui01yBW000F(peK%GX`X1Rt}L1aL$Vf5mpMgx vG+WO#2NYmJDM}^)l;8n@L?90V%CN9pFcyU&MPO(u48jTlL$uClRtNw)MiWcq literal 0 HcmV?d00001 diff --git a/target/site/jacoco/jacoco-resources/package.gif b/target/site/jacoco/jacoco-resources/package.gif new file mode 100644 index 0000000000000000000000000000000000000000..131c28da405493661e3253ef79a68bd273039295 GIT binary patch literal 227 zcmZ?wbhEHb6krfwIKsg2^W*Nf7neOfxp04z;n8NJ+xzDotkS){bH@Hst%K#-*LO_c zo~yCDQ0v_4?v)A3lSAd#C95utQCbkGxF}NT_=2WF8}WGs5taT9|NsAIzy=h5vM@3* zNHFMtBtdpEuqG&|^`&Ia(}-MpBVo@mW@+b{B25<}cFdc?!Kkoc14n0vkh1`XOwU>7 z#al8o_@;D=?hdfkdC)D9Q@O@%Lfqp;ZBt~9C*29`GMF2XzQp8akWQVjDvMC75PzEx Mi%z;upCW@b03m@=3jhEB literal 0 HcmV?d00001 diff --git a/target/site/jacoco/jacoco-resources/prettify.css b/target/site/jacoco/jacoco-resources/prettify.css new file mode 100644 index 0000000..be5166e --- /dev/null +++ b/target/site/jacoco/jacoco-resources/prettify.css @@ -0,0 +1,13 @@ +/* Pretty printing styles. Used with prettify.js. */ + +.str { color: #2A00FF; } +.kwd { color: #7F0055; font-weight:bold; } +.com { color: #3F5FBF; } +.typ { color: #606; } +.lit { color: #066; } +.pun { color: #660; } +.pln { color: #000; } +.tag { color: #008; } +.atn { color: #606; } +.atv { color: #080; } +.dec { color: #606; } diff --git a/target/site/jacoco/jacoco-resources/prettify.js b/target/site/jacoco/jacoco-resources/prettify.js new file mode 100644 index 0000000..b2766fe --- /dev/null +++ b/target/site/jacoco/jacoco-resources/prettify.js @@ -0,0 +1,1510 @@ +// Copyright (C) 2006 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +/** + * @fileoverview + * some functions for browser-side pretty printing of code contained in html. + * + * + * For a fairly comprehensive set of languages see the + * README + * file that came with this source. At a minimum, the lexer should work on a + * number of languages including C and friends, Java, Python, Bash, SQL, HTML, + * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk + * and a subset of Perl, but, because of commenting conventions, doesn't work on + * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class. + *
+ * Usage:
+ *
+ * That's it. I wanted to keep the API as simple as possible, so there's no + * need to specify which language the code is in, but if you wish, you can add + * another class to the {@code- include this source file in an html page via + * {@code } + *
- define style rules. See the example page for examples. + *
- mark the {@code
} and {@code} tags in your source with + * {@code class=prettyprint.} + * You can also use the (html deprecated) {@code} tag, but the pretty + * printer needs to do more substantial DOM manipulations to support that, so + * some css styles may not be preserved. + * } or {@code} element to specify the + * language, as in {@code}. Any class that + * starts with "lang-" followed by a file extension, specifies the file type. + * See the "lang-*.js" files in this directory for code that implements + * per-language file handlers. + *+ * Change log:
+ * cbeust, 2006/08/22 + *+ * Java annotations (start with "@") are now captured as literals ("lit") + *+ * @requires console + */ + +// JSLint declarations +/*global console, document, navigator, setTimeout, window */ + +/** + * Split {@code prettyPrint} into multiple timeouts so as not to interfere with + * UI events. + * If set to {@code false}, {@code prettyPrint()} is synchronous. + */ +window['PR_SHOULD_USE_CONTINUATION'] = true; + +/** the number of characters between tab columns */ +window['PR_TAB_WIDTH'] = 8; + +/** Walks the DOM returning a properly escaped version of innerHTML. + * @param {Node} node + * @param {Array.} out output buffer that receives chunks of HTML. + */ +window['PR_normalizedHtml'] + +/** Contains functions for creating and registering new language handlers. + * @type {Object} + */ + = window['PR'] + +/** Pretty print a chunk of code. + * + * @param {string} sourceCodeHtml code as html + * @return {string} code as html, but prettier + */ + = window['prettyPrintOne'] +/** Find all the {@code } and {@code} tags in the DOM with + * {@code class=prettyprint} and prettify them. + * @param {Function?} opt_whenDone if specified, called when the last entry + * has been finished. + */ + = window['prettyPrint'] = void 0; + +/** browser detection. @extern @returns false if not IE, otherwise the major version. */ +window['_pr_isIE6'] = function () { + var ieVersion = navigator && navigator.userAgent && + navigator.userAgent.match(/\bMSIE ([678])\./); + ieVersion = ieVersion ? +ieVersion[1] : false; + window['_pr_isIE6'] = function () { return ieVersion; }; + return ieVersion; +}; + + +(function () { + // Keyword lists for various languages. + var FLOW_CONTROL_KEYWORDS = + "break continue do else for if return while "; + var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " + + "double enum extern float goto int long register short signed sizeof " + + "static struct switch typedef union unsigned void volatile "; + var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " + + "new operator private protected public this throw true try typeof "; + var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " + + "concept concept_map const_cast constexpr decltype " + + "dynamic_cast explicit export friend inline late_check " + + "mutable namespace nullptr reinterpret_cast static_assert static_cast " + + "template typeid typename using virtual wchar_t where "; + var JAVA_KEYWORDS = COMMON_KEYWORDS + + "abstract boolean byte extends final finally implements import " + + "instanceof null native package strictfp super synchronized throws " + + "transient "; + var CSHARP_KEYWORDS = JAVA_KEYWORDS + + "as base by checked decimal delegate descending event " + + "fixed foreach from group implicit in interface internal into is lock " + + "object out override orderby params partial readonly ref sbyte sealed " + + "stackalloc string select uint ulong unchecked unsafe ushort var "; + var JSCRIPT_KEYWORDS = COMMON_KEYWORDS + + "debugger eval export function get null set undefined var with " + + "Infinity NaN "; + var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " + + "goto if import last local my next no our print package redo require " + + "sub undef unless until use wantarray while BEGIN END "; + var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " + + "elif except exec finally from global import in is lambda " + + "nonlocal not or pass print raise try with yield " + + "False True None "; + var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" + + " defined elsif end ensure false in module next nil not or redo rescue " + + "retry self super then true undef unless until when yield BEGIN END "; + var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " + + "function in local set then until "; + var ALL_KEYWORDS = ( + CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS + + PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS); + + // token style names. correspond to css classes + /** token style for a string literal */ + var PR_STRING = 'str'; + /** token style for a keyword */ + var PR_KEYWORD = 'kwd'; + /** token style for a comment */ + var PR_COMMENT = 'com'; + /** token style for a type */ + var PR_TYPE = 'typ'; + /** token style for a literal value. e.g. 1, null, true. */ + var PR_LITERAL = 'lit'; + /** token style for a punctuation string. */ + var PR_PUNCTUATION = 'pun'; + /** token style for a punctuation string. */ + var PR_PLAIN = 'pln'; + + /** token style for an sgml tag. */ + var PR_TAG = 'tag'; + /** token style for a markup declaration such as a DOCTYPE. */ + var PR_DECLARATION = 'dec'; + /** token style for embedded source. */ + var PR_SOURCE = 'src'; + /** token style for an sgml attribute name. */ + var PR_ATTRIB_NAME = 'atn'; + /** token style for an sgml attribute value. */ + var PR_ATTRIB_VALUE = 'atv'; + + /** + * A class that indicates a section of markup that is not code, e.g. to allow + * embedding of line numbers within code listings. + */ + var PR_NOCODE = 'nocode'; + + /** A set of tokens that can precede a regular expression literal in + * javascript. + * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full + * list, but I've removed ones that might be problematic when seen in + * languages that don't support regular expression literals. + * + *Specifically, I've removed any keywords that can't precede a regexp + * literal in a syntactically legal javascript program, and I've removed the + * "in" keyword since it's not a keyword in many languages, and might be used + * as a count of inches. + * + *
The link a above does not accurately describe EcmaScript rules since + * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works + * very well in practice. + * + * @private + */ + var REGEXP_PRECEDER_PATTERN = function () { + var preceders = [ + "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=", + "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=", + "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";", + "<", "<<", "<<=", "<=", "=", "==", "===", ">", + ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[", + "^", "^=", "^^", "^^=", "{", "|", "|=", "||", + "||=", "~" /* handles =~ and !~ */, + "break", "case", "continue", "delete", + "do", "else", "finally", "instanceof", + "return", "throw", "try", "typeof" + ]; + var pattern = '(?:^^|[+-]'; + for (var i = 0; i < preceders.length; ++i) { + pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1'); + } + pattern += ')\\s*'; // matches at end, and matches empty string + return pattern; + // CAVEAT: this does not properly handle the case where a regular + // expression immediately follows another since a regular expression may + // have flags for case-sensitivity and the like. Having regexp tokens + // adjacent is not valid in any language I'm aware of, so I'm punting. + // TODO: maybe style special characters inside a regexp as punctuation. + }(); + + // Define regexps here so that the interpreter doesn't have to create an + // object each time the function containing them is called. + // The language spec requires a new object created even if you don't access + // the $1 members. + var pr_amp = /&/g; + var pr_lt = /
} regexs non multiline, non-global regexs. + * @return {RegExp} a global regex. + */ + function combinePrefixPatterns(regexs) { + var capturedGroupIndex = 0; + + var needToFoldCase = false; + var ignoreCase = false; + for (var i = 0, n = regexs.length; i < n; ++i) { + var regex = regexs[i]; + if (regex.ignoreCase) { + ignoreCase = true; + } else if (/[a-z]/i.test(regex.source.replace( + /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) { + needToFoldCase = true; + ignoreCase = false; + break; + } + } + + function decodeEscape(charsetPart) { + if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); } + switch (charsetPart.charAt(1)) { + case 'b': return 8; + case 't': return 9; + case 'n': return 0xa; + case 'v': return 0xb; + case 'f': return 0xc; + case 'r': return 0xd; + case 'u': case 'x': + return parseInt(charsetPart.substring(2), 16) + || charsetPart.charCodeAt(1); + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': + return parseInt(charsetPart.substring(1), 8); + default: return charsetPart.charCodeAt(1); + } + } + + function encodeEscape(charCode) { + if (charCode < 0x20) { + return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16); + } + var ch = String.fromCharCode(charCode); + if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') { + ch = '\\' + ch; + } + return ch; + } + + function caseFoldCharset(charSet) { + var charsetParts = charSet.substring(1, charSet.length - 1).match( + new RegExp( + '\\\\u[0-9A-Fa-f]{4}' + + '|\\\\x[0-9A-Fa-f]{2}' + + '|\\\\[0-3][0-7]{0,2}' + + '|\\\\[0-7]{1,2}' + + '|\\\\[\\s\\S]' + + '|-' + + '|[^-\\\\]', + 'g')); + var groups = []; + var ranges = []; + var inverse = charsetParts[0] === '^'; + for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) { + var p = charsetParts[i]; + switch (p) { + case '\\B': case '\\b': + case '\\D': case '\\d': + case '\\S': case '\\s': + case '\\W': case '\\w': + groups.push(p); + continue; + } + var start = decodeEscape(p); + var end; + if (i + 2 < n && '-' === charsetParts[i + 1]) { + end = decodeEscape(charsetParts[i + 2]); + i += 2; + } else { + end = start; + } + ranges.push([start, end]); + // If the range might intersect letters, then expand it. + if (!(end < 65 || start > 122)) { + if (!(end < 65 || start > 90)) { + ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]); + } + if (!(end < 97 || start > 122)) { + ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]); + } + } + } + + // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]] + // -> [[1, 12], [14, 14], [16, 17]] + ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1] - a[1]); }); + var consolidatedRanges = []; + var lastRange = [NaN, NaN]; + for (var i = 0; i < ranges.length; ++i) { + var range = ranges[i]; + if (range[0] <= lastRange[1] + 1) { + lastRange[1] = Math.max(lastRange[1], range[1]); + } else { + consolidatedRanges.push(lastRange = range); + } + } + + var out = ['[']; + if (inverse) { out.push('^'); } + out.push.apply(out, groups); + for (var i = 0; i < consolidatedRanges.length; ++i) { + var range = consolidatedRanges[i]; + out.push(encodeEscape(range[0])); + if (range[1] > range[0]) { + if (range[1] + 1 > range[0]) { out.push('-'); } + out.push(encodeEscape(range[1])); + } + } + out.push(']'); + return out.join(''); + } + + function allowAnywhereFoldCaseAndRenumberGroups(regex) { + // Split into character sets, escape sequences, punctuation strings + // like ('(', '(?:', ')', '^'), and runs of characters that do not + // include any of the above. + var parts = regex.source.match( + new RegExp( + '(?:' + + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]' // a character set + + '|\\\\u[A-Fa-f0-9]{4}' // a unicode escape + + '|\\\\x[A-Fa-f0-9]{2}' // a hex escape + + '|\\\\[0-9]+' // a back-reference or octal escape + + '|\\\\[^ux0-9]' // other escape sequence + + '|\\(\\?[:!=]' // start of a non-capturing group + + '|[\\(\\)\\^]' // start/emd of a group, or line start + + '|[^\\x5B\\x5C\\(\\)\\^]+' // run of other characters + + ')', + 'g')); + var n = parts.length; + + // Maps captured group numbers to the number they will occupy in + // the output or to -1 if that has not been determined, or to + // undefined if they need not be capturing in the output. + var capturedGroups = []; + + // Walk over and identify back references to build the capturedGroups + // mapping. + for (var i = 0, groupIndex = 0; i < n; ++i) { + var p = parts[i]; + if (p === '(') { + // groups are 1-indexed, so max group index is count of '(' + ++groupIndex; + } else if ('\\' === p.charAt(0)) { + var decimalValue = +p.substring(1); + if (decimalValue && decimalValue <= groupIndex) { + capturedGroups[decimalValue] = -1; + } + } + } + + // Renumber groups and reduce capturing groups to non-capturing groups + // where possible. + for (var i = 1; i < capturedGroups.length; ++i) { + if (-1 === capturedGroups[i]) { + capturedGroups[i] = ++capturedGroupIndex; + } + } + for (var i = 0, groupIndex = 0; i < n; ++i) { + var p = parts[i]; + if (p === '(') { + ++groupIndex; + if (capturedGroups[groupIndex] === undefined) { + parts[i] = '(?:'; + } + } else if ('\\' === p.charAt(0)) { + var decimalValue = +p.substring(1); + if (decimalValue && decimalValue <= groupIndex) { + parts[i] = '\\' + capturedGroups[groupIndex]; + } + } + } + + // Remove any prefix anchors so that the output will match anywhere. + // ^^ really does mean an anchored match though. + for (var i = 0, groupIndex = 0; i < n; ++i) { + if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; } + } + + // Expand letters to groupts to handle mixing of case-sensitive and + // case-insensitive patterns if necessary. + if (regex.ignoreCase && needToFoldCase) { + for (var i = 0; i < n; ++i) { + var p = parts[i]; + var ch0 = p.charAt(0); + if (p.length >= 2 && ch0 === '[') { + parts[i] = caseFoldCharset(p); + } else if (ch0 !== '\\') { + // TODO: handle letters in numeric escapes. + parts[i] = p.replace( + /[a-zA-Z]/g, + function (ch) { + var cc = ch.charCodeAt(0); + return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']'; + }); + } + } + } + + return parts.join(''); + } + + var rewritten = []; + for (var i = 0, n = regexs.length; i < n; ++i) { + var regex = regexs[i]; + if (regex.global || regex.multiline) { throw new Error('' + regex); } + rewritten.push( + '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')'); + } + + return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g'); + } + + var PR_innerHtmlWorks = null; + function getInnerHtml(node) { + // inner html is hopelessly broken in Safari 2.0.4 when the content is + // an html description of well formed XML and the containing tag is a PRE + // tag, so we detect that case and emulate innerHTML. + if (null === PR_innerHtmlWorks) { + var testNode = document.createElement('PRE'); + testNode.appendChild( + document.createTextNode('\n ')); + PR_innerHtmlWorks = !/)[\r\n]+/g, '$1') + .replace(/(?:[\r\n]+[ \t]*)+/g, ' '); + } + return content; + } + + var out = []; + for (var child = node.firstChild; child; child = child.nextSibling) { + normalizedHtml(child, out); + } + return out.join(''); + } + + /** returns a function that expand tabs to spaces. This function can be fed + * successive chunks of text, and will maintain its own internal state to + * keep track of how tabs are expanded. + * @return {function (string) : string} a function that takes + * plain text and return the text with tabs expanded. + * @private + */ + function makeTabExpander(tabWidth) { + var SPACES = ' '; + var charInLine = 0; + + return function (plainText) { + // walk over each character looking for tabs and newlines. + // On tabs, expand them. On newlines, reset charInLine. + // Otherwise increment charInLine + var out = null; + var pos = 0; + for (var i = 0, n = plainText.length; i < n; ++i) { + var ch = plainText.charAt(i); + + switch (ch) { + case '\t': + if (!out) { out = []; } + out.push(plainText.substring(pos, i)); + // calculate how much space we need in front of this part + // nSpaces is the amount of padding -- the number of spaces needed + // to move us to the next column, where columns occur at factors of + // tabWidth. + var nSpaces = tabWidth - (charInLine % tabWidth); + charInLine += nSpaces; + for (; nSpaces >= 0; nSpaces -= SPACES.length) { + out.push(SPACES.substring(0, nSpaces)); + } + pos = i + 1; + break; + case '\n': + charInLine = 0; + break; + default: + ++charInLine; + } + } + if (!out) { return plainText; } + out.push(plainText.substring(pos)); + return out.join(''); + }; + } + + var pr_chunkPattern = new RegExp( + '[^<]+' // A run of characters other than '<' + + '|<\!--[\\s\\S]*?--\>' // an HTML comment + + '|' // a CDATA section + // a probable tag that should not be highlighted + + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>' + + '|<', // A '<' that does not begin a larger chunk + 'g'); + var pr_commentPrefix = /^<\!--/; + var pr_cdataPrefix = /^) into their textual equivalent. + * + * @param {string} s html where whitespace is considered significant. + * @return {Object} source code and extracted tags. + * @private + */ + function extractTags(s) { + // since the pattern has the 'g' modifier and defines no capturing groups, + // this will return a list of all chunks which we then classify and wrap as + // PR_Tokens + var matches = s.match(pr_chunkPattern); + var sourceBuf = []; + var sourceBufLen = 0; + var extractedTags = []; + if (matches) { + for (var i = 0, n = matches.length; i < n; ++i) { + var match = matches[i]; + if (match.length > 1 && match.charAt(0) === '<') { + if (pr_commentPrefix.test(match)) { continue; } + if (pr_cdataPrefix.test(match)) { + // strip CDATA prefix and suffix. Don't unescape since it's CDATA + sourceBuf.push(match.substring(9, match.length - 3)); + sourceBufLen += match.length - 12; + } else if (pr_brPrefix.test(match)) { + //
tags are lexically significant so convert them to text. + // This is undone later. + sourceBuf.push('\n'); + ++sourceBufLen; + } else { + if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) { + // A will start a section that should be + // ignored. Continue walking the list until we see a matching end + // tag. + var name = match.match(pr_tagNameRe)[2]; + var depth = 1; + var j; + end_tag_loop: + for (j = i + 1; j < n; ++j) { + var name2 = matches[j].match(pr_tagNameRe); + if (name2 && name2[2] === name) { + if (name2[1] === '/') { + if (--depth === 0) { break end_tag_loop; } + } else { + ++depth; + } + } + } + if (j < n) { + extractedTags.push( + sourceBufLen, matches.slice(i, j + 1).join('')); + i = j; + } else { // Ignore unclosed sections. + extractedTags.push(sourceBufLen, match); + } + } else { + extractedTags.push(sourceBufLen, match); + } + } + } else { + var literalText = htmlToText(match); + sourceBuf.push(literalText); + sourceBufLen += literalText.length; + } + } + } + return { source: sourceBuf.join(''), tags: extractedTags }; + } + + /** True if the given tag contains a class attribute with the nocode class. */ + function isNoCodeTag(tag) { + return !!tag + // First canonicalize the representation of attributes + .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g, + ' $1="$2$3$4"') + // Then look for the attribute we want. + .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/); + } + + /** + * Apply the given language handler to sourceCode and add the resulting + * decorations to out. + * @param {number} basePos the index of sourceCode within the chunk of source + * whose decorations are already present on out. + */ + function appendDecorations(basePos, sourceCode, langHandler, out) { + if (!sourceCode) { return; } + var job = { + source: sourceCode, + basePos: basePos + }; + langHandler(job); + out.push.apply(out, job.decorations); + } + + /** Given triples of [style, pattern, context] returns a lexing function, + * The lexing function interprets the patterns to find token boundaries and + * returns a decoration list of the form + * [index_0, style_0, index_1, style_1, ..., index_n, style_n] + * where index_n is an index into the sourceCode, and style_n is a style + * constant like PR_PLAIN. index_n-1 <= index_n, and style_n-1 applies to + * all characters in sourceCode[index_n-1:index_n]. + * + * The stylePatterns is a list whose elements have the form + * [style : string, pattern : RegExp, DEPRECATED, shortcut : string]. + * + * Style is a style constant like PR_PLAIN, or can be a string of the + * form 'lang-FOO', where FOO is a language extension describing the + * language of the portion of the token in $1 after pattern executes. + * E.g., if style is 'lang-lisp', and group 1 contains the text + * '(hello (world))', then that portion of the token will be passed to the + * registered lisp handler for formatting. + * The text before and after group 1 will be restyled using this decorator + * so decorators should take care that this doesn't result in infinite + * recursion. For example, the HTML lexer rule for SCRIPT elements looks + * something like ['lang-js', /<[s]cript>(.+?)<\/script>/]. This may match + * 'HelloWorld
Element Missed Instructions Cov. Missed Branches Cov. Missed Cxty Missed Lines Missed Methods Total 2 of 9 77% 1 of 2 50% 1 3 1 4 0 2 getMessage(boolean) 66% 50% 1 2 1 3 0 1 HelloWorld() 100% n/a 0 1 0 1 0 1