/*
* Copyright 2013 eXo Platform SAS
*
* 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 juzu.impl.plugin.controller;
import juzu.impl.inject.Scoped;
import juzu.impl.inject.spi.InjectorProvider;
import juzu.test.AbstractInjectTestCase;
import juzu.test.Identifiable;
import juzu.test.Registry;
import juzu.test.protocol.mock.MockApplication;
import juzu.test.protocol.mock.MockClient;
import juzu.test.protocol.mock.MockRequestBridge;
import org.junit.Test;
import java.util.List;
/** @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */
public class ScopeTestCase extends AbstractInjectTestCase {
public ScopeTestCase(InjectorProvider di) {
super(di);
}
@Test
public void testRequestScope() throws Exception {
MockApplication<?> app = application("plugin.controller.scope.request").init();
//
MockClient client = app.client();
//
MockRequestBridge request = client.render();
List<Scoped> attributes = request.getAttributesHistory();
assertEquals(1, attributes.size());
Identifiable car = (Identifiable)attributes.iterator().next().get();
assertEquals(Identifiable.DESTROYED, car.getStatus());
//
long id1 = Registry.<Long>unset("car");
assertEquals(car.getIdentityHashCode(), id1);
assertEquals(Identifiable.MANAGED, (int)Registry.<Integer>unset("status"));
//
request = client.invoke(Registry.<String>unset("action"));
attributes = request.getAttributesHistory();
assertEquals(1, attributes.size());
car = (Identifiable)attributes.iterator().next().get();
assertEquals(Identifiable.DESTROYED, car.getStatus());
//
long id2 = Registry.<Long>unset("car");
assertNotSame(id1, id2);
assertEquals(id2, id2);
assertEquals(Identifiable.MANAGED, (int)Registry.<Integer>unset("status"));
//
request = client.invoke(Registry.<String>unset("resource"));
attributes = request.getAttributesHistory();
assertEquals(1, attributes.size());
car = (Identifiable)attributes.iterator().next().get();
assertEquals(Identifiable.DESTROYED, car.getStatus());
//
long id3 = Registry.<Long>unset("car");
assertNotSame(id1, id3);
assertNotSame(id2, id3);
assertEquals(car.getIdentityHashCode(), id3);
assertEquals(Identifiable.MANAGED, (int)Registry.<Integer>unset("status"));
}
@Test
public void testFlashScope() throws Exception {
MockApplication<?> app = application("plugin.controller.scope.flash").init();
//
MockClient client = app.client();
//
client.render();
long id1 = Registry.<Long>unset("car");
int status = Registry.<Integer>unset("status");
assertEquals(Identifiable.MANAGED, status);
assertEquals(1, client.getFlashHistory(1).size());
Identifiable car1 = (Identifiable)client.getFlashHistory(1).iterator().next().get();
assertEquals(car1.getIdentityHashCode(), id1);
assertEquals(Identifiable.DESTROYED, car1.getStatus());
//
client.invoke(Registry.<String>unset("action"));
long id2 = Registry.<Long>unset("car");
status = Registry.<Integer>unset("status");
assertEquals(Identifiable.MANAGED, status);
assertNotSame(id1, id2);
assertEquals(1, client.getFlashHistory(0).size());
Identifiable car2 = (Identifiable)client.getFlashHistory(0).iterator().next().get();
assertNotSame(car1, car2);
assertEquals(Identifiable.MANAGED, car2.getStatus());
//
client.render();
long id3 = Registry.<Long>unset("car");
status = Registry.<Integer>unset("status");
assertEquals(Identifiable.MANAGED, status);
assertEquals(id2, id3);
assertEquals(1, client.getFlashHistory(1).size());
Identifiable car3 = (Identifiable)client.getFlashHistory(1).iterator().next().get();
assertSame(car2, car3);
assertEquals(Identifiable.DESTROYED, car2.getStatus());
}
@Test
public void testSessionScope() throws Exception {
MockApplication<?> app = application("plugin.controller.scope.session").init();
//
MockClient client = app.client();
//
client.render();
long id1 = Registry.<Long>unset("car");
int status = Registry.<Integer>unset("status");
assertEquals(Identifiable.MANAGED, status);
assertEquals(1, client.getSession().size());
Identifiable car1 = (Identifiable)client.getSession().iterator().next().get();
assertEquals(car1.getIdentityHashCode(), id1);
assertEquals(Identifiable.MANAGED, car1.getStatus());
//
client.invoke(Registry.<String>unset("action"));
long id2 = Registry.<Long>unset("car");
status = Registry.<Integer>unset("status");
assertEquals(Identifiable.MANAGED, status);
assertNotSame(id1, id2);
assertEquals(1, client.getSession().size());
Identifiable car2 = (Identifiable)client.getSession().iterator().next().get();
assertSame(car1, car2);
assertEquals(Identifiable.MANAGED, car2.getStatus());
//
client.render();
long id3 = Registry.<Long>unset("car");
status = Registry.<Integer>unset("status");
assertEquals(Identifiable.MANAGED, status);
assertEquals(id2, id3);
assertEquals(1, client.getSession().size());
Identifiable car3 = (Identifiable)client.getSession().iterator().next().get();
assertSame(car2, car3);
assertEquals(Identifiable.MANAGED, car2.getStatus());
}
}