Index: pom.xml
===================================================================
--- pom.xml	(revision 18006)
+++ pom.xml	(working copy)
@@ -12,8 +12,8 @@
   <description>XWiki Platform - Core - Rendering - Macro - RSS Reader</description>
   <build>
     <plugins>
+	  <!-- Apply the Checkstyle configurations defined in the top level pom.xml file -->    	
       <plugin>
-        <!-- Apply the Checkstyle configurations defined in the top level pom.xml file -->
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-checkstyle-plugin</artifactId>
       </plugin>
@@ -23,6 +23,7 @@
         <configuration>
           <includes>
             <include>**/RenderingTests.java</include>
+            <include>**/ExceptionTests.java</include>
           </includes>
         </configuration>
       </plugin>
@@ -53,6 +54,11 @@
     </dependency>
     <dependency>
       <groupId>org.xwiki.platform</groupId>
+      <artifactId>xwiki-core-bridge</artifactId>
+      <version>${pom.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.xwiki.platform</groupId>
       <artifactId>xwiki-core-rendering-macro-html</artifactId>
       <version>${pom.version}</version>
       <scope>test</scope>
Index: src/main/java/org/xwiki/rendering/internal/macro/rss/RssFeedReader.java
===================================================================
--- src/main/java/org/xwiki/rendering/internal/macro/rss/RssFeedReader.java	(revision 0)
+++ src/main/java/org/xwiki/rendering/internal/macro/rss/RssFeedReader.java	(revision 0)
@@ -0,0 +1,125 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.xwiki.rendering.internal.macro.rss;
+
+import java.net.SocketTimeoutException;
+import java.net.URLConnection;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.xwiki.rendering.macro.MacroExecutionException;
+import org.xwiki.rendering.macro.rss.RssMacroParameters;
+
+import com.sun.syndication.feed.synd.SyndFeed;
+import com.sun.syndication.io.SyndFeedInput;
+import com.sun.syndication.io.XmlReader;
+
+/**
+ * Auxiliary class which takes care of extracting the data from a RSS feed and 
+ * providing it to the Rss macro.
+ * 
+ * @version $Id: $
+ * @since 1.9
+ */
+public class RssFeedReader 
+{
+    /**
+     * Unique ID for Class Serialization.
+     */
+    private static final long serialVersionUID = 1L;
+    
+    /**
+     * The actual feed from which the data needs to be read from.
+     */
+    private SyndFeed feed;
+
+    /**
+     * @param parameters the Rss macro's parameters needed for getting the data
+     * @throws MacroExecutionException in case the feed cannot be read
+     */
+    public RssFeedReader(RssMacroParameters parameters) throws MacroExecutionException 
+    {
+        if (StringUtils.isEmpty(parameters.getFeed())) {
+            throw new MacroExecutionException(RssMacro.PARAMETER_MISSING_ERROR);
+        }
+        
+        SyndFeedInput input = new SyndFeedInput();
+        
+        try {
+            synchronized (this) {
+                URLConnection connection = parameters.getFeedURL().openConnection();
+                connection.setConnectTimeout(getTimeoutSeconds() * 1000);
+                feed = input.build(new XmlReader(connection));
+            }
+        } catch (SocketTimeoutException ex) {
+            throw new MacroExecutionException(RssMacro.CONNECTION_TIMEOUT_ERROR + parameters.getFeedURL());
+        } catch (Exception ex) {
+            throw new MacroExecutionException("Error processing " 
+                + parameters.getFeedURL() + ": " + ex.getMessage(), ex);
+        }
+        if (feed == null) { 
+            throw new MacroExecutionException(RssMacro.INVALID_DOCUMENT_ERROR + parameters.getFeedURL());
+        }
+    }
+    
+    /**
+     * @return the maximum number of seconds to wait when inquiring the RSS feed provider.
+     */
+    protected static int getTimeoutSeconds() {
+        return 5;
+    }
+
+    /**
+     * @return the feed's image URL
+     */
+    public String getImageURL() {
+        return feed.getImage().getUrl();
+    }
+
+    /**
+     * @return whether the feed has an image or not
+     */
+    public boolean hasImage() {
+        return feed.getImage() != null;
+    }
+    
+    /**
+     * @return the feed's link
+     */
+    public String getLink() {
+        return feed.getLink();
+    }
+
+    /**
+     * @return the feed's title
+     */
+    public String getTitle() {
+        return feed.getTitle();
+    }
+
+    /**
+     * @return a list containing the feed's entries
+     */
+    public List getEntries()
+    {
+        return feed.getEntries();
+    }
+}
Index: src/main/java/org/xwiki/rendering/internal/macro/rss/RssMacro.java
===================================================================
--- src/main/java/org/xwiki/rendering/internal/macro/rss/RssMacro.java	(revision 18006)
+++ src/main/java/org/xwiki/rendering/internal/macro/rss/RssMacro.java	(working copy)
@@ -20,23 +20,22 @@
 
 package org.xwiki.rendering.internal.macro.rss;
 
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
 import com.sun.syndication.feed.synd.SyndEntry;
-import com.sun.syndication.feed.synd.SyndFeed;
-import com.sun.syndication.io.SyndFeedInput;
-import com.sun.syndication.io.XmlReader;
 
 import org.apache.commons.lang.StringUtils;
+import org.xwiki.bridge.SkinAccessBridge;
 import org.xwiki.rendering.block.Block;
+import org.xwiki.rendering.block.ImageBlock;
 import org.xwiki.rendering.block.LinkBlock;
 import org.xwiki.rendering.block.MacroBlock;
 import org.xwiki.rendering.block.ParagraphBlock;
 import org.xwiki.rendering.block.XMLBlock;
 import org.xwiki.rendering.listener.Link;
 import org.xwiki.rendering.listener.LinkType;
+import org.xwiki.rendering.listener.URLImage;
 import org.xwiki.rendering.listener.xml.XMLElement;
 import org.xwiki.rendering.macro.AbstractMacro;
 import org.xwiki.rendering.macro.Macro;
@@ -56,6 +55,21 @@
 public class RssMacro extends AbstractMacro<RssMacroParameters>
 {
     /**
+     * Predefined error message.
+     */
+    public static final String PARAMETER_MISSING_ERROR = "The required 'feed' parameter is missing.";
+
+    /**
+     * Predefined error message. It will be added the host's address when thrown.
+     */
+    public static final String CONNECTION_TIMEOUT_ERROR = "Connection timeout when trying to reach ";
+
+    /**
+     * Predefined error message. It will be added the host's address when thrown.
+     */
+    public static final String INVALID_DOCUMENT_ERROR = "No feed found at ";
+    
+    /**
      * The name of the CSS class attribute.
      */
     private static final String CLASS_ATTRIBUTE = "class";
@@ -70,6 +84,11 @@
      */
     protected Macro<BoxMacroParameters> boxMacro;
     
+    /**
+     * Injected by the Component Manager.
+     */
+    private SkinAccessBridge skinAccessBridge;
+    
     /** 
      * Needed to parse the ordinary text. 
      */
@@ -103,7 +122,7 @@
      * @param context the macro's transformation context
      * @throws MacroExecutionException if the content cannot be rendered
      */ 
-    private void renderEntries(Block parentBlock, SyndFeed feed, RssMacroParameters parameters, 
+    private void renderEntries(Block parentBlock, RssFeedReader feed, RssMacroParameters parameters, 
         MacroTransformationContext context) throws MacroExecutionException 
     {
         int maxElements = parameters.getCount();
@@ -122,9 +141,7 @@
             Block titleBlock = new LinkBlock(
                 getParserUtils().parseInlineNonWiki(entry.getTitle()), titleLink, true);
             ParagraphBlock paragraphTitleBlock = new ParagraphBlock(Collections.singletonList(titleBlock));
-            if (parameters.isCss()) {
-                paragraphTitleBlock.setParameter(CLASS_ATTRIBUTE, "rssitemtitle");
-            }
+            paragraphTitleBlock.setParameter(CLASS_ATTRIBUTE, "rssitemtitle");
             parentBlock.addChild(paragraphTitleBlock);
             
             if (parameters.isContent() && entry.getDescription() != null) {
@@ -138,10 +155,8 @@
                     entry.getDescription().getValue(), context.isInline());
 
                 XMLElement xmlElement = new XMLElement("div");
-                if (parameters.isCss()) {
-                    xmlElement.setAttribute(CLASS_ATTRIBUTE, "rssitemdescription");
-                }
-                parentBlock.addChild(new XMLBlock(Arrays.asList(html), xmlElement));
+                xmlElement.setAttribute(CLASS_ATTRIBUTE, "rssitemdescription");
+                parentBlock.addChild(new XMLBlock(Collections.singletonList(html), xmlElement));
             }
         }
     }
@@ -163,38 +178,22 @@
     public List<Block> execute(RssMacroParameters parameters, String content, MacroTransformationContext context)
         throws MacroExecutionException
     {
-        SyndFeedInput input = new SyndFeedInput();
-        SyndFeed feed = null;
-        try {
-            feed = input.build(new XmlReader(parameters.getFeedURL()));
-        } catch (Exception ex) {
-            throw new MacroExecutionException("Error processing " + parameters.getFeedURL() + ": " + ex.getMessage());
-        }
-        if (feed == null) { 
-            throw new MacroExecutionException("No feed found at " + parameters.getFeedURL());
-        }
+        RssFeedReader feed = new RssFeedReader(parameters);
         
         BoxMacroParameters boxParameters = new BoxMacroParameters();
-        boolean hasImage = parameters.isImage() && feed.getImage() != null;
-
-        if (parameters.isCss()) {
-            boxParameters.setCssClass("rssfeed");
-        }
-        
+        boolean hasImage = parameters.isImage() && feed.hasImage();
+        boxParameters.setCssClass("rssfeed");
         if (!StringUtils.isEmpty(parameters.getWidth())) {
             boxParameters.setWidth(parameters.getWidth());
         }
         
-        renderFeedOrEntryTitle(boxParameters, parameters.isCss(), "rsschanneltitle", feed.getTitle(), feed.getLink());
+        renderFeedOrEntryTitle(boxParameters, "rsschanneltitle", feed.getTitle(), feed.getLink());
 
         List<Block> result = null;
         if (hasImage) {
-            boxParameters.setImage(feed.getImage().getUrl());
-            result = boxMacro.execute(boxParameters, content, context);
-        } else {
-            result = boxMacro.execute(boxParameters, content, context);
-        }
-        
+            boxParameters.setImage(feed.getImageURL());
+        } 
+        result = boxMacro.execute(boxParameters, content, context);
         renderEntries(result.get(0), feed, parameters, context);
 
         return result;
@@ -203,13 +202,14 @@
     /**
      * Renders the RSS's title.
      * @param boxParameters the BoxParameters where the title will be fitted
-     * @param isCss whether CSS formatting should be applied
      * @param cssClass the CSS sheet
      * @param title the title's text
      * @param link the title's link (if there is one)
+     * @throws MacroExecutionException 
      */
-    private void renderFeedOrEntryTitle(BoxMacroParameters boxParameters, boolean isCss, 
-        String cssClass, String title, String link) {
+    private void renderFeedOrEntryTitle(BoxMacroParameters boxParameters, 
+        String cssClass, String title, String link) 
+    {
         List<Block> titleBlocks = null;
         
         if (link == null) {
@@ -218,13 +218,16 @@
             Link titleLink = new Link();
             titleLink.setReference(link);
             titleLink.setType(LinkType.URI);
+            String imagePath = skinAccessBridge.getSkinFile("icons/black-rss.png");
+            ImageBlock imageBlock = new ImageBlock(new URLImage(imagePath), false);
+            
             Block linkBlock = new LinkBlock(getParserUtils().parseInlineNonWiki(title), titleLink, true);
+            linkBlock.addChild(imageBlock);
+            
             titleBlocks = Collections.singletonList(linkBlock);
         }
         ParagraphBlock titleBlock = new ParagraphBlock(titleBlocks);
-        if (isCss) {
-            titleBlock.setParameter(CLASS_ATTRIBUTE, cssClass);
-        }
+        titleBlock.setParameter(CLASS_ATTRIBUTE, cssClass);
         
         boxParameters.setBlockTitle(Collections.singletonList(titleBlock));
     }
Index: src/main/java/org/xwiki/rendering/macro/rss/RssMacroParameters.java
===================================================================
--- src/main/java/org/xwiki/rendering/macro/rss/RssMacroParameters.java	(revision 18006)
+++ src/main/java/org/xwiki/rendering/macro/rss/RssMacroParameters.java	(working copy)
@@ -60,12 +60,6 @@
     private String width = StringUtils.EMPTY;
 
     /**
-     * If "true" then adds class id elements (rssitem, rssitemtitle, rssitemdescription, rsschanneltitle, etc) which you
-     * can style by modifying your skin's CSS file.
-     */
-    private boolean css = true;
-
-    /**
      * The RSS feed URL.
      */
     private URL feedURL;
@@ -125,23 +119,6 @@
     }
 
     /**
-     * @param css whether to add class id elements (rssitem, rssitemtitle, rssitemdescription, rsschanneltitle, etc).
-     */
-    @ParameterDescription("Specifies whether to add class id elements (rssitem, rssitemtitle, rssitemdescription etc).")
-    public void setCss(boolean css)
-    {
-        this.css = css;
-    }
-
-    /**
-     * @return whether to add class id elements (rssitem, rssitemtitle, rssitemdescription, rsschanneltitle, etc).
-     */
-    public boolean isCss()
-    {
-        return this.css;
-    }
-
-    /**
      * @param count the number of feed items to display.
      */
     @ParameterDescription("The maximum number of feed items to display on the page.")
Index: src/main/resources/META-INF/plexus/components.xml
===================================================================
--- src/main/resources/META-INF/plexus/components.xml	(revision 18006)
+++ src/main/resources/META-INF/plexus/components.xml	(working copy)
@@ -34,6 +34,11 @@
           <role>org.xwiki.rendering.macro.Macro</role>
           <role-hint>box</role-hint>
         </requirement>
+        <requirement>
+          <role>org.xwiki.bridge.SkinAccessBridge</role>
+          <role-hint>default</role-hint>
+          <field-name>skinAccessBridge</field-name>
+        </requirement>
       </requirements>
     </component>
   </components>
Index: src/test/java/org/xwiki/rendering/ExceptionTests.java
===================================================================
--- src/test/java/org/xwiki/rendering/ExceptionTests.java	(revision 0)
+++ src/test/java/org/xwiki/rendering/ExceptionTests.java	(revision 0)
@@ -0,0 +1,94 @@
+package org.xwiki.rendering;
+
+import java.net.MalformedURLException;
+
+import org.apache.commons.lang.StringUtils;
+import org.xwiki.rendering.internal.macro.rss.RssMacro;
+import org.xwiki.rendering.macro.Macro;
+import org.xwiki.rendering.macro.MacroExecutionException;
+import org.xwiki.rendering.macro.rss.RssMacroParameters;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit tests for {@link RssMacro}.
+ * 
+ * @version $Id: $
+ * @since 1.9
+ */
+public class ExceptionTests extends TestCase
+{
+    private Macro<RssMacroParameters> macro;
+    private RssMacroParameters parameters;
+    
+    public ExceptionTests(String name)
+    {
+        super(name);
+        macro = new RssMacro();
+        parameters = new RssMacroParameters();
+    }
+
+    /**
+     * Tests whether the macro throws the appropriate exception 
+     * in cases where the required 'feed' parameter is missing.
+     */
+    public final void testRequiredParameterMissing()
+    {
+        assertNotNull(macro);
+        assertNotNull(parameters);
+        if (StringUtils.isNotEmpty(parameters.getFeed())) {
+            parameters = new RssMacroParameters();
+        }
+        try {
+            macro.execute(parameters, null, null);
+        } catch (MacroExecutionException ex) {
+            assertTrue(RssMacro.PARAMETER_MISSING_ERROR.equals(ex.getMessage()));
+            return;
+        }
+        fail("No 'feed' parameter specified, the macro should throw an exception");
+    }
+    
+    /**
+     * Tests the macro's behavior when the server hosting the feeds doesn't respond.
+     * @throws MalformedURLException in case the provided feed's URL is invalid
+     */
+    public final void testConnectionTimeout() throws MalformedURLException
+    {
+        assertNotNull(macro);
+        assertNotNull(parameters);
+        
+        // We set the feed's URL to an unreachable address.
+        parameters.setFeed("http://22.22.22.22");
+        
+        try {
+            macro.execute(parameters, null, null);
+        } catch (MacroExecutionException ex) {
+            String errorMessage = ex.getMessage();
+            assertTrue(errorMessage.startsWith(RssMacro.CONNECTION_TIMEOUT_ERROR));
+            return;
+        }
+        fail("The macro should throw a 'Connection timeout exception'");
+    }
+
+    /**
+     * Tests the macro's behavior when the server hosting the feeds doesn't respond.
+     * @throws MalformedURLException in case the provided feed's URL is invalid
+     */
+    public final void testInvalidDocument() throws MalformedURLException
+    {
+        assertNotNull(macro);
+        assertNotNull(parameters);
+        
+        // We assume that there's no RSS feed at this address.
+        parameters.setFeed("http://www.xwiki.org");
+        
+        try {
+            macro.execute(parameters, null, null);
+        } catch (MacroExecutionException ex) {
+            assertTrue(ex.getCause() instanceof IllegalArgumentException); 
+            assertTrue("Invalid document".equals(ex.getCause().getMessage()));
+            return;
+        }
+        fail("The macro should throw an 'Ivalid document exception'");
+    }
+}
Index: src/test/java/org/xwiki/rendering/RenderingTests.java
===================================================================
--- src/test/java/org/xwiki/rendering/RenderingTests.java	(revision 18006)
+++ src/test/java/org/xwiki/rendering/RenderingTests.java	(working copy)
@@ -22,8 +22,8 @@
 import junit.framework.Test;
 import junit.framework.TestCase;
 
-import org.xwiki.rendering.scaffolding.RenderingPlexusTestSetup;
 import org.xwiki.rendering.scaffolding.RenderingTestSuite;
+import org.xwiki.rendering.scaffolding.RssRenderingPlexusTestSetup;
 
 /**
  * All Rendering integration tests defined in text files using a special format.
@@ -38,6 +38,6 @@
         RenderingTestSuite suite = new RenderingTestSuite("Test Rss Macro");
         suite.addTestsFromResource("macrorss1", true);
         suite.addTestsFromResource("macrorss2", true);
-        return new RenderingPlexusTestSetup(suite);
+        return new RssRenderingPlexusTestSetup(suite);
     }
 }
Index: src/test/java/org/xwiki/rendering/internal/MockSkinAccessBridge.java
===================================================================
--- src/test/java/org/xwiki/rendering/internal/MockSkinAccessBridge.java	(revision 0)
+++ src/test/java/org/xwiki/rendering/internal/MockSkinAccessBridge.java	(revision 0)
@@ -0,0 +1,59 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.rendering.internal;
+
+import org.xwiki.bridge.SkinAccessBridge;
+import org.xwiki.component.descriptor.ComponentDescriptor;
+import org.xwiki.component.descriptor.DefaultComponentDescriptor;
+
+/**
+ * Mock {@link SkinAccessBridge} implementation used for testing, since we don't want to pull any dependency on the
+ * Model/Skin/etc for the Rendering module's unit tests.
+ * 
+ * @version $Id: $
+ * @since 1.9
+ */
+public class MockSkinAccessBridge implements SkinAccessBridge
+{
+    /**
+     * Create and return a descriptor for this component.
+     * 
+     * @return the descriptor of the component.
+     */
+    public static ComponentDescriptor getComponentDescriptor()
+    {
+        DefaultComponentDescriptor componentDescriptor = new DefaultComponentDescriptor();
+
+        componentDescriptor.setRole(SkinAccessBridge.ROLE);
+        componentDescriptor.setRoleHint("default");
+        componentDescriptor.setImplementation(MockSkinAccessBridge.class.getName());
+
+        return componentDescriptor;
+    }
+
+    /**
+     * {@inheritDoc}
+     * @see org.xwiki.bridge.XWikiBridge#getSkinFile(String fileName)
+     */
+    public String getSkinFile(String fileName)
+    {
+        return "/xwiki/skins/albatross/icons/black-rss.png";
+    }
+}
Index: src/test/java/org/xwiki/rendering/macro/rss/TestRssMacro.java
===================================================================
--- src/test/java/org/xwiki/rendering/macro/rss/TestRssMacro.java	(revision 18006)
+++ src/test/java/org/xwiki/rendering/macro/rss/TestRssMacro.java	(working copy)
@@ -48,7 +48,6 @@
     {
         RssMacroParameters rssParameters = new RssMacroParameters();
         rssParameters.setContent(true);
-        rssParameters.setCss(true);
         rssParameters.setCount(2);
         rssParameters.setImage(true);
         
Index: src/test/java/org/xwiki/rendering/macro/rss/TestRssMacro2.java
===================================================================
--- src/test/java/org/xwiki/rendering/macro/rss/TestRssMacro2.java	(revision 18006)
+++ src/test/java/org/xwiki/rendering/macro/rss/TestRssMacro2.java	(working copy)
@@ -22,7 +22,6 @@
     {
         RssMacroParameters rssParameters = new RssMacroParameters();
         rssParameters.setContent(true);
-        rssParameters.setCss(true);
         rssParameters.setCount(1);
         rssParameters.setImage(false);
         
Index: src/test/java/org/xwiki/rendering/scaffolding/RssRenderingPlexusTestSetup.java
===================================================================
--- src/test/java/org/xwiki/rendering/scaffolding/RssRenderingPlexusTestSetup.java	(revision 0)
+++ src/test/java/org/xwiki/rendering/scaffolding/RssRenderingPlexusTestSetup.java	(revision 0)
@@ -0,0 +1,44 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.xwiki.rendering.scaffolding;
+
+import org.xwiki.rendering.internal.MockSkinAccessBridge;
+import org.xwiki.rendering.scaffolding.RenderingPlexusTestSetup;
+
+import junit.framework.TestSuite;
+
+/**
+ * @version $Id: $
+ * @since 1.9
+ */
+public class RssRenderingPlexusTestSetup extends RenderingPlexusTestSetup
+{
+    public RssRenderingPlexusTestSetup(TestSuite suite)
+    {
+        super(suite);
+    }
+
+    @Override
+    protected void setUp() throws Exception
+    {
+        super.setUp();
+        getComponentManager().registerComponentDescriptor(MockSkinAccessBridge.getComponentDescriptor());
+    }
+}
Index: src/test/resources/macrorss1.test
===================================================================
--- src/test/resources/macrorss1.test	(revision 18006)
+++ src/test/resources/macrorss1.test	(working copy)
@@ -5,7 +5,7 @@
 .#-----------------------------------------------------
 .expect|xhtml/1.0
 .#-----------------------------------------------------
-<!--startmacro:testrssmacro|-|feed="http://some.feed.com"|-|--><div class="box rssfeed"><!--startimage:http://www.w3schools.com/images/logo.gif--><img src="http://www.w3schools.com/images/logo.gif" class="wikimodel-freestanding" alt="http://www.w3schools.com/images/logo.gif"/><!--stopimage--><br/><p class="rsschanneltitle"><!--startwikilink:http://liftoff.msfc.nasa.gov/--><span class="wikiexternallink"><a class="wikimodel-freestanding" href="http://liftoff.msfc.nasa.gov/">Lift Off News</a></span><!--stopwikilink--></p><p class="rssitemtitle"><!--startwikilink:http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp--><span class="wikiexternallink"><a class="wikimodel-freestanding" href="http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp">Star City</a></span><!--stopwikilink--></p><div class="rssitemdescription"><p>How do Americans get ready to work with Russians aboard the International Space Station?</p></div><p class="rssitemtitle"><!--startwikilink:http://liftoff.msfc.nasa.gov/--><span class="wikiexternallink"><a class="wikimodel-freestanding" href="http://liftoff.msfc.nasa.gov/">Space Exploration</a></span><!--stopwikilink--></p><div class="rssitemdescription"><p>Sky watchers in Europe, Asia, and parts of Alaska and Canada.</p></div></div><!--stopmacro-->
+<!--startmacro:testrssmacro|-|feed="http://some.feed.com"|-|--><div class="box rssfeed"><!--startimage:http://www.w3schools.com/images/logo.gif--><img src="http://www.w3schools.com/images/logo.gif" class="wikimodel-freestanding" alt="http://www.w3schools.com/images/logo.gif"/><!--stopimage--><br/><p class="rsschanneltitle"><!--startwikilink:http://liftoff.msfc.nasa.gov/--><span class="wikiexternallink"><a class="wikimodel-freestanding" href="http://liftoff.msfc.nasa.gov/">Lift Off News<!--startimage:/xwiki/skins/albatross/icons/black-rss.png--><img src="/xwiki/skins/albatross/icons/black-rss.png" alt="/xwiki/skins/albatross/icons/black-rss.png"/><!--stopimage--></a></span><!--stopwikilink--></p><p class="rssitemtitle"><!--startwikilink:http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp--><span class="wikiexternallink"><a class="wikimodel-freestanding" href="http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp">Star City</a></span><!--stopwikilink--></p><div class="rssitemdescription"><p>How do Americans get ready to work with Russians aboard the International Space Station?</p></div><p class="rssitemtitle"><!--startwikilink:http://liftoff.msfc.nasa.gov/--><span class="wikiexternallink"><a class="wikimodel-freestanding" href="http://liftoff.msfc.nasa.gov/">Space Exploration</a></span><!--stopwikilink--></p><div class="rssitemdescription"><p>Sky watchers in Europe, Asia, and parts of Alaska and Canada.</p></div></div><!--stopmacro-->
 .#-----------------------------------------------------
 .expect|xwiki/2.0
 .#-----------------------------------------------------
Index: src/test/resources/macrorss2.test
===================================================================
--- src/test/resources/macrorss2.test	(revision 18006)
+++ src/test/resources/macrorss2.test	(working copy)
@@ -6,7 +6,7 @@
 .#-----------------------------------------------------
 .expect|xhtml/1.0
 .#-----------------------------------------------------
-<!--startmacro:testrssmacro2|-|feed="http://some.feed.com"|-|--><div class="box rssfeed"><p class="rsschanneltitle"><!--startwikilink:http://localhost/feed.xml--><span class="wikiexternallink"><a class="wikimodel-freestanding" href="http://localhost/feed.xml">Test Feed 2</a></span><!--stopwikilink--></p><p class="rssitemtitle"><!--startwikilink:http://localhost/blog/item1--><span class="wikiexternallink"><a class="wikimodel-freestanding" href="http://localhost/blog/item1">Item1</a></span><!--stopwikilink--></p><div class="rssitemdescription"><p>An item with<strong>HTML</strong>markup.</p></div></div><!--stopmacro-->
+<!--startmacro:testrssmacro2|-|feed="http://some.feed.com"|-|--><div class="box rssfeed"><p class="rsschanneltitle"><!--startwikilink:http://localhost/feed.xml--><span class="wikiexternallink"><a class="wikimodel-freestanding" href="http://localhost/feed.xml">Test Feed 2<!--startimage:/xwiki/skins/albatross/icons/black-rss.png--><img src="/xwiki/skins/albatross/icons/black-rss.png" alt="/xwiki/skins/albatross/icons/black-rss.png"/><!--stopimage--></a></span><!--stopwikilink--></p><p class="rssitemtitle"><!--startwikilink:http://localhost/blog/item1--><span class="wikiexternallink"><a class="wikimodel-freestanding" href="http://localhost/blog/item1">Item1</a></span><!--stopwikilink--></p><div class="rssitemdescription"><p>An item with<strong>HTML</strong>markup.</p></div></div><!--stopmacro-->
 .#-----------------------------------------------------
 .expect|xwiki/2.0
 .#-----------------------------------------------------
Index: src/test/resources/META-INF/plexus/components.xml
===================================================================
--- src/test/resources/META-INF/plexus/components.xml	(revision 18006)
+++ src/test/resources/META-INF/plexus/components.xml	(working copy)
@@ -35,6 +35,11 @@
           <role>org.xwiki.rendering.macro.Macro</role>
           <role-hint>box</role-hint>
         </requirement>
+        <requirement>
+          <role>org.xwiki.bridge.SkinAccessBridge</role>
+          <role-hint>default</role-hint>
+          <field-name>skinAccessBridge</field-name>
+        </requirement>
       </requirements>
     </component>
     <component>
@@ -47,6 +52,11 @@
           <role>org.xwiki.rendering.macro.Macro</role>
           <role-hint>box</role-hint>
         </requirement>
+        <requirement>
+          <role>org.xwiki.bridge.SkinAccessBridge</role>
+          <role-hint>default</role-hint>
+          <field-name>skinAccessBridge</field-name>
+        </requirement>
       </requirements>
     </component>    
   </components>
