Java tutorial
/* Copyright (c) 2013 Martin Knopf * * Licensed under the MIT license; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://opensource.org/licenses/MIT * * 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.wicketstuff.jwicket.ui.tooltip; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.apache.wicket.Component; import org.apache.wicket.markup.head.CssReferenceHeaderItem; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.request.resource.CssResourceReference; import org.apache.wicket.util.tester.WicketTester; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.wicketstuff.jwicket.JsOption; /** * * @author Martin Knopf * */ public class TestJQueryUiTooltip { private Component component; private JQueryUiTooltip tooltip; private JQueryUiWidget widget; private WicketTester tester; @Before public void setUp() throws Exception { tester = new WicketTester(); component = new Label("id"); tester.startComponentInPage(component); widget = Mockito.mock(JQueryUiWidget.class); when(widget.buildJS(Mockito.anyString())).thenReturn("test JavaScript"); tooltip = new JQueryUiTooltip(widget); component.add(tooltip); } @Test public void shouldAddDefaultCssToResponse() { IHeaderResponse response = mock(IHeaderResponse.class); tooltip.renderHead(component, response); verify(response, times(1)) .render(Mockito.eq(CssReferenceHeaderItem.forReference(tooltip.uiTooltipCss_1_10_3))); } @Test public void shouldAddCustomCssToResponse() { IHeaderResponse response = mock(IHeaderResponse.class); CssResourceReference customCssResourceReference = new CssResourceReference(JQueryUiTooltip.class, "test.css"); tooltip.addCssResource(customCssResourceReference); tooltip.renderHead(component, response); verify(response, times(1)) .render(Mockito.eq(CssReferenceHeaderItem.forReference(customCssResourceReference))); } @SuppressWarnings("static-access") @Test public void shouldAvoidAddingCssToResponseMultipleTimes() { IHeaderResponse response = mock(IHeaderResponse.class); CssResourceReference customCssResourceReference = new CssResourceReference(JQueryUiTooltip.class, "test.css"); tooltip.renderHead(component, response); tooltip.addCssResource(customCssResourceReference); tooltip.renderHead(component, response); verify(response, times(1)) .render(Mockito.eq(CssReferenceHeaderItem.forReference(tooltip.uiTooltipCss_1_10_3))); } @SuppressWarnings("static-access") @Test public void shouldNotAddCssToResponse() { IHeaderResponse response = mock(IHeaderResponse.class); CssResourceReference customCssResourceReference = new CssResourceReference(JQueryUiTooltip.class, "test.css"); tooltip.addCssResource(customCssResourceReference); tooltip.withoutCss(); tooltip.renderHead(component, response); verify(response, never()).render(CssReferenceHeaderItem.forReference(tooltip.uiTooltipCss_1_10_3)); } @Test public void shouldUseDefaultContentWhenNoContentProvided() { verify(widget).setOption("content", "function(){" /**/ + "var title=$(this).attr('title');" /**/ + "if(typeof title!=='undefined' && title!==false){return title;}" /**/ + "else{return $(this).attr('data-tooltip');}" /**/ + "}"); } @Test public void shouldSurroundContentOptionWithSingleQuotes() { tooltip.setContent("<h1>tooltip content</h1>"); verify(widget).setOption("content", "'<h1>tooltip content</h1>'"); } @Test public void shouldCreateMarkupGetterForContentOption() { tooltip.setContent(component); verify(widget).setOption("content", "$('#" + component.getMarkupId() + "').html()"); } @Test public void shouldConvertDisabledOptionToString() { tooltip.setDisabled(true); verify(widget).setOption("disabled", "true"); tooltip.setDisabled(false); verify(widget).setOption("disabled", "false"); } @Test public void shouldConvertHideOptionFromBooleanToString() { tooltip.setHide(true); verify(widget).setOption("hide", "true"); tooltip.setHide(false); verify(widget).setOption("hide", "false"); } @Test public void shouldConvertHideOptionFromIntToString() { tooltip.setHide(5); verify(widget).setOption("hide", "5"); } @Test public void shouldSurroundHideOptionWithSingleQuotes() { tooltip.setHide("slideUp"); verify(widget).setOption("hide", "'slideUp'"); } @Test public void shouldConvertHideOptionFromJsOptionsToString() { JsOption effect = new JsOption("effect", "'explode'"); JsOption duration = new JsOption("duration", "1000"); tooltip.setHide(effect, duration); verify(widget).setOption("hide", "{effect:'explode',duration:1000}"); } @Test public void shouldSurroundItemsOptionWithSingleQuotes() { tooltip.setItems(".someItem"); verify(widget).setOption("items", "'.someItem'"); } @Test public void shouldUseMarkupIdAsDefaultItemsOption() { tooltip.getJsBuilder(); verify(widget, atLeastOnce()).setOption("items", "'#" + component.getMarkupId() + "'"); } @Test public void shouldUseDocumentAsDefaultItemsOptionWhenAddedToPage() { tester = new WicketTester(); TestPage page = new TestPage(); tester.startPage(page); JQueryUiTooltip tooltip = new JQueryUiTooltip(widget); page.add(tooltip); tooltip.getJsBuilder(); verify(widget, atLeastOnce()).setOption("items", "document"); } @Test public void shouldConvertPositionOptionFromJsOptionsToString() { JsOption my = new JsOption("my", "'left+15 center'"); JsOption at = new JsOption("at", "'right center'"); tooltip.setPosition(my, at); verify(widget).setOption("position", "{my:'left+15 center',at:'right center'}"); } @Test public void shouldConvertShowOptionFromBooleanToString() { tooltip.setHide(true); verify(widget).setOption("hide", "true"); tooltip.setHide(false); verify(widget).setOption("hide", "false"); } @Test public void shouldConvertShowOptionFromIntToString() { tooltip.setHide(5); verify(widget).setOption("hide", "5"); } @Test public void shouldSurroundShowOptionWithSingleQuotes() { tooltip.setHide("slideUp"); verify(widget).setOption("hide", "'slideUp'"); } @Test public void shouldonvertShowOptionFromJsOptionsToString() { JsOption effect = new JsOption("effect", "'explode'"); JsOption duration = new JsOption("duration", "1000"); tooltip.setHide(effect, duration); verify(widget).setOption("hide", "{effect:'explode',duration:1000}"); } @Test public void shouldSurroundTooltipClassOptionWithSingleQuotes() { tooltip.setTooltipClass(".someClass"); verify(widget).setOption("tooltipClass", "'.someClass'"); } @Test public void shouldConvertTrackOptionToString() { tooltip.setTrack(true); verify(widget).setOption("track", "true"); tooltip.setTrack(false); verify(widget).setOption("track", "false"); } @Test public void shouldBuildTheJQuerySelector() { IHeaderResponse response = mock(IHeaderResponse.class); tooltip.renderHead(component, response); verify(widget).buildJS("'#" + component.getMarkupId() + "'"); } }