mirror of
https://github.com/google/pebble.git
synced 2025-03-20 19:01:21 +00:00
120 lines
4.2 KiB
C
120 lines
4.2 KiB
C
/*
|
|
* Copyright 2024 Google LLC
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#include "clar.h"
|
|
#include "pebble_asserts.h"
|
|
|
|
#include "applib/ui/text_layer_flow.h"
|
|
#include "applib/ui/scroll_layer.h"
|
|
|
|
// Stubs
|
|
/////////////////////
|
|
#include "stubs_app_state.h"
|
|
#include "stubs_fonts.h"
|
|
#include "stubs_graphics.h"
|
|
#include "stubs_heap.h"
|
|
#include "stubs_logging.h"
|
|
#include "stubs_passert.h"
|
|
#include "stubs_pbl_malloc.h"
|
|
#include "stubs_pebble_tasks.h"
|
|
#include "stubs_ui_window.h"
|
|
#include "stubs_process_manager.h"
|
|
#include "stubs_system_theme.h"
|
|
#include "stubs_text_layout.h"
|
|
#include "stubs_unobstructed_area.h"
|
|
|
|
void graphics_context_set_fill_color(GContext* ctx, GColor color){}
|
|
void graphics_context_set_text_color(GContext* ctx, GColor color){}
|
|
|
|
// Fakes
|
|
////////////////////////
|
|
|
|
Layer *scroll_layer_is_instance_value;
|
|
bool scroll_layer_is_instance(const Layer *layer) {
|
|
return scroll_layer_is_instance_value == layer;
|
|
}
|
|
|
|
TextLayer text_layer;
|
|
Window window;
|
|
|
|
void test_text_layer_flow__initialize(void) {
|
|
window = (Window){.layer.window = &window};
|
|
text_layer_init(&text_layer, &GRect(10, 20, 30, 40));
|
|
text_layer.layer.window = &window;
|
|
scroll_layer_is_instance_value = NULL;
|
|
}
|
|
|
|
void test_text_layer_flow__cleanup(void) {
|
|
}
|
|
|
|
void test_text_layer_flow__return_value_handling(void) {
|
|
GPoint origin;
|
|
GRect page;
|
|
cl_assert(false == text_layer_calc_text_flow_paging_values(&text_layer, &origin, &page));
|
|
layer_add_child(&window.layer, &text_layer.layer);
|
|
cl_assert(true == text_layer_calc_text_flow_paging_values(&text_layer, &origin, &page));
|
|
cl_assert(true == text_layer_calc_text_flow_paging_values(&text_layer, &origin, NULL));
|
|
cl_assert(true == text_layer_calc_text_flow_paging_values(&text_layer, NULL, &page));
|
|
cl_assert(true == text_layer_calc_text_flow_paging_values(&text_layer, NULL, NULL));
|
|
cl_assert(false == text_layer_calc_text_flow_paging_values(NULL, NULL, NULL));
|
|
|
|
cl_assert_equal_gpoint(origin, text_layer.layer.frame.origin);
|
|
cl_assert_equal_gpoint(page.origin, origin);
|
|
cl_assert_equal_gsize(page.size, GSize(text_layer.layer.frame.size.w,
|
|
TEXT_LAYER_FLOW_DEFAULT_PAGING_HEIGHT));
|
|
}
|
|
|
|
void test_text_layer_flow__paging_container(void) {
|
|
Layer container;
|
|
layer_init(&container, &GRect(30, 40, 100, 10));
|
|
layer_add_child(&window.layer, &container);
|
|
layer_add_child(&container, &text_layer.layer);
|
|
|
|
GPoint origin;
|
|
GRect page;
|
|
scroll_layer_is_instance_value = NULL;
|
|
cl_assert(true == text_layer_calc_text_flow_paging_values(&text_layer, &origin, &page));
|
|
|
|
// text_layer's absolute coordinate as
|
|
cl_assert_equal_gpoint(origin, GPoint(40, 60));
|
|
// text_layer's absolute coordinate as there's no container
|
|
cl_assert_equal_gpoint(page.origin, GPoint(40, 60));
|
|
cl_assert_equal_gsize(page.size, GSize(30, TEXT_LAYER_FLOW_DEFAULT_PAGING_HEIGHT));
|
|
|
|
scroll_layer_is_instance_value = &container;
|
|
cl_assert(true == text_layer_calc_text_flow_paging_values(&text_layer, &origin, &page));
|
|
|
|
cl_assert_equal_gpoint(origin, GPoint(40, 60));
|
|
// containers's absolute coordinate
|
|
cl_assert_equal_gpoint(page.origin, GPoint(30, 40));
|
|
cl_assert_equal_gsize(page.size, GSize(100, 10));
|
|
}
|
|
|
|
void test_text_layer_flow__no_overflow_on_default_page_height(void) {
|
|
// first, make sure that grect_max_y itself overflows
|
|
cl_assert(grect_get_max_y(&(GRect){.origin.y = 1, .size.h = INT16_MAX}) < 0);
|
|
|
|
text_layer.layer.frame.origin.y = 1;
|
|
layer_add_child(&window.layer, &text_layer.layer);
|
|
|
|
GPoint origin;
|
|
GRect page;
|
|
cl_assert(text_layer_calc_text_flow_paging_values(&text_layer, &origin, &page));
|
|
cl_assert_equal_i(page.origin.y, text_layer.layer.frame.origin.y);
|
|
|
|
// must not overflow
|
|
cl_assert(grect_get_max_y(&page) > 0);
|
|
}
|