CrabUI
Loading...
Searching...
No Matches
LayoutUpdatePattern.cs
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Reflection;
5using System.Diagnostics;
6using System.Runtime.CompilerServices;
7using System.IO;
8
9using Barotrauma;
10using Microsoft.Xna.Framework;
11using Microsoft.Xna.Framework.Input;
12using Microsoft.Xna.Framework.Graphics;
13using HarmonyLib;
14using CrabUI;
15
16namespace CrabUITest
17{
18 public class LayoutUpdatePattern : UnitTest
19 {
20 public struct Expectations
21 {
22 public bool Changed;
23 public bool AbsoluteChanged;
24 public bool DecorChanged;
25
26 public Expectations(bool changed, bool absoluteChanged, bool decorChanged)
27 {
28 Changed = changed;
29 AbsoluteChanged = absoluteChanged;
30 DecorChanged = decorChanged;
31 }
32 }
33
34 public Dictionary<string, CUIComponent> Family = new();
35
36 public override void Prepare()
37 {
38 Family["GrandParent"] = new CUIComponent();
39 Family["Parent"] = new CUIComponent();
40 Family["Me"] = new CUIComponent();
41 Family["Child"] = new CUIComponent();
42 Family["GrandChild"] = new CUIComponent();
43 Family["Sister"] = new CUIComponent();
44 Family["GrandSister"] = new CUIComponent();
45 Family["Uncle"] = new CUIComponent();
46 Family["Cousin"] = new CUIComponent();
47
48 Family["GrandParent"].Append(Family["Parent"]).Append(Family["Me"]).Append(Family["Child"]).Append(Family["GrandChild"]);
49 Family["Parent"].Append(Family["Sister"]).Append(Family["GrandSister"]);
50 Family["GrandParent"].Append(Family["Uncle"]).Append(Family["Cousin"]);
51 }
52
53 public void OnPropChangedTest()
54 {
55 Dictionary<string, Expectations> Expected = new()
56 {
57 { "GrandParent" , new Expectations(false, false, false) },
58 { "Parent" , new Expectations(true, false, true ) },
59 { "Me" , new Expectations(true, false, true ) },
60 { "Child" , new Expectations(true, false, true ) },
61 { "GrandChild" , new Expectations(true, false, true ) },
62 { "Sister" , new Expectations(true, false, true ) },
63 { "GrandSister" , new Expectations(true, false, true ) },
64 { "Uncle" , new Expectations(false, false, false) },
65 { "Cousin" , new Expectations(false, false, false) },
66 };
67
68 Family["GrandParent"].Layout.ForceMarkUnchanged();
69 Family["Me"].OnPropChanged();
70
71 Describe("---------------------", () => { Expect("Changed"); });
72 foreach (string name in Family.Keys)
73 {
74 Describe($"{name}.Changed", () => { Expect(Family[name].Layout.Changed).ToBeEqual(Expected[name].Changed); });
75 }
76
77 Describe("---------------------", () => { Expect("AbsoluteChanged"); });
78 foreach (string name in Family.Keys)
79 {
80 Describe($"{name}.AbsoluteChanged", () => { Expect(Family[name].Layout.AbsoluteChanged).ToBeEqual(Expected[name].AbsoluteChanged); });
81 }
82
83 Describe("---------------------", () => { Expect("DecorChanged"); });
84 foreach (string name in Family.Keys)
85 {
86 Describe($"{name}.DecorChanged", () => { Expect(Family[name].Layout.DecorChanged).ToBeEqual(Expected[name].DecorChanged); });
87 }
88 }
89
90 public void OnChildrenPropChangedTest()
91 {
92 Dictionary<string, Expectations> Expected = new()
93 {
94 { "GrandParent" , new Expectations(false, false, false) },
95 { "Parent" , new Expectations(false, false, false) },
96 { "Me" , new Expectations(true, false, true ) },
97 { "Child" , new Expectations(true, false, true ) },
98 { "GrandChild" , new Expectations(true, false, true ) },
99 { "Sister" , new Expectations(false, false, false) },
100 { "GrandSister" , new Expectations(false, false, false) },
101 { "Uncle" , new Expectations(false, false, false) },
102 { "Cousin" , new Expectations(false, false, false) },
103 };
104
105 Family["GrandParent"].Layout.ForceMarkUnchanged();
106 Family["Me"].OnChildrenPropChanged();
107
108 Describe("---------------------", () => { Expect("Changed"); });
109 foreach (string name in Family.Keys)
110 {
111 Describe($"{name}.Changed", () => { Expect(Family[name].Layout.Changed).ToBeEqual(Expected[name].Changed); });
112 }
113
114 Describe("---------------------", () => { Expect("AbsoluteChanged"); });
115 foreach (string name in Family.Keys)
116 {
117 Describe($"{name}.AbsoluteChanged", () => { Expect(Family[name].Layout.AbsoluteChanged).ToBeEqual(Expected[name].AbsoluteChanged); });
118 }
119
120 Describe("---------------------", () => { Expect("DecorChanged"); });
121 foreach (string name in Family.Keys)
122 {
123 Describe($"{name}.DecorChanged", () => { Expect(Family[name].Layout.DecorChanged).ToBeEqual(Expected[name].DecorChanged); });
124 }
125 }
126
127 public void OnAbsolutePropChangedTest()
128 {
129 Dictionary<string, Expectations> Expected = new()
130 {
131 { "GrandParent" , new Expectations(false, false, false) },
132 { "Parent" , new Expectations(false, true, false ) },
133 { "Me" , new Expectations(false, false, false ) },
134 { "Child" , new Expectations(false, false, false ) },
135 { "GrandChild" , new Expectations(false, false, false ) },
136 { "Sister" , new Expectations(false, false, false ) },
137 { "GrandSister" , new Expectations(false, false, false ) },
138 { "Uncle" , new Expectations(false, false, false) },
139 { "Cousin" , new Expectations(false, false, false) },
140 };
141
142 Family["GrandParent"].Layout.ForceMarkUnchanged();
143 Family["Me"].OnAbsolutePropChanged();
144
145 Describe("---------------------", () => { Expect("Changed"); });
146 foreach (string name in Family.Keys)
147 {
148 Describe($"{name}.Changed", () => { Expect(Family[name].Layout.Changed).ToBeEqual(Expected[name].Changed); });
149 }
150
151 Describe("---------------------", () => { Expect("AbsoluteChanged"); });
152 foreach (string name in Family.Keys)
153 {
154 Describe($"{name}.AbsoluteChanged", () => { Expect(Family[name].Layout.AbsoluteChanged).ToBeEqual(Expected[name].AbsoluteChanged); });
155 }
156
157 Describe("---------------------", () => { Expect("DecorChanged"); });
158 foreach (string name in Family.Keys)
159 {
160 Describe($"{name}.DecorChanged", () => { Expect(Family[name].Layout.DecorChanged).ToBeEqual(Expected[name].DecorChanged); });
161 }
162 }
163
164 public void OnDecorPropChangedTest()
165 {
166 Dictionary<string, Expectations> Expected = new()
167 {
168 { "GrandParent" , new Expectations(false, false, false) },
169 { "Parent" , new Expectations(false, false, false ) },
170 { "Me" , new Expectations(false, false, true ) },
171 { "Child" , new Expectations(false, false, false ) },
172 { "GrandChild" , new Expectations(false, false, false ) },
173 { "Sister" , new Expectations(false, false, false ) },
174 { "GrandSister" , new Expectations(false, false, false ) },
175 { "Uncle" , new Expectations(false, false, false) },
176 { "Cousin" , new Expectations(false, false, false) },
177 };
178
179 Family["GrandParent"].Layout.ForceMarkUnchanged();
180 Family["Me"].OnDecorPropChanged();
181
182 Describe("---------------------", () => { Expect("Changed"); });
183 foreach (string name in Family.Keys)
184 {
185 Describe($"{name}.Changed", () => { Expect(Family[name].Layout.Changed).ToBeEqual(Expected[name].Changed); });
186 }
187
188 Describe("---------------------", () => { Expect("AbsoluteChanged"); });
189 foreach (string name in Family.Keys)
190 {
191 Describe($"{name}.AbsoluteChanged", () => { Expect(Family[name].Layout.AbsoluteChanged).ToBeEqual(Expected[name].AbsoluteChanged); });
192 }
193
194 Describe("---------------------", () => { Expect("DecorChanged"); });
195 foreach (string name in Family.Keys)
196 {
197 Describe($"{name}.DecorChanged", () => { Expect(Family[name].Layout.DecorChanged).ToBeEqual(Expected[name].DecorChanged); });
198 }
199 }
200
201
202 }
203}
Base class for all components.