import * as actionTestsCommon from "./action-bar-tests-common";
import * as TKUnit from "../../TKUnit";
import { ActionItem } from "tns-core-modules/ui/action-bar";
import { Visibility } from "tns-core-modules/ui/enums";
import { Button } from "tns-core-modules/ui/button";

global.moduleMerge(actionTestsCommon, exports);

export function test_actionItem_visibility() {
    const actionItem = new ActionItem();
    actionItem.text = "Test";
    const page = actionTestsCommon.createPageAndNavigate();
    page.actionBar.actionItems.addItem(actionItem);
    const toolbar = <android.support.v7.widget.Toolbar>page.actionBar.nativeView;
    const menu = toolbar.getMenu();

    TKUnit.assertTrue(menu.hasVisibleItems(), "Visibility does not work");
    actionItem.visibility = Visibility.collapse;
    TKUnit.assertFalse(menu.hasVisibleItems(), "Visibility does not work");
}

export function test_navigationButton_visibility() {
    const actionItem = new ActionItem();
    actionItem.icon = "~/small-image.png";
    const page = actionTestsCommon.createPageAndNavigate();
    page.actionBar.navigationButton = actionItem;

    const toolbar = <android.support.v7.widget.Toolbar>page.actionBar.nativeView;

    TKUnit.assertNotNull(toolbar.getNavigationIcon(), "Visibility does not work");
    actionItem.visibility = Visibility.collapse;
    TKUnit.assertNull(toolbar.getNavigationIcon(), "Visibility does not work");
}

export function test_set_actionView_to_attached_actionItem_propagates_context() {
    const actionItem = new ActionItem();
    const actionButton = new Button();
    actionItem.actionView = actionButton;

    const page = actionTestsCommon.createPageAndNavigate();

    // sanity check
    TKUnit.assertNotNull(page.content._context, "Page content context should not be null");

    // assert null before add
    TKUnit.assertNull(actionItem._context, "Action Item context should be null before added");
    TKUnit.assertNull(actionButton._context, "Action button context should not null before added");

    page.actionBar.actionItems.addItem(actionItem);

    // assert not null after add
    TKUnit.assertNotNull(actionItem._context, "Action Item context should not be null after add");
    TKUnit.assertNotNull(actionButton._context, "Action button context should not be null after add");
}

export function test_add_actionItem_with_actionView_propagates_context() {
    const actionItem = new ActionItem();

    const page = actionTestsCommon.createPageAndNavigate();

    // sanity check
    TKUnit.assertNotNull(page.content._context, "Page content context should not be null");

    // add actionItem to the actionBar
    TKUnit.assertNull(actionItem._context, "Action Item context should be null before added");
    page.actionBar.actionItems.addItem(actionItem);
    TKUnit.assertNotNull(actionItem._context, "Action Item context should not be null after add");

    const actionButton = new Button();

    // add actionButton to the actionItem
    TKUnit.assertNull(actionButton._context, "Action button context should be null before added");
    actionItem.actionView = actionButton;
    TKUnit.assertNotNull(actionButton._context, "Action button context should not be null after add");
}