/*
* Copyright 2000-2016 Vaadin Ltd.
*
* 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 com.vaadin.tests.server.navigator;
import org.easymock.EasyMock;
import org.easymock.IMocksControl;
import org.junit.Assert;
import org.junit.Test;
import com.vaadin.navigator.Navigator;
import com.vaadin.navigator.Navigator.UriFragmentManager;
import com.vaadin.server.Page;
import com.vaadin.shared.Registration;
public class UriFragmentManagerTest {
@Test
public void testGetSetUriFragment() {
Page page = EasyMock.createMock(Page.class);
UriFragmentManager manager = new UriFragmentManager(page);
// prepare mock
EasyMock.expect(page.getUriFragment()).andReturn("");
page.setUriFragment("!test", false);
EasyMock.expect(page.getUriFragment()).andReturn("!test");
EasyMock.replay(page);
// test manager using the mock
Assert.assertEquals("Incorrect fragment value", "", manager.getState());
manager.setState("test");
Assert.assertEquals("Incorrect fragment value", "test",
manager.getState());
}
@Test
public void testListener() {
// create mocks
IMocksControl control = EasyMock.createNiceControl();
Navigator navigator = control.createMock(Navigator.class);
Page page = control.createMock(Page.class);
UriFragmentManager manager = new UriFragmentManager(page);
manager.setNavigator(navigator);
control.resetToNice();
EasyMock.expect(page.getUriFragment()).andReturn("!test");
navigator.navigateTo("test");
control.replay();
page.setUriFragment("oldtest", true);
}
@Test
public void setNavigator_someNavigatorInstance_uriFragmentChangedListenerIsRemoved() {
TestPage page = new TestPage();
UriFragmentManager manager = new UriFragmentManager(page);
manager.setNavigator(EasyMock.createMock(Navigator.class));
Assert.assertTrue(
"addUriFragmentChangedListener() method is not called for the Page",
page.addUriFragmentCalled());
Assert.assertFalse(
"removeUriFragmentChangedListener() method is called for the Page",
page.removeUriFragmentCalled());
}
@Test
public void setNavigator_nullNavigatorInstance_uriFragmentChangedListenerIsRemoved() {
TestPage page = new TestPage();
UriFragmentManager manager = new UriFragmentManager(page);
manager.setNavigator(EasyMock.createMock(Navigator.class));
manager.setNavigator(null);
Assert.assertTrue(
"removeUriFragmentChangedListener() method is not called for the Page",
page.removeUriFragmentCalled());
}
private static class TestPage extends Page {
public TestPage() {
super(null, null);
}
@Override
public Registration addUriFragmentChangedListener(
UriFragmentChangedListener listener) {
addUriFragmentCalled = true;
return () -> removeUriFragmentCalled = true;
}
@Override
public void removeUriFragmentChangedListener(
UriFragmentChangedListener listener) {
removeUriFragmentCalled = true;
}
boolean addUriFragmentCalled() {
return addUriFragmentCalled;
}
boolean removeUriFragmentCalled() {
return removeUriFragmentCalled;
}
private boolean addUriFragmentCalled;
private boolean removeUriFragmentCalled;
}
}