godoru 0.1.0

UI Framework for Rust using Godot
use super::mount::{layoutClass, nodeName, resolveStyle};
use super::*;

#[test]
fn nodeNameUsesFallbackWhenIdIsEmpty() {
    assert_eq!(nodeName(None, "Container", 2), "Container2");
    assert_eq!(nodeName(Some("red-card"), "Container", 2), "redcard");
}

#[test]
fn styleResolutionAppliesLocalOverThemeClass() {
    let theme = AppTheme::new().class(Component::Container, "card", |style| {
        style.background(Color::rgb(1.0, 0.0, 0.0));
        style.padding(12);
    });
    let mut local = Style::default();
    local.padding = Some(Spacing::all(24));
    let style = resolveStyle(&theme, Component::Container, Some("card"), &local);

    assert_eq!(style.background, Some(Color::rgb(1.0, 0.0, 0.0)));
    assert_eq!(style.padding, Some(Spacing::all(24)));
}

#[test]
fn layoutClassMatchesDirectionAndWrap() {
    assert_eq!(
        layoutClass(&Container::<crate::NoAction>::new()),
        "VBoxContainer"
    );
    assert_eq!(
        layoutClass(&Container::<crate::NoAction>::new().direction(ContainerDirection::Horizontal)),
        "HBoxContainer"
    );
    assert_eq!(
        layoutClass(&Container::<crate::NoAction>::new().wrap(ContainerWrap::Wrap)),
        "VFlowContainer"
    );
}

#[test]
fn requiredMethodHashesArePresent() {
    let hashes = [
        METHOD_OBJECT_NOTIFICATION,
        METHOD_ENGINE_GET_MAIN_LOOP,
        METHOD_SCENE_TREE_GET_ROOT,
        METHOD_NODE_ADD_CHILD,
        METHOD_NODE_SET_NAME,
        METHOD_NODE_QUEUE_FREE,
        METHOD_CONTROL_SET_ANCHORS_PRESET,
        METHOD_CONTROL_SET_OFFSET,
        METHOD_CONTROL_SET_CUSTOM_MINIMUM_SIZE,
        METHOD_CONTROL_SET_H_SIZE_FLAGS,
        METHOD_CONTROL_SET_V_SIZE_FLAGS,
        METHOD_CONTROL_ADD_THEME_FONT_SIZE_OVERRIDE,
        METHOD_CONTROL_ADD_THEME_COLOR_OVERRIDE,
        METHOD_CONTROL_ADD_THEME_CONSTANT_OVERRIDE,
        METHOD_CONTROL_SET_FOCUS_MODE,
        METHOD_CONTROL_HAS_FOCUS,
        METHOD_CONTROL_SET_MOUSE_FILTER,
        METHOD_CONTROL_SET_DEFAULT_CURSOR_SHAPE,
        METHOD_CONTROL_RELEASE_FOCUS,
        METHOD_BASE_BUTTON_IS_PRESSED,
        METHOD_BASE_BUTTON_IS_HOVERED,
        METHOD_COLOR_RECT_SET_COLOR,
        METHOD_LABEL_SET_TEXT,
        METHOD_TEXTURE_RECT_SET_EXPAND_MODE,
        METHOD_TEXTURE_RECT_SET_STRETCH_MODE,
        METHOD_BUTTON_SET_TEXT,
        METHOD_LINE_EDIT_SET_TEXT,
        METHOD_LINE_EDIT_GET_TEXT,
        METHOD_LINE_EDIT_SET_PLACEHOLDER,
        METHOD_SCROLL_CONTAINER_SET_HORIZONTAL_SCROLL_MODE,
        METHOD_SCROLL_CONTAINER_SET_VERTICAL_SCROLL_MODE,
        METHOD_RESOURCE_LOADER_LOAD,
        METHOD_IMAGE_LOAD,
        METHOD_IMAGE_TEXTURE_SET_IMAGE,
        METHOD_SHADER_SET_CODE,
        METHOD_STYLE_BOX_FLAT_SET_BG_COLOR,
        METHOD_STYLE_BOX_FLAT_SET_BORDER_COLOR,
        METHOD_STYLE_BOX_FLAT_SET_BORDER_WIDTH_ALL,
        METHOD_STYLE_BOX_FLAT_SET_CORNER_RADIUS_ALL,
        METHOD_STYLE_BOX_FLAT_SET_SHADOW_COLOR,
        METHOD_STYLE_BOX_FLAT_SET_SHADOW_SIZE,
        METHOD_STYLE_BOX_FLAT_SET_SHADOW_OFFSET,
    ];

    assert!(hashes.iter().all(|hash| *hash > 0));
}