/*
 * #%L
 * GwtMaterial
 * %%
 * Copyright (C) 2015 - 2017 GwtMaterialDesign
 * %%
 * 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.
 * #L%
 */
package gwt.material.design.client.ui;

import gwt.material.design.client.constants.Color;
import gwt.material.design.client.constants.CssName;
import gwt.material.design.client.constants.IconType;
import gwt.material.design.client.ui.base.AbstractValueWidgetTest;
import gwt.material.design.client.ui.html.Span;

/**
 * Test case for Chips.
 *
 * @author kevzlou7979
 * @author Ben Dol
 */
public class MaterialChipTest extends AbstractValueWidgetTest<MaterialChip> {

    @Override
    protected MaterialChip createWidget() {
        return new MaterialChip();
    }

    @Override
    public void testInitialClasses() {
        checkInitialClasses(CssName.CHIP);
    }

    public void testStructure() {
        // given
        final String TEXT = "text";
        MaterialChip chip = getWidget();

        // when / then
        chip.setText(TEXT);
        assertEquals(TEXT, chip.getText());
        assertEquals(TEXT, chip.getChipLabel().getText());

        // given
        final IconType icon = IconType.POLYMER;

        // when / then
        chip.setIconType(icon);
        chip.setIconColor(Color.RED);
        assertEquals(icon, chip.getIcon().getIconType());
        assertEquals(Color.RED, chip.getIconColor());

        assertEquals(chip.getChipLabel(), chip.getWidget(0));
        assertEquals(chip.getIcon(), chip.getWidget(1));
    }

    public void testLetter() {
        // UiBinder
        // given
        MaterialChip chip = getWidget(false);

        // when / then
        chip.setLetter("A");
        assertNotNull(chip.getWidget(0));
        assertTrue(chip.getWidget(0) instanceof Span);
        Span letter = (Span) chip.getWidget(0);
        assertEquals("A", chip.getLetter());
        assertEquals(letter.getText(), chip.getLetter());
        chip.setLetterBackgroundColor(Color.AMBER);
        assertEquals(Color.AMBER, letter.getBackgroundColor());
        chip.setLetterColor(Color.AMBER);
        assertEquals(Color.AMBER, letter.getTextColor());

        // Standard
        // given
        attachWidget();

        // when / then
        chip.setLetter("A");
        letter = (Span) chip.getWidget(0);
        chip.setLetterBackgroundColor(Color.AMBER);
        assertTrue(letter.getElement().hasClassName(Color.AMBER.getCssName()));
        chip.setLetterColor(Color.AMBER);
        assertTrue(letter.getElement().hasClassName(Color.AMBER.getCssName()));
    }

    public void testImage() {
        // given
        final String URL = "some.jpg";
        MaterialChip chip = getWidget();

        // when / then
        chip.setUrl(URL);
        assertEquals(URL, chip.getUrl());
    }

    public void testCloseHandler() {
        // given
        MaterialChip chip = getWidget();

        // when / then
        boolean[] closeHandler = new boolean[]{false};
        chip.addCloseHandler(closeEvent -> closeHandler[0] = true);
        chip.close();
        assertFalse(chip.isAttached());
        assertTrue(closeHandler[0]);
    }
}