You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2014/08/24 23:09:04 UTC

svn commit: r1620188 - in /jmeter/trunk: bin/testfiles/ src/protocol/http/org/apache/jmeter/protocol/http/parser/ test/src/org/apache/jmeter/protocol/http/parser/ xdocs/

Author: pmouawad
Date: Sun Aug 24 21:09:04 2014
New Revision: 1620188

URL: http://svn.apache.org/r1620188
Log:
Bug 56772 - Handle IE Conditional comments when parsing embedded resources
Bugzilla Id: 56772

Added:
    jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1.html   (with props)
    jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_FF.all
    jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_IE6.all
    jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_IE7.all
    jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_IE8.all
    jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2.html   (with props)
    jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_FF.all
    jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_IE7.all
    jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_IE8.all
    jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_IE9.all
    jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3.html   (with props)
    jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_FF.all
    jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_IE10.all
    jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_IE55.all
    jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_IE6.all
Modified:
    jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/HTMLParser.java
    jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/HtmlParserHTMLParser.java
    jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/JTidyHTMLParser.java
    jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/JsoupBasedHtmlParser.java
    jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/LagartoBasedHtmlParser.java
    jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/RegexpHTMLParser.java
    jmeter/trunk/test/src/org/apache/jmeter/protocol/http/parser/TestHTMLParser.java
    jmeter/trunk/xdocs/changes.xml

Added: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1.html
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1.html?rev=1620188&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1.html (added)
+++ jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1.html Sun Aug 24 21:09:04 2014
@@ -0,0 +1,51 @@
+<HTML>
+<head>
+<!--[if IE 7]>
+<link rel="stylesheet" type="text/css" href="fileForIE7.css">
+<![endif]-->
+<!--[if IE 8]>
+<link rel="stylesheet" type="text/css" href="fileForIE8.css">
+<![endif]-->
+</head>
+<body background="images/body&amp;soul.gif">
+<table background="images/table.gif">
+<tr style="background url('images/tr.gif')">
+<td background="images/td.gif"><img name="a" src="images/image-a.gif" align="top"></td>
+</tr>
+</table>
+<img src="images/image-b.gif" name="b" align="top"/>
+<a href="somewhere"><img src="images/image-b.gif" name="b" align="top"/></a>
+<img align="top" name="c" src= "images/image-c.gif">
+<img name="d" align="top" src ="images/image-d.gif"/>
+<img
+  align="top"
+  name="e"
+  src =
+    "images/image-e.gif"
+>
+<img
+  align="top"
+  Name="F"
+  sRc = "images/sub/image-f.gif"
+/>
+<input name="a" src="images/image-a2.gif" type="image"/>
+<input src="images/image-b2.gif" name="b" type="image">
+<input type= "image" name="c" src= "images/sub/image-c2.gif"/>
+<input name="d" type ="image" src ="images/image-d2.gif">
+<input name="d2" type ="image" src ="images/image-d2.gif">
+<input name="d3" type ="imagex" src ="images/image-d2.gif">
+<input
+  type =
+    "image"
+  name="e"
+  src =
+    "images/image-e2.gif"
+/>
+<input
+  type = "image"
+  Name="F"
+  sRc = "images/image-f2.gif"
+>
+
+</body>
+</html>

Propchange: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1.html
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_FF.all
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_FF.all?rev=1620188&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_FF.all (added)
+++ jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_FF.all Sun Aug 24 21:09:04 2014
@@ -0,0 +1,18 @@
+http://localhost/mydir/images/body&soul.gif
+http://localhost/mydir/images/table.gif
+http://localhost/mydir/images/tr.gif
+http://localhost/mydir/images/td.gif
+http://localhost/mydir/images/image-a.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-c.gif
+http://localhost/mydir/images/image-d.gif
+http://localhost/mydir/images/image-e.gif
+http://localhost/mydir/images/sub/image-f.gif
+http://localhost/mydir/images/image-a2.gif
+http://localhost/mydir/images/image-b2.gif
+http://localhost/mydir/images/sub/image-c2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-e2.gif
+http://localhost/mydir/images/image-f2.gif
\ No newline at end of file

Added: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_IE6.all
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_IE6.all?rev=1620188&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_IE6.all (added)
+++ jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_IE6.all Sun Aug 24 21:09:04 2014
@@ -0,0 +1,18 @@
+http://localhost/mydir/images/body&soul.gif
+http://localhost/mydir/images/table.gif
+http://localhost/mydir/images/tr.gif
+http://localhost/mydir/images/td.gif
+http://localhost/mydir/images/image-a.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-c.gif
+http://localhost/mydir/images/image-d.gif
+http://localhost/mydir/images/image-e.gif
+http://localhost/mydir/images/sub/image-f.gif
+http://localhost/mydir/images/image-a2.gif
+http://localhost/mydir/images/image-b2.gif
+http://localhost/mydir/images/sub/image-c2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-e2.gif
+http://localhost/mydir/images/image-f2.gif
\ No newline at end of file

Added: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_IE7.all
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_IE7.all?rev=1620188&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_IE7.all (added)
+++ jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_IE7.all Sun Aug 24 21:09:04 2014
@@ -0,0 +1,19 @@
+http://localhost/mydir/fileForIE7.css
+http://localhost/mydir/images/body&soul.gif
+http://localhost/mydir/images/table.gif
+http://localhost/mydir/images/tr.gif
+http://localhost/mydir/images/td.gif
+http://localhost/mydir/images/image-a.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-c.gif
+http://localhost/mydir/images/image-d.gif
+http://localhost/mydir/images/image-e.gif
+http://localhost/mydir/images/sub/image-f.gif
+http://localhost/mydir/images/image-a2.gif
+http://localhost/mydir/images/image-b2.gif
+http://localhost/mydir/images/sub/image-c2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-e2.gif
+http://localhost/mydir/images/image-f2.gif
\ No newline at end of file

Added: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_IE8.all
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_IE8.all?rev=1620188&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_IE8.all (added)
+++ jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional1_IE8.all Sun Aug 24 21:09:04 2014
@@ -0,0 +1,19 @@
+http://localhost/mydir/fileForIE8.css
+http://localhost/mydir/images/body&soul.gif
+http://localhost/mydir/images/table.gif
+http://localhost/mydir/images/tr.gif
+http://localhost/mydir/images/td.gif
+http://localhost/mydir/images/image-a.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-c.gif
+http://localhost/mydir/images/image-d.gif
+http://localhost/mydir/images/image-e.gif
+http://localhost/mydir/images/sub/image-f.gif
+http://localhost/mydir/images/image-a2.gif
+http://localhost/mydir/images/image-b2.gif
+http://localhost/mydir/images/sub/image-c2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-e2.gif
+http://localhost/mydir/images/image-f2.gif
\ No newline at end of file

Added: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2.html
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2.html?rev=1620188&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2.html (added)
+++ jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2.html Sun Aug 24 21:09:04 2014
@@ -0,0 +1,54 @@
+<HTML>
+<head>
+<!--[if gt IE 6]>
+    <!--[if lte IE 8]>
+        <!--[if IE 7]>
+            <link rel="stylesheet" type="text/css" href="fileForIE7.css">
+        <![endif]-->
+        <link rel="stylesheet" type="text/css" href="fileForIE7or8.css">
+    <![endif]-->
+    <link rel="stylesheet" type="text/css" href="fileForIE7or8or9.css">
+<![endif]-->
+</head>
+<body background="images/body&amp;soul.gif">
+<table background="images/table.gif">
+<tr style="background url('images/tr.gif')">
+<td background="images/td.gif"><img name="a" src="images/image-a.gif" align="top"></td>
+</tr>
+</table>
+<img src="images/image-b.gif" name="b" align="top"/>
+<a href="somewhere"><img src="images/image-b.gif" name="b" align="top"/></a>
+<img align="top" name="c" src= "images/image-c.gif">
+<img name="d" align="top" src ="images/image-d.gif"/>
+<img
+  align="top"
+  name="e"
+  src =
+    "images/image-e.gif"
+>
+<img
+  align="top"
+  Name="F"
+  sRc = "images/sub/image-f.gif"
+/>
+<input name="a" src="images/image-a2.gif" type="image"/>
+<input src="images/image-b2.gif" name="b" type="image">
+<input type= "image" name="c" src= "images/sub/image-c2.gif"/>
+<input name="d" type ="image" src ="images/image-d2.gif">
+<input name="d2" type ="image" src ="images/image-d2.gif">
+<input name="d3" type ="imagex" src ="images/image-d2.gif">
+<input
+  type =
+    "image"
+  name="e"
+  src =
+    "images/image-e2.gif"
+/>
+<input
+  type = "image"
+  Name="F"
+  sRc = "images/image-f2.gif"
+>
+
+</body>
+</html>

Propchange: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2.html
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_FF.all
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_FF.all?rev=1620188&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_FF.all (added)
+++ jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_FF.all Sun Aug 24 21:09:04 2014
@@ -0,0 +1,20 @@
+http://localhost/mydir/fileForIE7or8.css
+http://localhost/mydir/fileForIE7or8or9.css
+http://localhost/mydir/images/body&soul.gif
+http://localhost/mydir/images/table.gif
+http://localhost/mydir/images/tr.gif
+http://localhost/mydir/images/td.gif
+http://localhost/mydir/images/image-a.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-c.gif
+http://localhost/mydir/images/image-d.gif
+http://localhost/mydir/images/image-e.gif
+http://localhost/mydir/images/sub/image-f.gif
+http://localhost/mydir/images/image-a2.gif
+http://localhost/mydir/images/image-b2.gif
+http://localhost/mydir/images/sub/image-c2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-e2.gif
+http://localhost/mydir/images/image-f2.gif
\ No newline at end of file

Added: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_IE7.all
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_IE7.all?rev=1620188&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_IE7.all (added)
+++ jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_IE7.all Sun Aug 24 21:09:04 2014
@@ -0,0 +1,21 @@
+http://localhost/mydir/fileForIE7.css
+http://localhost/mydir/fileForIE7or8.css
+http://localhost/mydir/fileForIE7or8or9.css
+http://localhost/mydir/images/body&soul.gif
+http://localhost/mydir/images/table.gif
+http://localhost/mydir/images/tr.gif
+http://localhost/mydir/images/td.gif
+http://localhost/mydir/images/image-a.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-c.gif
+http://localhost/mydir/images/image-d.gif
+http://localhost/mydir/images/image-e.gif
+http://localhost/mydir/images/sub/image-f.gif
+http://localhost/mydir/images/image-a2.gif
+http://localhost/mydir/images/image-b2.gif
+http://localhost/mydir/images/sub/image-c2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-e2.gif
+http://localhost/mydir/images/image-f2.gif
\ No newline at end of file

Added: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_IE8.all
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_IE8.all?rev=1620188&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_IE8.all (added)
+++ jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_IE8.all Sun Aug 24 21:09:04 2014
@@ -0,0 +1,20 @@
+http://localhost/mydir/fileForIE7or8.css
+http://localhost/mydir/fileForIE7or8or9.css
+http://localhost/mydir/images/body&soul.gif
+http://localhost/mydir/images/table.gif
+http://localhost/mydir/images/tr.gif
+http://localhost/mydir/images/td.gif
+http://localhost/mydir/images/image-a.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-c.gif
+http://localhost/mydir/images/image-d.gif
+http://localhost/mydir/images/image-e.gif
+http://localhost/mydir/images/sub/image-f.gif
+http://localhost/mydir/images/image-a2.gif
+http://localhost/mydir/images/image-b2.gif
+http://localhost/mydir/images/sub/image-c2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-e2.gif
+http://localhost/mydir/images/image-f2.gif
\ No newline at end of file

Added: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_IE9.all
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_IE9.all?rev=1620188&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_IE9.all (added)
+++ jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional2_IE9.all Sun Aug 24 21:09:04 2014
@@ -0,0 +1,19 @@
+http://localhost/mydir/fileForIE7or8or9.css
+http://localhost/mydir/images/body&soul.gif
+http://localhost/mydir/images/table.gif
+http://localhost/mydir/images/tr.gif
+http://localhost/mydir/images/td.gif
+http://localhost/mydir/images/image-a.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-c.gif
+http://localhost/mydir/images/image-d.gif
+http://localhost/mydir/images/image-e.gif
+http://localhost/mydir/images/sub/image-f.gif
+http://localhost/mydir/images/image-a2.gif
+http://localhost/mydir/images/image-b2.gif
+http://localhost/mydir/images/sub/image-c2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-e2.gif
+http://localhost/mydir/images/image-f2.gif
\ No newline at end of file

Added: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3.html
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3.html?rev=1620188&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3.html (added)
+++ jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3.html Sun Aug 24 21:09:04 2014
@@ -0,0 +1,50 @@
+<HTML>
+<head>
+<!--[if gt IE 5]>
+    <![if lt IE 6]>
+        <link rel="stylesheet" type="text/css" href="fileForIE55.css">
+    <![endif]>
+<![endif]-->
+</head>
+<body background="images/body&amp;soul.gif">
+<table background="images/table.gif">
+<tr style="background url('images/tr.gif')">
+<td background="images/td.gif"><img name="a" src="images/image-a.gif" align="top"></td>
+</tr>
+</table>
+<img src="images/image-b.gif" name="b" align="top"/>
+<a href="somewhere"><img src="images/image-b.gif" name="b" align="top"/></a>
+<img align="top" name="c" src= "images/image-c.gif">
+<img name="d" align="top" src ="images/image-d.gif"/>
+<img
+  align="top"
+  name="e"
+  src =
+    "images/image-e.gif"
+>
+<img
+  align="top"
+  Name="F"
+  sRc = "images/sub/image-f.gif"
+/>
+<input name="a" src="images/image-a2.gif" type="image"/>
+<input src="images/image-b2.gif" name="b" type="image">
+<input type= "image" name="c" src= "images/sub/image-c2.gif"/>
+<input name="d" type ="image" src ="images/image-d2.gif">
+<input name="d2" type ="image" src ="images/image-d2.gif">
+<input name="d3" type ="imagex" src ="images/image-d2.gif">
+<input
+  type =
+    "image"
+  name="e"
+  src =
+    "images/image-e2.gif"
+/>
+<input
+  type = "image"
+  Name="F"
+  sRc = "images/image-f2.gif"
+>
+
+</body>
+</html>

Propchange: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3.html
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_FF.all
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_FF.all?rev=1620188&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_FF.all (added)
+++ jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_FF.all Sun Aug 24 21:09:04 2014
@@ -0,0 +1,18 @@
+http://localhost/mydir/images/body&soul.gif
+http://localhost/mydir/images/table.gif
+http://localhost/mydir/images/tr.gif
+http://localhost/mydir/images/td.gif
+http://localhost/mydir/images/image-a.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-c.gif
+http://localhost/mydir/images/image-d.gif
+http://localhost/mydir/images/image-e.gif
+http://localhost/mydir/images/sub/image-f.gif
+http://localhost/mydir/images/image-a2.gif
+http://localhost/mydir/images/image-b2.gif
+http://localhost/mydir/images/sub/image-c2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-e2.gif
+http://localhost/mydir/images/image-f2.gif
\ No newline at end of file

Added: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_IE10.all
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_IE10.all?rev=1620188&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_IE10.all (added)
+++ jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_IE10.all Sun Aug 24 21:09:04 2014
@@ -0,0 +1,18 @@
+http://localhost/mydir/images/body&soul.gif
+http://localhost/mydir/images/table.gif
+http://localhost/mydir/images/tr.gif
+http://localhost/mydir/images/td.gif
+http://localhost/mydir/images/image-a.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-c.gif
+http://localhost/mydir/images/image-d.gif
+http://localhost/mydir/images/image-e.gif
+http://localhost/mydir/images/sub/image-f.gif
+http://localhost/mydir/images/image-a2.gif
+http://localhost/mydir/images/image-b2.gif
+http://localhost/mydir/images/sub/image-c2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-e2.gif
+http://localhost/mydir/images/image-f2.gif
\ No newline at end of file

Added: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_IE55.all
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_IE55.all?rev=1620188&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_IE55.all (added)
+++ jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_IE55.all Sun Aug 24 21:09:04 2014
@@ -0,0 +1,19 @@
+http://localhost/mydir/fileForIE55.css
+http://localhost/mydir/images/body&soul.gif
+http://localhost/mydir/images/table.gif
+http://localhost/mydir/images/tr.gif
+http://localhost/mydir/images/td.gif
+http://localhost/mydir/images/image-a.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-c.gif
+http://localhost/mydir/images/image-d.gif
+http://localhost/mydir/images/image-e.gif
+http://localhost/mydir/images/sub/image-f.gif
+http://localhost/mydir/images/image-a2.gif
+http://localhost/mydir/images/image-b2.gif
+http://localhost/mydir/images/sub/image-c2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-e2.gif
+http://localhost/mydir/images/image-f2.gif
\ No newline at end of file

Added: jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_IE6.all
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_IE6.all?rev=1620188&view=auto
==============================================================================
--- jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_IE6.all (added)
+++ jmeter/trunk/bin/testfiles/HTMLParserTestCaseWithConditional3_IE6.all Sun Aug 24 21:09:04 2014
@@ -0,0 +1,18 @@
+http://localhost/mydir/images/body&soul.gif
+http://localhost/mydir/images/table.gif
+http://localhost/mydir/images/tr.gif
+http://localhost/mydir/images/td.gif
+http://localhost/mydir/images/image-a.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-b.gif
+http://localhost/mydir/images/image-c.gif
+http://localhost/mydir/images/image-d.gif
+http://localhost/mydir/images/image-e.gif
+http://localhost/mydir/images/sub/image-f.gif
+http://localhost/mydir/images/image-a2.gif
+http://localhost/mydir/images/image-b2.gif
+http://localhost/mydir/images/sub/image-c2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-d2.gif
+http://localhost/mydir/images/image-e2.gif
+http://localhost/mydir/images/image-f2.gif
\ No newline at end of file

Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/HTMLParser.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/HTMLParser.java?rev=1620188&r1=1620187&r2=1620188&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/HTMLParser.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/HTMLParser.java Sun Aug 24 21:09:04 2014
@@ -18,12 +18,15 @@
 
 package org.apache.jmeter.protocol.http.parser;
 
+
 import java.net.URL;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.jmeter.util.JMeterUtils;
 import org.apache.jorphan.logging.LoggingManager;
@@ -61,6 +64,10 @@ public abstract class HTMLParser {
     protected static final String TAG_SCRIPT        = "script";// $NON-NLS-1$
     protected static final String STYLESHEET        = "stylesheet";// $NON-NLS-1$
 
+    protected static final String IE_UA             = "MSIE ([0-9]+.[0-9]+)";// $NON-NLS-1$
+    protected static final Pattern IE_UA_PATTERN    = Pattern.compile(IE_UA);
+    private   static final float IE_10                = 10.0f;
+
     // Cache of parsers - parsers must be re-usable
     private static final Map<String, HTMLParser> parsers = new ConcurrentHashMap<String, HTMLParser>(4);
 
@@ -121,6 +128,8 @@ public abstract class HTMLParser {
      * Malformed URLs can be reported to the caller by having the Iterator
      * return the corresponding RL String. Overall problems parsing the html
      * should be reported by throwing an HTMLParseException.
+     * @param userAgent
+     *            User Agent
      *
      * @param html
      *            HTML code
@@ -129,7 +138,7 @@ public abstract class HTMLParser {
      * @param encoding Charset
      * @return an Iterator for the resource URLs
      */
-    public Iterator<URL> getEmbeddedResourceURLs(byte[] html, URL baseUrl, String encoding) throws HTMLParseException {
+    public Iterator<URL> getEmbeddedResourceURLs(String userAgent, byte[] html, URL baseUrl, String encoding) throws HTMLParseException {
         // The Set is used to ignore duplicated binary files.
         // Using a LinkedHashSet to avoid unnecessary overhead in iterating
         // the elements in the set later on. As a side-effect, this will keep
@@ -137,7 +146,7 @@ public abstract class HTMLParser {
         // behaviour.
 
         Collection<URLString> col = new LinkedHashSet<URLString>();
-        return getEmbeddedResourceURLs(html, baseUrl, new URLCollection(col),encoding);
+        return getEmbeddedResourceURLs(userAgent, html, baseUrl, new URLCollection(col),encoding);
 
         // An additional note on using HashSets to store URLs: I just
         // discovered that obtaining the hashCode of a java.net.URL implies
@@ -167,6 +176,8 @@ public abstract class HTMLParser {
      * N.B. The Iterator returns URLs, but the Collection will contain objects
      * of class URLString.
      *
+     * @param userAgent
+     *            User Agent
      * @param html
      *            HTML code
      * @param baseUrl
@@ -176,7 +187,7 @@ public abstract class HTMLParser {
      * @param encoding Charset
      * @return an Iterator for the resource URLs
      */
-    public abstract Iterator<URL> getEmbeddedResourceURLs(byte[] html, URL baseUrl, URLCollection coll, String encoding)
+    public abstract Iterator<URL> getEmbeddedResourceURLs(String userAgent, byte[] html, URL baseUrl, URLCollection coll, String encoding)
             throws HTMLParseException;
 
     /**
@@ -187,6 +198,8 @@ public abstract class HTMLParser {
      * N.B. The Iterator returns URLs, but the Collection will contain objects
      * of class URLString.
      *
+     * @param userAgent
+     *            User Agent
      * @param html
      *            HTML code
      * @param baseUrl
@@ -196,8 +209,8 @@ public abstract class HTMLParser {
      * @param encoding Charset
      * @return an Iterator for the resource URLs
      */
-    public Iterator<URL> getEmbeddedResourceURLs(byte[] html, URL baseUrl, Collection<URLString> coll, String encoding) throws HTMLParseException {
-        return getEmbeddedResourceURLs(html, baseUrl, new URLCollection(coll), encoding);
+    public Iterator<URL> getEmbeddedResourceURLs(String userAgent, byte[] html, URL baseUrl, Collection<URLString> coll, String encoding) throws HTMLParseException {
+        return getEmbeddedResourceURLs(userAgent, html, baseUrl, new URLCollection(coll), encoding);
     }
 
     /**
@@ -209,4 +222,41 @@ public abstract class HTMLParser {
     protected boolean isReusable() {
         return false;
     }
+    
+    /**
+     * 
+     * @param ieVersion Float IE version
+     * @return
+     */
+    protected final boolean isEnableConditionalComments(Float ieVersion) {
+        if(ieVersion == null) {
+            return false;
+        }
+        // Conditionnal comment have been dropped in IE10
+        // http://msdn.microsoft.com/en-us/library/ie/hh801214%28v=vs.85%29.aspx
+        return ieVersion.floatValue() < IE_10;
+    }
+    
+    /**
+     * 
+     * @param userAgent User Agent
+     * @return version null if not IE or the version after MSIE
+     */
+    protected Float extractIEVersion(String userAgent) {
+        Matcher matcher = IE_UA_PATTERN.matcher(userAgent);
+        String ieVersion = null;
+        while (matcher.find()) {
+            if (matcher.groupCount() > 0) {
+                ieVersion = matcher.group(1);
+            } else {
+                ieVersion = matcher.group();
+            }
+            break;
+        }
+        if(ieVersion != null) {
+            return Float.valueOf(ieVersion);
+        } else {
+            return null;
+        }
+    }
 }

Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/HtmlParserHTMLParser.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/HtmlParserHTMLParser.java?rev=1620188&r1=1620187&r2=1620188&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/HtmlParserHTMLParser.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/HtmlParserHTMLParser.java Sun Aug 24 21:09:04 2014
@@ -66,7 +66,7 @@ class HtmlParserHTMLParser extends HTMLP
      * {@inheritDoc}
      */
     @Override
-    public Iterator<URL> getEmbeddedResourceURLs(byte[] html, URL baseUrl, URLCollection urls, String encoding) throws HTMLParseException {
+    public Iterator<URL> getEmbeddedResourceURLs(String userAgent, byte[] html, URL baseUrl, URLCollection urls, String encoding) throws HTMLParseException {
 
         if (log.isDebugEnabled()) {
             log.debug("Parsing html of: " + baseUrl);

Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/JTidyHTMLParser.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/JTidyHTMLParser.java?rev=1620188&r1=1620187&r2=1620188&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/JTidyHTMLParser.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/JTidyHTMLParser.java Sun Aug 24 21:09:04 2014
@@ -54,7 +54,7 @@ class JTidyHTMLParser extends HTMLParser
      * {@inheritDoc}
      */
     @Override
-    public Iterator<URL> getEmbeddedResourceURLs(byte[] html, URL baseUrl, URLCollection urls, String encoding) throws HTMLParseException {
+    public Iterator<URL> getEmbeddedResourceURLs(String userAgent, byte[] html, URL baseUrl, URLCollection urls, String encoding) throws HTMLParseException {
         Document dom = null;
         try {
             dom = (Document) getDOM(html, encoding);

Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/JsoupBasedHtmlParser.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/JsoupBasedHtmlParser.java?rev=1620188&r1=1620187&r2=1620188&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/JsoupBasedHtmlParser.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/JsoupBasedHtmlParser.java Sun Aug 24 21:09:04 2014
@@ -139,9 +139,10 @@ public class JsoupBasedHtmlParser extend
     }
 
     @Override
-    public Iterator<URL> getEmbeddedResourceURLs(byte[] html, URL baseUrl,
+    public Iterator<URL> getEmbeddedResourceURLs(String userAgent, byte[] html, URL baseUrl,
             URLCollection coll, String encoding) throws HTMLParseException {
         try {
+            // TODO Handle conditional comments for IE
             String contents = new String(html,encoding);
             Document doc = Jsoup.parse(contents);
             JMeterNodeVisitor nodeVisitor = new JMeterNodeVisitor(new URLPointer(baseUrl), coll);

Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/LagartoBasedHtmlParser.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/LagartoBasedHtmlParser.java?rev=1620188&r1=1620187&r2=1620188&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/LagartoBasedHtmlParser.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/LagartoBasedHtmlParser.java Sun Aug 24 21:09:04 2014
@@ -22,11 +22,16 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Collections;
 import java.util.Iterator;
+import java.util.Stack;
 
 import jodd.lagarto.EmptyTagVisitor;
 import jodd.lagarto.LagartoException;
 import jodd.lagarto.LagartoParser;
+import jodd.lagarto.LagartoParserConfig;
 import jodd.lagarto.Tag;
+import jodd.lagarto.TagType;
+import jodd.lagarto.TagUtil;
+import jodd.lagarto.dom.HtmlCCommentExpressionMatcher;
 import jodd.log.LoggerFactory;
 import jodd.log.impl.Slf4jLoggerFactory;
 
@@ -56,23 +61,27 @@ public class LagartoBasedHtmlParser exte
     }
     
     private static final class JMeterTagVisitor extends EmptyTagVisitor {
-
+        private HtmlCCommentExpressionMatcher htmlCCommentExpressionMatcher;
         private URLCollection urls;
         private URLPointer baseUrl;
+        private Float ieVersion;
+        private Stack<Boolean> enabled = new Stack<Boolean>();
 
         /**
          * @param baseUrl 
          * @param urls 
+         * @param ieVersion 
          */
-        public JMeterTagVisitor(final URLPointer baseUrl, URLCollection urls) {
+        public JMeterTagVisitor(final URLPointer baseUrl, URLCollection urls, Float ieVersion) {
             this.urls = urls;
             this.baseUrl = baseUrl;
+            this.ieVersion = ieVersion;
         }
 
         private final void extractAttribute(Tag tag, String attributeName) {
-            String url = tag.getAttributeValue(attributeName, false);
+            CharSequence url = tag.getAttributeValue(attributeName);
             if (!StringUtils.isEmpty(url)) {
-                urls.addURL(url, baseUrl.url);
+                urls.addURL(url.toString(), baseUrl.url);
             }
         }
         /*
@@ -83,6 +92,9 @@ public class LagartoBasedHtmlParser exte
          */
         @Override
         public void script(Tag tag, CharSequence body) {
+            if (!enabled.peek()) {
+                return;
+            }
             extractAttribute(tag, ATT_SRC);
         }
 
@@ -93,67 +105,115 @@ public class LagartoBasedHtmlParser exte
          */
         @Override
         public void tag(Tag tag) {
-
-            String tagName = tag.getName().toLowerCase();
-            if (tagName.equals(TAG_BODY)) {
-                extractAttribute(tag, ATT_BACKGROUND);
-            } else if (tagName.equals(TAG_BASE)) {
-                String baseref = tag.getAttributeValue(ATT_HREF, false);
-                try {
-                    if (!StringUtils.isEmpty(baseref))// Bugzilla 30713
-                    {
-                        baseUrl.url = ConversionUtils.makeRelativeURL(baseUrl.url, baseref);
+            if (!enabled.peek()) {
+                return;
+            }
+            TagType tagType = tag.getType();
+            switch (tagType) {
+            case START:
+            case SELF_CLOSING:
+                if (tag.nameEquals(TAG_BODY)) {
+                    extractAttribute(tag, ATT_BACKGROUND);
+                } else if (tag.nameEquals(TAG_BASE)) {
+                    CharSequence baseref = tag.getAttributeValue(ATT_HREF);
+                    try {
+                        if (!StringUtils.isEmpty(baseref))// Bugzilla 30713
+                        {
+                            baseUrl.url = ConversionUtils.makeRelativeURL(baseUrl.url, baseref.toString());
+                        }
+                    } catch (MalformedURLException e1) {
+                        throw new RuntimeException(e1);
                     }
-                } catch (MalformedURLException e1) {
-                    throw new RuntimeException(e1);
-                }
-            } else if (tagName.equals(TAG_IMAGE)) {
-                extractAttribute(tag, ATT_SRC);
-            } else if (tagName.equals(TAG_APPLET)) {
-                extractAttribute(tag, ATT_CODE);
-            } else if (tagName.equals(TAG_OBJECT)) {
-                extractAttribute(tag, ATT_CODEBASE);                
-                extractAttribute(tag, ATT_DATA);                 
-            } else if (tagName.equals(TAG_INPUT)) {
-                // we check the input tag type for image
-                if (ATT_IS_IMAGE.equalsIgnoreCase(tag.getAttributeValue(ATT_TYPE, false))) {
-                    // then we need to download the binary
+                } else if (tag.nameEquals(TAG_IMAGE)) {
+                    extractAttribute(tag, ATT_SRC);
+                } else if (tag.nameEquals(TAG_APPLET)) {
+                    extractAttribute(tag, ATT_CODE);
+                } else if (tag.nameEquals(TAG_OBJECT)) {
+                    extractAttribute(tag, ATT_CODEBASE);                
+                    extractAttribute(tag, ATT_DATA);                 
+                } else if (tag.nameEquals(TAG_INPUT)) {
+                    // we check the input tag type for image
+                    if (TagUtil.equalsIgnoreCase(ATT_IS_IMAGE, tag.getAttributeValue(ATT_TYPE))) {
+                        // then we need to download the binary
+                        extractAttribute(tag, ATT_SRC);
+                    }
+                } else if (tag.nameEquals(TAG_SCRIPT)) {
                     extractAttribute(tag, ATT_SRC);
+                    // Bug 51750
+                } else if (tag.nameEquals(TAG_FRAME) || tag.nameEquals(TAG_IFRAME)) {
+                    extractAttribute(tag, ATT_SRC);
+                } else if (tag.nameEquals(TAG_EMBED)) {
+                    extractAttribute(tag, ATT_SRC);
+                } else if (tag.nameEquals(TAG_BGSOUND)){
+                    extractAttribute(tag, ATT_SRC);
+                } else if (tag.nameEquals(TAG_LINK)) {
+                    CharSequence relAttribute = tag.getAttributeValue(ATT_REL);
+                    // Putting the string first means it works even if the attribute is null
+                    if (TagUtil.equalsIgnoreCase(STYLESHEET,relAttribute)) {
+                        extractAttribute(tag, ATT_HREF);
+                    }
+                } else {
+                    extractAttribute(tag, ATT_BACKGROUND);
                 }
-            } else if (tagName.equals(TAG_SCRIPT)) {
-                extractAttribute(tag, ATT_SRC);
-                // Bug 51750
-            } else if (tagName.equals(TAG_FRAME) || tagName.equals(TAG_IFRAME)) {
-                extractAttribute(tag, ATT_SRC);
-            } else if (tagName.equals(TAG_EMBED)) {
-                extractAttribute(tag, ATT_SRC);
-            } else if (tagName.equals(TAG_BGSOUND)){
-                extractAttribute(tag, ATT_SRC);
-            } else if (tagName.equals(TAG_LINK)) {
-                // Putting the string first means it works even if the attribute is null
-                if (STYLESHEET.equalsIgnoreCase(tag.getAttributeValue(ATT_REL, false))) {
-                    extractAttribute(tag, ATT_HREF);
+    
+    
+                // Now look for URLs in the STYLE attribute
+                CharSequence styleTagStr = tag.getAttributeValue(ATT_STYLE);
+                if(!StringUtils.isEmpty(styleTagStr)) {
+                    HtmlParsingUtils.extractStyleURLs(baseUrl.url, urls, styleTagStr.toString());
                 }
-            } else {
-                extractAttribute(tag, ATT_BACKGROUND);
+                break;
+            case END:
+                break;
             }
+        }
 
-
-            // Now look for URLs in the STYLE attribute
-            String styleTagStr = tag.getAttributeValue(ATT_STYLE, false);
-            if(styleTagStr != null) {
-                HtmlParsingUtils.extractStyleURLs(baseUrl.url, urls, styleTagStr);
+        /* (non-Javadoc)
+         * @see jodd.lagarto.EmptyTagVisitor#condComment(java.lang.CharSequence, boolean, boolean, boolean)
+         */
+        @Override
+        public void condComment(CharSequence expression, boolean isStartingTag,
+                boolean isHidden, boolean isHiddenEndTag) {
+            // See http://css-tricks.com/how-to-create-an-ie-only-stylesheet/
+            if(!isStartingTag) {
+                enabled.pop();
+            } else {
+                if (htmlCCommentExpressionMatcher == null) {
+                    htmlCCommentExpressionMatcher = new HtmlCCommentExpressionMatcher();
+                }
+                String expressionString = expression.toString().trim();
+                enabled.push(Boolean.valueOf(htmlCCommentExpressionMatcher.match(ieVersion.floatValue(),
+                        expressionString)));                
             }
         }
+
+        /* (non-Javadoc)
+         * @see jodd.lagarto.EmptyTagVisitor#start()
+         */
+        @Override
+        public void start() {
+            super.start();
+            enabled.clear();
+            enabled.push(Boolean.TRUE);
+        }
     }
 
     @Override
-    public Iterator<URL> getEmbeddedResourceURLs(byte[] html, URL baseUrl,
+    public Iterator<URL> getEmbeddedResourceURLs(String userAgent, byte[] html, URL baseUrl,
             URLCollection coll, String encoding) throws HTMLParseException {
         try {
+            Float ieVersion = extractIEVersion(userAgent);
+            
             String contents = new String(html,encoding); 
-            LagartoParser lagartoParser = new LagartoParser(contents);
-            JMeterTagVisitor tagVisitor = new JMeterTagVisitor(new URLPointer(baseUrl), coll);
+            // As per Jodd javadocs, emitStrings should be false for visitor for better performances
+            LagartoParser lagartoParser = new LagartoParser(contents, false);
+            LagartoParserConfig<LagartoParserConfig> config = new LagartoParserConfig<LagartoParserConfig>();
+            config.setCaseSensitive(false);
+            // Conditional comments only apply for IE < 10
+            config.setEnableConditionalComments(isEnableConditionalComments(ieVersion));
+            
+            lagartoParser.setConfig(config);
+            JMeterTagVisitor tagVisitor = new JMeterTagVisitor(new URLPointer(baseUrl), coll, ieVersion);
             lagartoParser.parse(tagVisitor);
             return coll.iterator();
         } catch (LagartoException e) {
@@ -167,6 +227,10 @@ public class LagartoBasedHtmlParser exte
         }
     }
 
+    
+
+
+
     /* (non-Javadoc)
      * @see org.apache.jmeter.protocol.http.parser.HTMLParser#isReusable()
      */

Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/RegexpHTMLParser.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/RegexpHTMLParser.java?rev=1620188&r1=1620187&r2=1620188&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/RegexpHTMLParser.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/parser/RegexpHTMLParser.java Sun Aug 24 21:09:04 2014
@@ -144,7 +144,7 @@ class RegexpHTMLParser extends HTMLParse
      * @throws HTMLParseException 
      */
     @Override
-    public Iterator<URL> getEmbeddedResourceURLs(byte[] html, URL baseUrl, URLCollection urls, String encoding) throws HTMLParseException {
+    public Iterator<URL> getEmbeddedResourceURLs(String userAgent, byte[] html, URL baseUrl, URLCollection urls, String encoding) throws HTMLParseException {
         Pattern pattern= null;
         Perl5Matcher matcher = null;
         try {

Modified: jmeter/trunk/test/src/org/apache/jmeter/protocol/http/parser/TestHTMLParser.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/apache/jmeter/protocol/http/parser/TestHTMLParser.java?rev=1620188&r1=1620187&r2=1620188&view=diff
==============================================================================
--- jmeter/trunk/test/src/org/apache/jmeter/protocol/http/parser/TestHTMLParser.java (original)
+++ jmeter/trunk/test/src/org/apache/jmeter/protocol/http/parser/TestHTMLParser.java Sun Aug 24 21:09:04 2014
@@ -44,6 +44,15 @@ import junit.framework.TestSuite;
 public class TestHTMLParser extends JMeterTestCase {
     private static final Logger log = LoggingManager.getLoggerForClass();
 
+    private static final String DEFAULT_UA  = "Apache-HttpClient/4.2.6";
+    private static final String UA_FF       = "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0";
+    private static final String UA_IE55     = "Mozilla/4.0 (compatible;MSIE 5.5; Windows 98)";
+    private static final String UA_IE6      = "Mozilla/5.0 (Windows; U; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";
+    private static final String UA_IE7      = "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)";
+    private static final String UA_IE8      = "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)";
+    private static final String UA_IE9      = "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))";
+    private static final String UA_IE10     = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)";
+
     public TestHTMLParser(String arg0) {
         super(arg0);
     }
@@ -51,6 +60,7 @@ public class TestHTMLParser extends JMet
 
         private int testNumber = 0;
 
+
         public TestHTMLParser(String name, int test) {
             super(name);
             testNumber = test;
@@ -83,31 +93,49 @@ public class TestHTMLParser extends JMet
 
             private String expectedList;
 
+            public String userAgent;
+
             /**
              * 
              * @param htmlFileName HTML File with content
              * @param baseUrl Base URL
              * @param expectedSet Set of expected URLs
              * @param expectedList List of expected URLs
+             * @param userAgent User Agent
              */
             private TestData(String htmlFileName, String baseUrl, String expectedSet, String expectedList) {
+                this(htmlFileName, baseUrl, expectedList, expectedList, DEFAULT_UA);
+            }
+            /**
+             * 
+             * @param htmlFileName HTML File with content
+             * @param baseUrl Base URL
+             * @param expectedSet Set of expected URLs
+             * @param expectedList List of expected URLs
+             * @param userAgent User Agent
+             */
+            private TestData(String htmlFileName, String baseUrl, String expectedSet, String expectedList, String userAgent) {
                 this.fileName = htmlFileName;
                 this.baseURL = baseUrl;
                 this.expectedSet = expectedSet;
                 this.expectedList = expectedList;
+                this.userAgent = userAgent;
             }
 
 //            private TestData(String f, String b, String s) {
 //                this(f, b, s, null);
 //            }
         }
-
+        
+        private static final String DEFAULT_JMETER_PARSER = 
+                "org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser";
+        
         // List of parsers to test. Should probably be derived automatically
         private static final String[] PARSERS = { 
             "org.apache.jmeter.protocol.http.parser.HtmlParserHTMLParser",
             "org.apache.jmeter.protocol.http.parser.JTidyHTMLParser",
             "org.apache.jmeter.protocol.http.parser.RegexpHTMLParser",
-            "org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser",
+            DEFAULT_JMETER_PARSER,
             "org.apache.jmeter.protocol.http.parser.JsoupBasedHtmlParser"
             };
 
@@ -151,6 +179,78 @@ public class TestHTMLParser extends JMet
                         "testfiles/HTMLParserTestFile_2.all"),
                          };
 
+
+        private static final TestData[] SPECIFIC_PARSER_TESTS = new TestData[] {
+            new TestData("testfiles/HTMLParserTestCaseWithConditional1.html",
+                    "http://localhost/mydir/myfile.html",
+                    null,
+                    "testfiles/HTMLParserTestCaseWithConditional1_FF.all",
+                    UA_FF),
+            new TestData("testfiles/HTMLParserTestCaseWithConditional1.html",
+                    "http://localhost/mydir/myfile.html",
+                    null,
+                    "testfiles/HTMLParserTestCaseWithConditional1_IE6.all",
+                    UA_IE6),
+            new TestData("testfiles/HTMLParserTestCaseWithConditional1.html",
+                    "http://localhost/mydir/myfile.html",
+                    null,
+                    "testfiles/HTMLParserTestCaseWithConditional1_IE7.all",
+                    UA_IE7),
+            new TestData("testfiles/HTMLParserTestCaseWithConditional1.html",
+                    "http://localhost/mydir/myfile.html",
+                    null,
+                    "testfiles/HTMLParserTestCaseWithConditional1_IE8.all",
+                    UA_IE8),
+            new TestData("testfiles/HTMLParserTestCaseWithConditional1.html",
+                    "http://localhost/mydir/myfile.html",
+                    null,
+                    "testfiles/HTMLParserTestCaseWithConditional1_IE8.all",
+                    UA_IE8),
+
+            // FF gets mixed up by nested comments
+            new TestData("testfiles/HTMLParserTestCaseWithConditional2.html",
+                    "http://localhost/mydir/myfile.html",
+                    null,
+                    "testfiles/HTMLParserTestCaseWithConditional2_FF.all",
+                    UA_FF),
+
+            new TestData("testfiles/HTMLParserTestCaseWithConditional2.html",
+                    "http://localhost/mydir/myfile.html",
+                    null,
+                    "testfiles/HTMLParserTestCaseWithConditional2_IE7.all",
+                    UA_IE7),
+            new TestData("testfiles/HTMLParserTestCaseWithConditional2.html",
+                    "http://localhost/mydir/myfile.html",
+                    null,
+                    "testfiles/HTMLParserTestCaseWithConditional2_IE8.all",
+                    UA_IE8),
+            new TestData("testfiles/HTMLParserTestCaseWithConditional2.html",
+                    "http://localhost/mydir/myfile.html",
+                    null,
+                    "testfiles/HTMLParserTestCaseWithConditional2_IE9.all",
+                    UA_IE9),
+            new TestData("testfiles/HTMLParserTestCaseWithConditional3.html",
+                    "http://localhost/mydir/myfile.html",
+                    null,
+                    "testfiles/HTMLParserTestCaseWithConditional3_FF.all",
+                    UA_FF),
+            new TestData("testfiles/HTMLParserTestCaseWithConditional3.html",
+                    "http://localhost/mydir/myfile.html",
+                    null,
+                    "testfiles/HTMLParserTestCaseWithConditional3_IE10.all",
+                    UA_IE10),
+            new TestData("testfiles/HTMLParserTestCaseWithConditional3.html",
+                    "http://localhost/mydir/myfile.html",
+                    null,
+                    "testfiles/HTMLParserTestCaseWithConditional3_IE55.all",
+                    UA_IE55),
+            new TestData("testfiles/HTMLParserTestCaseWithConditional3.html",
+                    "http://localhost/mydir/myfile.html",
+                    null,
+                    "testfiles/HTMLParserTestCaseWithConditional3_IE6.all",
+                    UA_IE6)        
+        };   
+
         public static junit.framework.Test suite() {
             TestSuite suite = new TestSuite("TestHTMLParser");
             suite.addTest(new TestHTMLParser("testDefaultParser"));
@@ -170,6 +270,14 @@ public class TestHTMLParser extends JMet
                 }
                 suite.addTest(ps);
             }
+            
+            TestSuite ps = new TestSuite(DEFAULT_JMETER_PARSER+"_conditional_comments");// Identify subtests
+            for (int j = 0; j < SPECIFIC_PARSER_TESTS.length; j++) {
+                TestSuite ts = new TestSuite(SPECIFIC_PARSER_TESTS[j].fileName);
+                ts.addTest(new TestHTMLParser("testSpecificParserList", DEFAULT_JMETER_PARSER, j));
+                ps.addTest(ts);
+            }
+            suite.addTest(ps);
             return suite;
         }
 
@@ -246,17 +354,25 @@ public class TestHTMLParser extends JMet
         public void testParserSet() throws Exception {
             HTMLParser p = HTMLParser.getParser(parserName);
             filetest(p, TESTS[testNumber].fileName, TESTS[testNumber].baseURL, TESTS[testNumber].expectedSet, null,
-                    false);
+                    false, TESTS[testNumber].userAgent);
         }
 
         public void testParserList() throws Exception {
             HTMLParser p = HTMLParser.getParser(parserName);
             filetest(p, TESTS[testNumber].fileName, TESTS[testNumber].baseURL, TESTS[testNumber].expectedList,
-                    new Vector<URLString>(), true);
+                    new Vector<URLString>(), true, TESTS[testNumber].userAgent);
+        }
+        
+        public void testSpecificParserList() throws Exception {
+            HTMLParser p = HTMLParser.getParser(parserName);
+            filetest(p, SPECIFIC_PARSER_TESTS[testNumber].fileName, SPECIFIC_PARSER_TESTS[testNumber].baseURL, SPECIFIC_PARSER_TESTS[testNumber].expectedList,
+                    new ArrayList<URLString>(), true, SPECIFIC_PARSER_TESTS[testNumber].userAgent);
         }
 
+
         private static void filetest(HTMLParser p, String file, String url, String resultFile, Collection<URLString> c,
-                boolean orderMatters) // Does the order matter?
+                boolean orderMatters, // Does the order matter?
+                String userAgent)
                 throws Exception {
             String parserName = p.getClass().getName().substring("org.apache.jmeter.protocol.http.parser.".length());
             String fname = file.substring(file.indexOf('/')+1);
@@ -273,9 +389,9 @@ public class TestHTMLParser extends JMet
             }
             Iterator<URL> result;
             if (c == null) {
-                result = p.getEmbeddedResourceURLs(buffer, new URL(url), System.getProperty("file.encoding"));
+                result = p.getEmbeddedResourceURLs(userAgent, buffer, new URL(url), System.getProperty("file.encoding"));
             } else {
-                result = p.getEmbeddedResourceURLs(buffer, new URL(url), c,System.getProperty("file.encoding"));
+                result = p.getEmbeddedResourceURLs(userAgent, buffer, new URL(url), c,System.getProperty("file.encoding"));
             }
             /*
              * TODO: Exact ordering is only required for some tests; change the
@@ -301,14 +417,14 @@ public class TestHTMLParser extends JMet
 
             while (expected.hasNext()) {
                 Object next = expected.next();
-                assertTrue(fname+"::"+parserName + "::Expecting another result " + next, result.hasNext());
+                assertTrue(userAgent+"::"+fname+"::"+parserName + "::Expecting another result " + next, result.hasNext());
                 try {
-                    assertEquals(fname+"::"+parserName + "(next)", next, result.next().toString());
+                    assertEquals(userAgent+"::"+fname+"::"+parserName + "(next)", next, result.next().toString());
                 } catch (ClassCastException e) {
-                    fail(fname+"::"+parserName + "::Expected URL, but got " + e.toString());
+                    fail(userAgent+"::"+fname+"::"+parserName + "::Expected URL, but got " + e.toString());
                 }
             }
-            assertFalse(fname+"::"+parserName + "::Should have reached the end of the results", result.hasNext());
+            assertFalse(userAgent+"::"+fname+"::"+parserName + "::Should have reached the end of the results", result.hasNext());
         }
 
         // Get expected results as a List

Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1620188&r1=1620187&r2=1620188&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml (original)
+++ jmeter/trunk/xdocs/changes.xml Sun Aug 24 21:09:04 2014
@@ -203,6 +203,7 @@ jmeter.gui.action.LookAndFeelCommand: Us
 <li><bugzilla>52013</bugzilla> - Test Script Recorder's Child View Results Tree does not take into account Test Script Recorder excluded/included URLs. Based on report and analysis of James Liang</li>
 <li><bugzilla>56119</bugzilla> - File uploads fail every other attempt using timers. Enable idle timeouts for servers that don't send Keep-Alive headers.</li>
 <li><bugzilla>56272</bugzilla> - MirrorServer should support query parameters for status and redirects</li>
+<li><bugzilla>56772</bugzilla> - Handle IE Conditional comments when parsing embedded resources</li>
 </ul>
 
 <h3>Other samplers</h3>