From: <mgu...@us...> - 2012-12-05 13:26:14
|
Revision: 7831 http://sourceforge.net/p/htmlunit/code/7831 Author: mguillem Date: 2012-12-05 13:26:10 +0000 (Wed, 05 Dec 2012) Log Message: ----------- Add BrowserVersion.clone() Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersion.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/PluginConfiguration.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/BrowserVersionTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2012-12-05 12:46:27 UTC (rev 7830) +++ trunk/htmlunit/src/changes/changes.xml 2012-12-05 13:26:10 UTC (rev 7831) @@ -8,6 +8,9 @@ <body> <release version="2.12" date="???" description="Bugfixes"> + <action type="add" dev="mguillem"> + Add BrowserVersion.clone(). + </action> <action type="fix" dev="asashour"> Fix a potential ConcurrentModificationException, on calling WebClient.getWebWindows(). </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersion.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersion.java 2012-12-05 12:46:27 UTC (rev 7830) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/BrowserVersion.java 2012-12-05 13:26:10 UTC (rev 7831) @@ -547,4 +547,32 @@ public String getNickname() { return nickname_; } + + /** + * Creates and return a copy of this object. Current instance and cloned + * object can be modified independently. + * @return a clone of this instance. + */ + @Override + protected BrowserVersion clone() { + final BrowserVersion clone = new BrowserVersion(getApplicationName(), getApplicationVersion(), + getUserAgent(), getBrowserVersionNumeric(), getNickname(), null); + + clone.setApplicationCodeName(getApplicationCodeName()); + clone.setApplicationMinorVersion(getApplicationMinorVersion()); + clone.setBrowserLanguage(getBrowserLanguage()); + clone.setCpuClass(getCpuClass()); + clone.setOnLine(isOnLine()); + clone.setPlatform(getPlatform()); + clone.setSystemLanguage(getSystemLanguage()); + clone.setUserLanguage(getUserLanguage()); + + for (final PluginConfiguration pluginConf : getPlugins()) { + clone.getPlugins().add(pluginConf.clone()); + } + + clone.features_.addAll(features_); + + return clone; + } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/PluginConfiguration.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/PluginConfiguration.java 2012-12-05 12:46:27 UTC (rev 7830) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/PluginConfiguration.java 2012-12-05 13:26:10 UTC (rev 7831) @@ -99,6 +99,19 @@ } /** + * Creates and return a copy of this object. Current instance and cloned + * object can be modified independently. + * @return a clone of this instance. + */ + @Override + public PluginConfiguration clone() { + final PluginConfiguration clone = new PluginConfiguration(getName(), getDescription(), getFilename()); + clone.getMimeTypes().addAll(getMimeTypes()); + + return clone; + } + + /** * Holds information about a single mime type associated with a plugin. */ public static class MimeType implements Serializable { Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/BrowserVersionTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/BrowserVersionTest.java 2012-12-05 12:46:27 UTC (rev 7830) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/BrowserVersionTest.java 2012-12-05 13:26:10 UTC (rev 7831) @@ -21,6 +21,7 @@ * * @version $Revision$ * @author Ahmed Ashour + * @author Marc Guillemot */ public class BrowserVersionTest extends SimpleWebTestCase { @@ -37,4 +38,18 @@ assertEquals(16.0f, BrowserVersion.CHROME_16.getBrowserVersionNumeric()); } + /** + * Test of {@link BrowserVersion#clone()}. + */ + @Test + public void testClone() { + final BrowserVersion ff = BrowserVersion.FIREFOX_3_6; + final BrowserVersion clone = ff.clone(); + + assertFalse(ff == clone); + assertEquals(ff, clone); + + clone.getPlugins().clear(); + assertFalse(ff.equals(clone)); + } } |