You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by mb...@apache.org on 2006/01/15 16:15:25 UTC

svn commit: r369212 - in /myfaces/tomahawk/trunk/tomahawk/src: main/java/org/apache/myfaces/component/html/ext/ test/java/org/apache/myfaces/component/html/ext/ test/java/org/apache/myfaces/mock/

Author: mbr
Date: Sun Jan 15 07:15:09 2006
New Revision: 369212

URL: http://svn.apache.org/viewcvs?rev=369212&view=rev
Log:
fix for MYFACES-1010, including test case (testing with suns´ri not included)

Added:
    myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/component/html/ext/HtmlDataTableTest.java   (with props)
    myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/mock/
    myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/mock/MockExternalContext.java   (with props)
    myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/mock/MockFacesContext.java   (with props)
Modified:
    myfaces/tomahawk/trunk/tomahawk/src/main/java/org/apache/myfaces/component/html/ext/HtmlDataTableHack.java

Modified: myfaces/tomahawk/trunk/tomahawk/src/main/java/org/apache/myfaces/component/html/ext/HtmlDataTableHack.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/tomahawk/src/main/java/org/apache/myfaces/component/html/ext/HtmlDataTableHack.java?rev=369212&r1=369211&r2=369212&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/tomahawk/src/main/java/org/apache/myfaces/component/html/ext/HtmlDataTableHack.java (original)
+++ myfaces/tomahawk/trunk/tomahawk/src/main/java/org/apache/myfaces/component/html/ext/HtmlDataTableHack.java Sun Jan 15 07:15:09 2006
@@ -15,8 +15,6 @@
  */
 package org.apache.myfaces.component.html.ext;
 
-import org.apache.myfaces.custom.ExtendedComponentBase;
-
 import java.io.IOException;
 import java.sql.ResultSet;
 import java.util.ArrayList;
@@ -28,6 +26,7 @@
 
 import javax.faces.application.FacesMessage;
 import javax.faces.component.EditableValueHolder;
+import javax.faces.component.NamingContainer;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.el.ValueBinding;
@@ -39,6 +38,8 @@
 import javax.faces.model.ScalarDataModel;
 import javax.servlet.jsp.jstl.sql.Result;
 
+import org.apache.myfaces.custom.ExtendedComponentBase;
+
 /**
  * Reimplement all UIData functionality to be able to have (protected) access
  * the internal DataModel.
@@ -91,6 +92,37 @@
     public int getRowIndex()
     {
         return _rowIndex;
+    }
+    
+    /**
+     * Hack since RI does not call getRowIndex()
+     */
+    public String getClientId(FacesContext context)
+    {
+        String clientId = super.getClientId(context);
+        int rowIndex = getRowIndex();
+        if (rowIndex == -1)
+        {
+            return clientId;
+        }
+        // the following code tries to avoid rowindex to be twice in the client id
+        int index = clientId.lastIndexOf(NamingContainer.SEPARATOR_CHAR);
+        if(index != -1)
+        {
+            String rowIndexString = clientId.substring(index + 1);
+            try
+            {
+                if(Integer.parseInt(rowIndexString) == rowIndex)
+                {
+                    return clientId;
+                }
+            }
+            catch(NumberFormatException e)
+            {
+                return clientId + NamingContainer.SEPARATOR_CHAR + rowIndex;
+            }
+        }
+        return clientId + NamingContainer.SEPARATOR_CHAR + rowIndex;
     }
 
     /**

Added: myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/component/html/ext/HtmlDataTableTest.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/component/html/ext/HtmlDataTableTest.java?rev=369212&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/component/html/ext/HtmlDataTableTest.java (added)
+++ myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/component/html/ext/HtmlDataTableTest.java Sun Jan 15 07:15:09 2006
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.myfaces.component.html.ext;
+
+import java.util.Collection;
+import java.util.HashSet;
+
+import javax.faces.FactoryFinder;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.render.RenderKitFactory;
+
+import junit.framework.TestCase;
+
+import org.apache.myfaces.mock.MockExternalContext;
+import org.apache.myfaces.mock.MockFacesContext;
+import org.apache.myfaces.renderkit.RenderKitFactoryImpl;
+import org.apache.myfaces.renderkit.html.HtmlRenderKitImpl;
+
+/**
+ * @author Mathias Brökelmann (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+public class HtmlDataTableTest extends TestCase
+{
+    private FacesContext _ctx;
+    private HtmlDataTable _dataTable;
+
+    protected void setUp() throws Exception
+    {
+        MockFacesContext mock = new MockFacesContext();
+        mock.setViewRoot(new UIViewRoot());
+        mock.setExternalContext(new MockExternalContext());
+        _dataTable = new HtmlDataTable();
+        FactoryFinder.setFactory(FactoryFinder.RENDER_KIT_FACTORY,
+                RenderKitFactoryImpl.class.getName());
+        RenderKitFactory rkf = (RenderKitFactory) FactoryFinder
+                .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+        rkf.addRenderKit(RenderKitFactory.HTML_BASIC_RENDER_KIT,
+                new HtmlRenderKitImpl());
+        _ctx = mock;
+    }
+
+    protected void tearDown() throws Exception
+    {
+        _ctx = null;
+        _dataTable = null;
+    }
+
+    /*
+     * Test method for
+     * 'org.apache.myfaces.component.html.ext.HtmlDataTable.getClientId(FacesContext)'
+     */
+    public void testGetClientIdFacesContext()
+    {
+        assertEquals(-1, _dataTable.getRowIndex());
+        String baseClientId = _dataTable.getClientId(_ctx);
+        assertNotNull(baseClientId);
+        Collection rowClientIds = new HashSet();
+        for (int i = 0; i < 10; i++)
+        {
+            _dataTable.setRowIndex(i);
+            assertTrue("Duplicate client id while iterating rows",
+                    rowClientIds.add(_dataTable.getClientId(_ctx)));
+        }
+        _dataTable.setRowIndex(-1);
+        assertEquals(baseClientId, _dataTable.getClientId(_ctx));
+    }
+
+}

Propchange: myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/component/html/ext/HtmlDataTableTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/component/html/ext/HtmlDataTableTest.java
------------------------------------------------------------------------------
    svn:keywords = Revision Author Date Id

Added: myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/mock/MockExternalContext.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/mock/MockExternalContext.java?rev=369212&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/mock/MockExternalContext.java (added)
+++ myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/mock/MockExternalContext.java Sun Jan 15 07:15:09 2006
@@ -0,0 +1,336 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.myfaces.mock;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
+import javax.faces.context.ExternalContext;
+
+/**
+ * @author Mathias Brökelmann (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+public class MockExternalContext extends ExternalContext
+{
+    private Map _appMap = new HashMap();
+    private String _authType;
+    private Object _context;
+    private Map _initParameterMap = new HashMap();
+    private String _remoteUser;
+    private Object _request;
+    private String _requestContextPath;
+    private Map _requestCookieMap = new HashMap();
+    private Map _requestHeaderMap = new HashMap();
+    private Map _requestHeaderValuesMap = new HashMap();
+    private Locale _requestLocale;
+    private List _requestLocales = new ArrayList();
+    private Map _requestMap = new HashMap();
+    private Map _requestParameterMap = new HashMap();
+    private Map _requestParameterValuesMap = new HashMap();
+    private String _requestPathInfo;
+    private String _requestServletPath;
+    private Object _response;
+    private Object _session;
+    private Map _sessionMap = new HashMap();
+    private Principal _userPrincipal;
+    private Collection _roles = new HashSet();
+
+    public void dispatch(String path) throws IOException
+    {
+    }
+
+    public String encodeActionURL(String url)
+    {
+        return url;
+    }
+
+    public String encodeNamespace(String name)
+    {
+        return name;
+    }
+
+    public String encodeResourceURL(String url)
+    {
+        return url;
+    }
+
+    public Map getApplicationMap()
+    {
+        return _appMap;
+    }
+
+    public void setAuthType(String authType)
+    {
+        _authType = authType;
+    }
+
+    public String getAuthType()
+    {
+        return _authType;
+    }
+
+    public void setContext(Object context)
+    {
+        _context = context;
+    }
+
+    public Object getContext()
+    {
+        return _context;
+    }
+
+    public String getInitParameter(String name)
+    {
+        return (String) _initParameterMap.get(name);
+    }
+
+    public void setInitParameter(String name, String value)
+    {
+        _initParameterMap.put(name, value);
+    }
+
+    public Map getInitParameterMap()
+    {
+        return _initParameterMap;
+    }
+
+    public void setRemoteUser(String remoteUser)
+    {
+        _remoteUser = remoteUser;
+    }
+
+    public String getRemoteUser()
+    {
+        return _remoteUser;
+    }
+
+    public Object getRequest()
+    {
+        return _request;
+    }
+
+    public void setRequest(Object request)
+    {
+        _request = request;
+    }
+
+    public String getRequestContextPath()
+    {
+        return _requestContextPath;
+    }
+
+    public void setRequestContextPath(String requestContextPath)
+    {
+        _requestContextPath = requestContextPath;
+    }
+
+    public void setRequestCookieMap(Map requestCookieMap)
+    {
+        _requestCookieMap = requestCookieMap;
+    }
+
+    public Map getRequestCookieMap()
+    {
+        return _requestCookieMap;
+    }
+
+    public void setRequestHeaderMap(Map requestHeaderMap)
+    {
+        _requestHeaderMap = requestHeaderMap;
+    }
+
+    public Map getRequestHeaderMap()
+    {
+        return _requestHeaderMap;
+    }
+
+    public void setRequestHeaderValuesMap(Map requestHeaderValuesMap)
+    {
+        _requestHeaderValuesMap = requestHeaderValuesMap;
+    }
+
+    public Map getRequestHeaderValuesMap()
+    {
+        return _requestHeaderValuesMap;
+    }
+
+    public Locale getRequestLocale()
+    {
+        return _requestLocale;
+    }
+
+    public void setRequestLocale(Locale requestLocale)
+    {
+        _requestLocale = requestLocale;
+    }
+
+    public Iterator getRequestLocales()
+    {
+        return _requestLocales.iterator();
+    }
+
+    public void setRequestLocales(List requestLocales)
+    {
+        _requestLocales = requestLocales;
+    }
+
+    public void setRequestMap(Map requestMap)
+    {
+        _requestMap = requestMap;
+    }
+
+    public Map getRequestMap()
+    {
+        return _requestMap;
+    }
+
+    public void setRequestParameterMap(Map requestParameterMap)
+    {
+        _requestParameterMap = requestParameterMap;
+    }
+
+    public Map getRequestParameterMap()
+    {
+        return _requestParameterMap;
+    }
+
+    public Iterator getRequestParameterNames()
+    {
+        return _requestParameterMap.keySet().iterator();
+    }
+
+    public void setRequestParameterValuesMap(Map requestParameterValuesMap)
+    {
+        _requestParameterValuesMap = requestParameterValuesMap;
+    }
+
+    public Map getRequestParameterValuesMap()
+    {
+        return _requestParameterValuesMap;
+    }
+
+    public void setRequestPathInfo(String requestPathInfo)
+    {
+        _requestPathInfo = requestPathInfo;
+    }
+
+    public String getRequestPathInfo()
+    {
+        return _requestPathInfo;
+    }
+
+    public void setRequestServletPath(String requestServletPath)
+    {
+        _requestServletPath = requestServletPath;
+    }
+
+    public String getRequestServletPath()
+    {
+        return _requestServletPath;
+    }
+
+    public URL getResource(String path) throws MalformedURLException
+    {
+        return null;
+    }
+
+    public InputStream getResourceAsStream(String path)
+    {
+        return null;
+    }
+
+    public Set getResourcePaths(String path)
+    {
+        return Collections.EMPTY_SET;
+    }
+
+    public void setResponse(Object response)
+    {
+        _response = response;
+    }
+
+    public Object getResponse()
+    {
+        return _response;
+    }
+
+    public void setSession(Object session)
+    {
+        _session = session;
+    }
+
+    public Object getSession(boolean create)
+    {
+        return _session;
+    }
+
+    public Map getSessionMap()
+    {
+        return _sessionMap;
+    }
+    
+    public void setUserPrincipal(Principal userPrincipal)
+    {
+        _userPrincipal = userPrincipal;
+    }
+
+    public Principal getUserPrincipal()
+    {
+        return _userPrincipal;
+    }
+    
+    public void setUserRoles(Collection roles)
+    {
+        _roles = roles;
+    }
+    
+    public void addUserRole(String role)
+    {
+        _roles.add(role);
+    }
+    
+    public boolean isUserInRole(String role)
+    {
+        return _roles.contains(role);
+    }
+
+    public void log(String message)
+    {
+    }
+
+    public void log(String message, Throwable exception)
+    {
+    }
+
+    public void redirect(String url) throws IOException
+    {
+    }
+
+}

Propchange: myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/mock/MockExternalContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/mock/MockExternalContext.java
------------------------------------------------------------------------------
    svn:keywords = Revision Author Date Id

Added: myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/mock/MockFacesContext.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/mock/MockFacesContext.java?rev=369212&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/mock/MockFacesContext.java (added)
+++ myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/mock/MockFacesContext.java Sun Jan 15 07:15:09 2006
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.myfaces.mock;
+
+import javax.faces.application.Application;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseStream;
+import javax.faces.context.ResponseWriter;
+
+// TODO: have real mock implementations with expected/actual support
+public class MockFacesContext extends FacesContext
+{
+    private UIViewRoot _view;
+    private Application _application;
+    private ResponseWriter _writer;
+    private ResponseStream _stream;
+    private boolean _responseComplete;
+    private boolean _renderResponse;
+    private ExternalContext _externalContext;
+    
+    public MockFacesContext()
+    {
+        super.setCurrentInstance(this);
+    }
+
+    public void setApplication(Application application)
+    {
+        _application = application;
+    }
+
+    public Application getApplication()
+    {
+        return _application;
+    }
+
+    public java.util.Iterator getClientIdsWithMessages()
+    {
+        return null;
+    }
+    
+    public void setExternalContext(ExternalContext externalContext)
+    {
+        _externalContext = externalContext;
+    }
+
+    public javax.faces.context.ExternalContext getExternalContext()
+    {
+        return _externalContext;
+    }
+
+    public javax.faces.application.FacesMessage.Severity getMaximumSeverity()
+    {
+        return null;
+    }
+
+    public java.util.Iterator getMessages()
+    {
+        return null;
+    }
+
+    public java.util.Iterator getMessages(String clientId)
+    {
+        return null;
+    }
+
+    public javax.faces.render.RenderKit getRenderKit()
+    {
+        return null;
+    }
+
+    public boolean getRenderResponse()
+    {
+        return _renderResponse;
+    }
+
+    public boolean getResponseComplete()
+    {
+        return _responseComplete;
+    }
+
+    public javax.faces.context.ResponseStream getResponseStream()
+    {
+        return _stream;
+    }
+
+    public void setResponseStream(javax.faces.context.ResponseStream stream)
+    {
+        _stream = stream;
+    }
+
+    public javax.faces.context.ResponseWriter getResponseWriter()
+    {
+        return _writer;
+    }
+
+    public void setResponseWriter(javax.faces.context.ResponseWriter writer)
+    {
+        _writer = writer;
+    }
+
+    public javax.faces.component.UIViewRoot getViewRoot()
+    {
+        return _view;
+    }
+
+    public void setViewRoot(javax.faces.component.UIViewRoot view)
+    {
+        _view = view;
+    }
+
+    public void addMessage(String clientId,
+            javax.faces.application.FacesMessage message)
+    {
+    }
+
+    public void release()
+    {
+    }
+
+    public void renderResponse()
+    {
+        _renderResponse = true;
+    }
+
+    public void responseComplete()
+    {
+        _responseComplete = true;
+    }
+}

Propchange: myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/mock/MockFacesContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/tomahawk/trunk/tomahawk/src/test/java/org/apache/myfaces/mock/MockFacesContext.java
------------------------------------------------------------------------------
    svn:keywords = Revision Author Date Id