1+ using System . Collections . Generic ;
2+ using Eocron . Algorithms . UI . Editing ;
3+ using FluentAssertions ;
4+ using NUnit . Framework ;
5+
6+ namespace Eocron . Algorithms . Tests ;
7+
8+ [ TestFixture ]
9+ public class EditSessionTests
10+ {
11+ private TestDocument _document ;
12+
13+ [ Test ]
14+ public void Check_DeepSetAndUndo ( )
15+ {
16+ var session = new EditSession < TestDocument > ( _document ) ;
17+ session . BeginEdit ( ) ;
18+ session . CanRedo . Should ( ) . BeFalse ( ) ;
19+ session . CanUndo . Should ( ) . BeFalse ( ) ;
20+
21+ session . SetProperty ( x=> x . Inner . Inner . Id , "3" ) ;
22+
23+ session . Draft . Should ( ) . BeEquivalentTo ( new TestDocument
24+ {
25+ Id = "1" ,
26+ Inner = new TestDocument
27+ {
28+ Id = "2" ,
29+ Inner = new TestDocument ( )
30+ {
31+ Id = "3"
32+ }
33+ }
34+ } ) ;
35+
36+ session . Undo ( ) ;
37+ session . Draft . Should ( ) . BeEquivalentTo ( new TestDocument
38+ {
39+ Id = "1" ,
40+ Inner = new TestDocument
41+ {
42+ Id = "2"
43+ }
44+ } ) ;
45+ }
46+
47+ [ Test ]
48+ public void Check_SetAndUndoAndRedo ( )
49+ {
50+ var session = new EditSession < TestDocument > ( _document ) ;
51+ session . BeginEdit ( ) ;
52+ session . SetProperty ( x=> x . Id , "3" ) ;
53+
54+ session . CanRedo . Should ( ) . BeFalse ( ) ;
55+ session . CanUndo . Should ( ) . BeTrue ( ) ;
56+
57+ session . Draft . Should ( ) . BeEquivalentTo ( new TestDocument
58+ {
59+ Id = "3" ,
60+ Inner = new TestDocument
61+ {
62+ Id = "2"
63+ }
64+ } ) ;
65+
66+ session . Undo ( ) ;
67+ session . CanRedo . Should ( ) . BeTrue ( ) ;
68+ session . CanUndo . Should ( ) . BeFalse ( ) ;
69+ session . Draft . Should ( ) . BeEquivalentTo ( new TestDocument
70+ {
71+ Id = "1" ,
72+ Inner = new TestDocument
73+ {
74+ Id = "2"
75+ }
76+ } ) ;
77+
78+ session . Redo ( ) ;
79+
80+ session . CanRedo . Should ( ) . BeFalse ( ) ;
81+ session . CanUndo . Should ( ) . BeTrue ( ) ;
82+ session . Draft . Should ( ) . BeEquivalentTo ( new TestDocument
83+ {
84+ Id = "3" ,
85+ Inner = new TestDocument
86+ {
87+ Id = "2"
88+ }
89+ } ) ;
90+ }
91+
92+
93+ [ Test ]
94+ public void Check_SetAndUndoAndSet ( )
95+ {
96+ var session = new EditSession < TestDocument > ( _document ) ;
97+ session . BeginEdit ( ) ;
98+ session . SetProperty ( x=> x . Id , "3" ) ;
99+
100+ session . CanRedo . Should ( ) . BeFalse ( ) ;
101+ session . CanUndo . Should ( ) . BeTrue ( ) ;
102+
103+ session . Draft . Should ( ) . BeEquivalentTo ( new TestDocument
104+ {
105+ Id = "3" ,
106+ Inner = new TestDocument
107+ {
108+ Id = "2"
109+ }
110+ } ) ;
111+
112+ session . Undo ( ) ;
113+ session . CanRedo . Should ( ) . BeTrue ( ) ;
114+ session . CanUndo . Should ( ) . BeFalse ( ) ;
115+ session . Draft . Should ( ) . BeEquivalentTo ( new TestDocument
116+ {
117+ Id = "1" ,
118+ Inner = new TestDocument
119+ {
120+ Id = "2"
121+ }
122+ } ) ;
123+
124+ session . SetProperty ( x=> x . Id , "4" ) ;
125+
126+ session . CanRedo . Should ( ) . BeFalse ( ) ;
127+ session . CanUndo . Should ( ) . BeTrue ( ) ;
128+ session . Draft . Should ( ) . BeEquivalentTo ( new TestDocument
129+ {
130+ Id = "4" ,
131+ Inner = new TestDocument
132+ {
133+ Id = "2"
134+ }
135+ } ) ;
136+ }
137+
138+ [ Test ]
139+ public void Check_InitialState ( )
140+ {
141+ var session = new EditSession < TestDocument > ( _document ) ;
142+ session . BeginEdit ( ) ;
143+ session . CanRedo . Should ( ) . BeFalse ( ) ;
144+ session . CanUndo . Should ( ) . BeFalse ( ) ;
145+ }
146+
147+ [ SetUp ]
148+ public void Setup ( )
149+ {
150+ _document = new TestDocument
151+ {
152+ Id = "1" ,
153+ Inner = new TestDocument
154+ {
155+ Id = "2" ,
156+ }
157+ } ;
158+ }
159+
160+ public class TestDocument
161+ {
162+ public string Id { get ; set ; }
163+
164+ public TestDocument Inner { get ; set ; }
165+
166+ public List < TestDocument > Chidlren { get ; set ; }
167+ }
168+ }
0 commit comments