blob: df9dcc09e068e15888565d308e0860bc8b2ce269 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 javax.faces.component;
import java.util.Arrays;
import javax.faces.context.FacesContext;
import javax.faces.event.FacesListener;
import org.junit.Assert;
public class _DeltaFacesListenerListTest extends AbstractComponentTest
{
public static class UITestComponent extends UIComponentBase
{
public UITestComponent()
{
}
@Override
public String getFamily()
{
return "javax.faces.Test";
}
}
public static class NoStateFacesListener implements FacesListener
{
public NoStateFacesListener()
{
}
@Override
public boolean equals(Object obj)
{
if (obj instanceof NoStateFacesListener)
{
return true;
}
return false;
}
}
public static class NoStateFacesListener2 implements FacesListener
{
public NoStateFacesListener2()
{
}
@Override
public boolean equals(Object obj)
{
if (obj instanceof NoStateFacesListener2)
{
return true;
}
return false;
}
}
public static class StateFacesListener implements FacesListener, StateHolder
{
private boolean _transient;
String value;
public StateFacesListener()
{
}
@Override
public boolean equals(Object obj)
{
if (obj instanceof StateFacesListener)
{
if (value == null)
{
if (((StateFacesListener)obj).value == null)
{
return true;
}
}
else if (value.equals(((StateFacesListener)obj).value))
{
return true;
}
}
return false;
}
public boolean isTransient()
{
return _transient;
}
public void setTransient(boolean _transient)
{
this._transient = _transient;
}
public void restoreState(FacesContext context, Object state)
{
value = (String) state;
}
public Object saveState(FacesContext context)
{
return value;
}
public String getValue()
{
return value;
}
public void setValue(String value)
{
this.value = value;
}
}
public static class PartialStateFacesListener extends StateFacesListener implements PartialStateHolder
{
private boolean initialStateMarked;
@Override
public void restoreState(FacesContext context, Object state)
{
if (state != null)
{
value = (String) state;
}
}
@Override
public Object saveState(FacesContext context)
{
if (!initialStateMarked())
{
return value;
}
return null;
}
public void clearInitialState()
{
initialStateMarked = false;
}
public boolean initialStateMarked()
{
return initialStateMarked;
}
public void markInitialState()
{
initialStateMarked = true;
}
}
@Override
public void setUp() throws Exception
{
super.setUp();
}
@Override
public void tearDown() throws Exception
{
super.tearDown();
}
public void testSimpleAddRemove()
{
UITestComponent a = new UITestComponent();
FacesListener listener1 = new NoStateFacesListener();
a.addFacesListener(listener1);
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
a.removeFacesListener(listener1);
Assert.assertFalse(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
}
public void testSimpleSaveRestore1()
{
UITestComponent a = new UITestComponent();
UITestComponent b = new UITestComponent();
FacesListener listener1 = new NoStateFacesListener();
a.addFacesListener(listener1);
b.addFacesListener(listener1);
b.restoreState(facesContext, a.saveState(facesContext));
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
a.removeFacesListener(listener1);
b.removeFacesListener(listener1);
Assert.assertFalse(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
}
public void testSimpleSaveRestore2()
{
UITestComponent a = new UITestComponent();
UITestComponent b = new UITestComponent();
a.markInitialState();
b.markInitialState();
FacesListener listener1 = new NoStateFacesListener();
a.addFacesListener(listener1);
Object [] savedState1 = (Object[]) a.saveState(facesContext);
b.restoreState(facesContext, savedState1);
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
a.removeFacesListener(listener1);
b.removeFacesListener(listener1);
Assert.assertFalse(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
}
public void testSimpleSaveRestore3()
{
UITestComponent a = new UITestComponent();
UITestComponent b = new UITestComponent();
FacesListener listener1 = new NoStateFacesListener();
FacesListener listener2 = new NoStateFacesListener();
a.addFacesListener(listener1);
b.addFacesListener(listener2);
a.markInitialState();
b.markInitialState();
Object [] savedState1 = (Object[]) a.saveState(facesContext);
Assert.assertNull(savedState1 == null ? null : savedState1[1]);
b.restoreState(facesContext, savedState1);
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
a.removeFacesListener(listener1);
b.removeFacesListener(listener1);
Assert.assertFalse(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
}
public void testSimpleSaveRestore4()
{
UITestComponent a = new UITestComponent();
UITestComponent b = new UITestComponent();
FacesListener listener1 = new NoStateFacesListener();
FacesListener listener2 = new NoStateFacesListener2();
a.addFacesListener(listener1);
b.addFacesListener(listener1);
a.markInitialState();
b.markInitialState();
a.addFacesListener(listener2);
b.restoreState(facesContext, a.saveState(facesContext));
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener2));
Assert.assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener2));
a.removeFacesListener(listener1);
b.removeFacesListener(listener1);
a.removeFacesListener(listener2);
b.removeFacesListener(listener2);
Assert.assertFalse(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener2));
Assert.assertFalse(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener2));
}
public void testSimpleSaveRestore5()
{
UITestComponent a = new UITestComponent();
UITestComponent b = new UITestComponent();
UITestComponent c = new UITestComponent();
FacesListener listener1 = new NoStateFacesListener();
FacesListener listener2 = new NoStateFacesListener2();
a.addFacesListener(listener1);
b.addFacesListener(listener1);
a.markInitialState();
b.markInitialState();
a.addFacesListener(listener2);
b.restoreState(facesContext, a.saveState(facesContext));
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener2));
Assert.assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener2));
a.removeFacesListener(listener1);
b.removeFacesListener(listener1);
a.removeFacesListener(listener2);
b.removeFacesListener(listener2);
Assert.assertFalse(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener2));
Assert.assertFalse(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener2));
//Save fully
b.clearInitialState();
c.restoreState(facesContext, b.saveState(facesContext));
//c._facesListeners should be empty
Assert.assertFalse(Arrays.asList(c.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(c.getFacesListeners(FacesListener.class)).contains(listener2));
}
public void testSimpleSaveRestore6()
{
UITestComponent a = new UITestComponent();
UITestComponent b = new UITestComponent();
StateFacesListener listener1 = new StateFacesListener();
StateFacesListener listener2 = new StateFacesListener();
listener1.setValue("value1");
listener2.setValue("value2");
a.addFacesListener(listener1);
b.addFacesListener(listener2);
a.markInitialState();
b.markInitialState();
Object [] savedState1 = (Object[]) a.saveState(facesContext);
// This is not null because StateFacesListener is instance of StateHolder
// and always needs to be saved and restored!
Assert.assertNotNull(savedState1[0]);
b.restoreState(facesContext, savedState1);
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
a.removeFacesListener(listener1);
b.removeFacesListener(listener1);
Assert.assertFalse(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
}
public void testSimpleSaveRestore7()
{
UITestComponent a = new UITestComponent();
UITestComponent b = new UITestComponent();
UITestComponent c = new UITestComponent();
StateFacesListener listener1 = new StateFacesListener();
StateFacesListener listener2 = new StateFacesListener();
listener1.setValue("value1");
listener2.setValue("value2");
a.addFacesListener(listener1);
b.addFacesListener(listener1);
a.markInitialState();
b.markInitialState();
a.addFacesListener(listener2);
b.restoreState(facesContext, a.saveState(facesContext));
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener2));
Assert.assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener2));
a.removeFacesListener(listener1);
b.removeFacesListener(listener1);
a.removeFacesListener(listener2);
b.removeFacesListener(listener2);
Assert.assertFalse(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener2));
Assert.assertFalse(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener2));
//Save fully
b.clearInitialState();
c.restoreState(facesContext, b.saveState(facesContext));
//c._facesListeners should be empty
Assert.assertFalse(Arrays.asList(c.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(c.getFacesListeners(FacesListener.class)).contains(listener2));
}
public void testSimpleSaveRestore8()
{
UITestComponent a = new UITestComponent();
UITestComponent b = new UITestComponent();
StateFacesListener listener1 = new PartialStateFacesListener();
listener1.setValue("value1");
a.addFacesListener(listener1);
b.addFacesListener(listener1);
a.markInitialState();
b.markInitialState();
Object [] savedState1 = (Object[]) a.saveState(facesContext);
// This is null because StateFacesListener is instance of PartialStateHolder
Assert.assertNull(savedState1 == null ? null : savedState1[1]);
b.restoreState(facesContext, savedState1);
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
a.removeFacesListener(listener1);
b.removeFacesListener(listener1);
Assert.assertFalse(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
}
public void testSimpleSaveRestore9()
{
UITestComponent a = new UITestComponent();
UITestComponent b = new UITestComponent();
StateFacesListener listener1 = new PartialStateFacesListener();
listener1.setValue("value1");
StateFacesListener listener2 = new PartialStateFacesListener();
listener2.setValue("value2");
a.addFacesListener(listener1);
b.addFacesListener(listener1);
a.markInitialState();
b.markInitialState();
a.addFacesListener(listener2);
Object [] savedState1 = (Object[]) a.saveState(facesContext);
// This is null because StateFacesListener is instance of PartialStateHolder but a
// listener was added after markInitialState
Assert.assertNotNull(savedState1[0]);
b.restoreState(facesContext, savedState1);
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener2));
Assert.assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener2));
a.removeFacesListener(listener1);
b.removeFacesListener(listener1);
Assert.assertFalse(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener2));
Assert.assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener2));
}
public void testSimpleSaveRestoreTransient1()
{
UITestComponent a = new UITestComponent();
UITestComponent b = new UITestComponent();
StateFacesListener listener1 = new StateFacesListener();
listener1.setTransient(true);
listener1.setValue("value");
a.addFacesListener(listener1);
b.restoreState(facesContext, a.saveState(facesContext));
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
}
public void testSimpleSaveRestoreTransient2()
{
UITestComponent a = new UITestComponent();
UITestComponent b = new UITestComponent();
a.markInitialState();
b.markInitialState();
StateFacesListener listener1 = new StateFacesListener();
listener1.setTransient(true);
listener1.setValue("value");
a.addFacesListener(listener1);
b.restoreState(facesContext, a.saveState(facesContext));
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
}
public void testSimpleSaveRestoreTransient3()
{
UITestComponent a = new UITestComponent();
UITestComponent b = new UITestComponent();
FacesListener listener2 = new NoStateFacesListener2();
a.addFacesListener(listener2);
b.addFacesListener(listener2);
a.markInitialState();
b.markInitialState();
StateFacesListener listener1 = new StateFacesListener();
listener1.setTransient(true);
listener1.setValue("value");
a.addFacesListener(listener1);
b.restoreState(facesContext, a.saveState(facesContext));
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
}
public void testSimpleSaveRestoreTransient4()
{
UITestComponent a = new UITestComponent();
UITestComponent b = new UITestComponent();
StateFacesListener listener1 = new StateFacesListener();
listener1.setTransient(true);
listener1.setValue("value");
a.addFacesListener(listener1);
b.addFacesListener(listener1);
a.markInitialState();
b.markInitialState();
//Since listener1 is transient
Object [] savedState1 = (Object[]) a.saveState(facesContext);
b.restoreState(facesContext, savedState1);
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertFalse(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
}
public void testComplexSaveRestore1()
{
UITestComponent a = new UITestComponent();
UITestComponent b = new UITestComponent();
FacesListener listener1 = new NoStateFacesListener();
StateFacesListener listener2 = new PartialStateFacesListener();
StateFacesListener listener3 = new StateFacesListener();
a.addFacesListener(listener1);
a.addFacesListener(listener2);
a.addFacesListener(listener3);
b.addFacesListener(listener1);
b.addFacesListener(listener2);
b.addFacesListener(listener3);
a.markInitialState();
b.markInitialState();
//Since listener1 is transient
Object [] savedState1 = (Object[]) a.saveState(facesContext);
b.restoreState(facesContext, savedState1);
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener2));
Assert.assertTrue(Arrays.asList(a.getFacesListeners(FacesListener.class)).contains(listener3));
Assert.assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener1));
Assert.assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener2));
Assert.assertTrue(Arrays.asList(b.getFacesListeners(FacesListener.class)).contains(listener3));
}
}