Browse Source

Implemented HasEnabled on VLink (#18530)

Method setWidgetEnabled in AbstractComponentConnector,
called from updateEnabledState, sets enable state only for widgets
implementing HasEnabled interface.

Change-Id: Idc700d0c28efd13b9a9470333b19a1509cca4a51
tags/7.6.0.beta1
Marco Collovati 8 years ago
parent
commit
2333da5893

+ 12
- 1
client/src/com/vaadin/client/ui/VLink.java View File

@@ -23,10 +23,11 @@ import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasEnabled;
import com.vaadin.client.Util;
import com.vaadin.shared.ui.BorderStyle;

public class VLink extends HTML implements ClickHandler {
public class VLink extends HTML implements ClickHandler, HasEnabled {

public static final String CLASSNAME = "v-link";

@@ -134,4 +135,14 @@ public class VLink extends HTML implements ClickHandler {

}

@Override
public boolean isEnabled() {
return enabled;
}

@Override
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}

}

+ 61
- 0
uitest/src/com/vaadin/tests/components/link/LinkInsideDisabledContainer.java View File

@@ -0,0 +1,61 @@
package com.vaadin.tests.components.link;

import java.util.concurrent.atomic.AtomicInteger;

import com.vaadin.server.ExternalResource;
import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUIWithLog;
import com.vaadin.ui.Button;
import com.vaadin.ui.JavaScriptFunction;
import com.vaadin.ui.Link;
import com.vaadin.ui.VerticalLayout;

import elemental.json.JsonArray;

public class LinkInsideDisabledContainer extends AbstractTestUIWithLog {

private final AtomicInteger clickCounter = new AtomicInteger(0);
public static final String CLICK_COUNT_TEXT = "Click count: ";

@Override
protected void setup(VaadinRequest request) {

VerticalLayout layout = new VerticalLayout();

final Link link = new Link(CLICK_COUNT_TEXT + 0,
new ExternalResource("javascript:__linkClicked()"));

getPage().getJavaScript().addFunction("__linkClicked",
new JavaScriptFunction() {

@Override
public void call(JsonArray arguments) {
log(CLICK_COUNT_TEXT + clickCounter.incrementAndGet());
}
});

final VerticalLayout vlayout = new VerticalLayout();
vlayout.addComponent(link);
vlayout.setId("testContainer");
layout.addComponent(vlayout);

Button toggleLinkButton = new Button("enable/disable link");
toggleLinkButton.addClickListener(new Button.ClickListener() {
@Override
public void buttonClick(Button.ClickEvent clickEvent) {
link.setEnabled(!link.isEnabled());
}
});
layout.addComponent(toggleLinkButton);

Button toggleContainerButton = new Button("enable/disable container");
toggleContainerButton.addClickListener(new Button.ClickListener() {
@Override
public void buttonClick(Button.ClickEvent clickEvent) {
vlayout.setEnabled(!vlayout.isEnabled());
}
});
layout.addComponent(toggleContainerButton);
addComponent(layout);
}
}

+ 141
- 0
uitest/src/com/vaadin/tests/components/link/LinkInsideDisabledContainerTest.java View File

@@ -0,0 +1,141 @@
package com.vaadin.tests.components.link;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;

import com.vaadin.testbench.elements.ButtonElement;
import com.vaadin.testbench.elements.LinkElement;
import com.vaadin.testbench.elements.VerticalLayoutElement;
import com.vaadin.tests.tb3.MultiBrowserTest;

public class LinkInsideDisabledContainerTest extends MultiBrowserTest {

private static final Pattern CLICK_MATCHER = Pattern
.compile(LinkInsideDisabledContainer.CLICK_COUNT_TEXT + "(\\d+)");

@Before
public void init() {
openTestURL();
}

@Test
public void clickOnEnabledLinkInEnabledContainerShouldPerformAction()
throws InterruptedException {

clickLink();
assertTrue(isLinkEnabled());
assertThat(clicksOnLink(), is(1));

clickLink();
assertThat(clicksOnLink(), is(2));

}

@Test
public void clickOnEnabledLinkInDisabledContainerShouldNotPerformAction()
throws InterruptedException {

disableContainer();

clickLink();

assertFalse(isLinkEnabled());
assertThat(clicksOnLink(), is(0));
}

@Test
public void linkShouldMaintainDisabledStatusWhenTogglingContainerEnabledStatus()
throws InterruptedException {

toggleLinkEnabledStatus();
clickLink();
assertFalse(isLinkEnabled());
assertThat(clicksOnLink(), is(0));

disableContainer();
clickLink();
assertFalse(isLinkEnabled());
assertThat(clicksOnLink(), is(0));

enableContainer();
clickLink();
assertFalse(isLinkEnabled());
assertThat(clicksOnLink(), is(0));

}

@Test
public void linkShouldMaintainEnabledStatusWhenTogglingContainerEnabledStatus()
throws InterruptedException {

clickLink();
assertTrue(isLinkEnabled());
assertThat(clicksOnLink(), is(1));

disableContainer();
clickLink();
assertFalse(isLinkEnabled());
assertThat(clicksOnLink(), is(1));

enableContainer();
clickLink();
assertTrue(isLinkEnabled());
assertThat(clicksOnLink(), is(2));

}

private void disableContainer() {
VerticalLayoutElement container = $(VerticalLayoutElement.class)
.id("testContainer");
if (container.isEnabled()) {
toggleContainerEnabledStatus();
}
}

private void enableContainer() {
VerticalLayoutElement container = $(VerticalLayoutElement.class)
.id("testContainer");
if (!container.isEnabled()) {
toggleContainerEnabledStatus();
}
}

private void toggleContainerEnabledStatus() {
ButtonElement button = $(ButtonElement.class).get(1);
button.click();
}

private void toggleLinkEnabledStatus() {
ButtonElement button = $(ButtonElement.class).get(0);
button.click();
}

protected void clickLink() throws InterruptedException {
findElement(By.tagName("A")).click();
sleep(250);
}

private boolean isLinkEnabled() {
return $(LinkElement.class).first().isEnabled();
}

private Integer clicksOnLink() {

if (!getLogs().isEmpty()) {
Matcher m = CLICK_MATCHER.matcher(getLogRow(0));
if (m.find()) {
return Integer.valueOf(m.group(1));
}
}
return 0;
}
}

Loading…
Cancel
Save