public static class TestLifecycleEventHandler implements LifecycleEventHandler {
static List<LifecycleEvent> eventList = new ArrayList<>();
@Override
public void onEvent(LifecycleEvent event) {
eventList.add(event);
}
}
@Test
public void test_lifecycle_event() throws VerificationException {
@LifecycleRegistry({ CustomerObject.class, TestLifecycleEventHandler.class })
@StateMachineBuilder
class Registry extends AbsStateMachineRegistry {
protected Registry() throws VerificationException {}
}
new Registry();
assertEquals(0, TestLifecycleEventHandler.eventList.size());
final CustomerObject customer = new CustomerObject();
assertEquals(0, TestLifecycleEventHandler.eventList.size());
customer.confirm();
{
assertEquals(1, TestLifecycleEventHandler.eventList.size());
LifecycleEvent lifecycleEvent = TestLifecycleEventHandler.eventList.get(TestLifecycleEventHandler.eventList.size() - 1);
assertLifecycleEvent(customer, lifecycleEvent, CustomerStateMachine.States.Draft.class,
CustomerStateMachine.States.Confirmed.ConfirmedStates.InService.class, CustomerStateMachine.Transitions.Confirm.class);
}
customer.suspend();
{
assertEquals(2, TestLifecycleEventHandler.eventList.size());
LifecycleEvent lifecycleEvent = TestLifecycleEventHandler.eventList.get(TestLifecycleEventHandler.eventList.size() - 1);
assertLifecycleEvent(customer, lifecycleEvent, CustomerStateMachine.States.Confirmed.ConfirmedStates.InService.class,
CustomerStateMachine.States.Confirmed.ConfirmedStates.ServiceSuspended.class,
CustomerStateMachine.States.Confirmed.Transitions.Suspend.class);
}
customer.resume();
{
assertEquals(3, TestLifecycleEventHandler.eventList.size());
LifecycleEvent lifecycleEvent = TestLifecycleEventHandler.eventList.get(TestLifecycleEventHandler.eventList.size() - 1);
assertLifecycleEvent(customer, lifecycleEvent, CustomerStateMachine.States.Confirmed.ConfirmedStates.ServiceSuspended.class,
CustomerStateMachine.States.Confirmed.ConfirmedStates.InService.class, CustomerStateMachine.States.Confirmed.Transitions.Resume.class);
}
customer.terminateService();
{
assertEquals(4, TestLifecycleEventHandler.eventList.size());
LifecycleEvent lifecycleEvent = TestLifecycleEventHandler.eventList.get(TestLifecycleEventHandler.eventList.size() - 1);
assertLifecycleEvent(customer, lifecycleEvent, CustomerStateMachine.States.Confirmed.ConfirmedStates.InService.class,
CustomerStateMachine.States.Confirmed.ConfirmedStates.ServiceExpired.class,
CustomerStateMachine.States.Confirmed.Transitions.TerminateService.class);
}
customer.renew();
{
assertEquals(5, TestLifecycleEventHandler.eventList.size());
LifecycleEvent lifecycleEvent = TestLifecycleEventHandler.eventList.get(TestLifecycleEventHandler.eventList.size() - 1);
assertLifecycleEvent(customer, lifecycleEvent, CustomerStateMachine.States.Confirmed.ConfirmedStates.ServiceExpired.class,
CustomerStateMachine.States.Confirmed.ConfirmedStates.InService.class, CustomerStateMachine.States.Confirmed.Transitions.Renew.class);
}
customer.terminateService();
{
assertEquals(6, TestLifecycleEventHandler.eventList.size());
LifecycleEvent lifecycleEvent = TestLifecycleEventHandler.eventList.get(TestLifecycleEventHandler.eventList.size() - 1);
assertLifecycleEvent(customer, lifecycleEvent, CustomerStateMachine.States.Confirmed.ConfirmedStates.InService.class,
CustomerStateMachine.States.Confirmed.ConfirmedStates.ServiceExpired.class,
CustomerStateMachine.States.Confirmed.Transitions.TerminateService.class);
}
customer.abandon();
{
assertEquals(7, TestLifecycleEventHandler.eventList.size());
LifecycleEvent lifecycleEvent = TestLifecycleEventHandler.eventList.get(TestLifecycleEventHandler.eventList.size() - 1);
assertLifecycleEvent(customer, lifecycleEvent, CustomerStateMachine.States.Confirmed.ConfirmedStates.ServiceExpired.class,
CustomerStateMachine.States.Recycled.class, CustomerStateMachine.States.Confirmed.Transitions.Abandon.class);
}
customer.putBack();
{
assertEquals(8, TestLifecycleEventHandler.eventList.size());
LifecycleEvent lifecycleEvent = TestLifecycleEventHandler.eventList.get(TestLifecycleEventHandler.eventList.size() - 1);
assertLifecycleEvent(customer, lifecycleEvent, CustomerStateMachine.States.Recycled.class, CustomerStateMachine.States.Draft.class,
CustomerStateMachine.Transitions.PutBack.class);
}
try {
customer.renew();
} catch (LifecycleException e) {
assertEquals(8, TestLifecycleEventHandler.eventList.size());
}
}
private void assertLifecycleEvent(CustomerObject reactiveObject, LifecycleEvent lifecycleEvent, Class<?> fromClass, Class<?> toClass, Class<?> transition) {
assertEquals(reactiveObject, lifecycleEvent.getReactiveObject());
assertEquals(fromClass.getSimpleName(), lifecycleEvent.fromState());
assertEquals(toClass.getSimpleName(), lifecycleEvent.toState());
assertEquals(transition.getSimpleName(), lifecycleEvent.transition());
assertEquals(TransitionTypeEnum.Common, lifecycleEvent.transitionType());
}
前文:生命周期组件框架——关系型状态及服务
相关推荐
近期,我深入研究了一个名为“生命周期组件框架——关系型状态机服务”的框架,其旨在简化这一过程,并通过关系型状态机来管理组件的生命周期。接下来,我将详细介绍这个框架的核心概念、源码实现以及其作为工具的...
在这个"生命周期钩子函数——domo.zip"压缩包中,我们可能找到了关于React组件生命周期和实现轮播图案例的代码示例。 首先,我们要理解React组件的生命周期分为三个主要阶段:挂载阶段(Mounting)、更新阶段...
【OpenHarmony】ArkTS 语法基础 ③ ( @Component 自定义组件生命周期回调函数 | @Entry 页面生命周期回调函数 ) https://hanshuliang.blog.csdn.net/article/details/139424435 博客源码快照 一、ArkTS @Component ...
本篇文章将深入探讨"Angular中的生命周期函数——动态挂载销毁组件"这一主题。 1. 组件的生命周期 组件从创建到销毁的过程中会经历多个阶段,每个阶段都有特定的生命周期钩子与之对应。理解这些钩子对于优化性能和...
android activity生命周期示例代码。里面包含activity执行finish之后的生命周期,旋转的生命周期。切换以及返回activity的生命周期。我的博客地址:http://blog.csdn.net/qq_16064871
在“vue.js组件示例:小学竖式与拖式20题练习”这个项目中,开发者构建了一个教育应用程序,旨在帮助小学生进行数学练习,特别是竖式运算和拖拽解答方式的题目。下面我们将深入探讨这个项目中的关键知识点。 首先,...
在Android应用开发中,Activity是用户界面的基本单元,它负责展示...在提供的`Activity_04`文件中,可能包含了演示这些生命周期方法变化的代码示例,通过学习和分析这些示例,开发者可以加深对Activity生命周期的理解。
标题 "Tomcat 生命周期与事件管理——LifeCycle & Event" 涉及到的是Apache Tomcat服务器的核心运行机制。Tomcat是Java Servlet和JavaServer Pages(JSP)技术的开源Web应用服务器,它遵循Java EE规范,是开发和部署...
本示例项目“Android activity生命周期示例”旨在帮助开发者深入理解Activity的生命周期及其各个阶段,这对于优化用户体验和资源管理至关重要。 Activity的生命周期包括以下几个主要状态: 1. **创建(Created)**...
### 理解Flex3的组件和框架的生命周期 #### 一、引言 Adobe Flex 框架作为一款强大的富互联网应用开发工具,在其发展过程中展现出了卓越的技术能力和广泛的适用性。然而,正如文中所述,尽管 Flex 框架提供了详尽...
这个名为"react-一个npm包用于跟踪和可视化任意React组件的生命周期方法"的资源提供了一个工具,帮助开发者理解和调试React组件的生命周期。在React中,组件有三个主要的生命周期阶段:挂载阶段(Mounting)、更新...
Vue v-for computed 生命周期和模板引用 语法示例演示代码Vue v-for computed 生命周期和模板引用 语法示例演示代码Vue v-for computed 生命周期和模板引用 语法示例演示代码Vue v-for computed 生命周期和模板引用 ...
### Android四大基本组件及其生命周期详解 #### 一、Android四大基本组件概述 Android四大基本组件是Android应用程序的核心组成部分,它们分别是Activity、Service、ContentProvider和BroadcastReceiver。这四个...
- **生命周期绑定**:Autodispose能够将RxJava的Observable、Flowable或其他数据流自动绑定到Android的生命周期组件(如Activity、Fragment)。一旦生命周期组件销毁,订阅也会自动取消,防止内存泄漏。 - **简单...
此外,还新增了一些生命周期钩子,如 `onMounted`、`onUpdated` 和 `onActivated` 等,使得组件状态管理更为精确。 8. **模板语法增强**:Vue3 的模板语法也有所增强,如模板中的条件表达式和循环语句更加强大,...
理解Activity的生命周期和启动模式对于开发高效、稳定的应用至关重要。让我们深入探讨Activity的7大生命周期以及4种启动模式。 **Activity生命周期** Activity的生命周期包括了从创建到销毁的各个阶段,主要有以下...
《软件开发生命周期与统一建模语言UML》是一门深度探讨软件工程核心概念的课程,其中涵盖了软件开发过程的各个阶段以及UML这一强大的建模工具。这门电子教案以PPT的形式提供了丰富的教学资源,旨在帮助学习者理解和...
在描述"Disposer:使用Android的生命周期轻松部署RxJava流"中,我们可以理解Disposer的核心功能是它与Android组件的生命周期紧密集成。这意味着当Activity或Fragment被销毁时,Disposer会自动取消相关的RxJava订阅,...
通过示例程序,开发者可以深入理解这些阶段如何协同工作,以及如何在不同场景下适当地介入和调整JSF生命周期。总的来说,JSF生命周期提供了一个结构化的框架,使得开发者能够更专注于业务逻辑和用户界面的实现,而...
4. **页面生命周期**:小程序的每个页面都有其特定的生命周期,包括onLoad、onShow、onReady、onHide、onUnload等方法,开发者可以根据这些生命周期钩子函数来处理页面的加载、显示、隐藏和卸载等状态。 5. **数据...