1 /*
2  *  "GEDKeeper", the personal genealogical database editor.
3  *  Copyright (C) 2009-2021 by Sergey V. Zhdanovskih.
4  *
5  *  This file is part of "GEDKeeper".
6  *
7  *  This program is free software: you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation, either version 3 of the License, or
10  *  (at your option) any later version.
11  *
12  *  This program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
19  */
20 
21 using System;
22 using System.IO;
23 using BSLib;
24 using GDModel;
25 using GDModel.Providers.GEDCOM;
26 using GKCore.Cultures;
27 using GKCore.Operations;
28 using GKCore.Types;
29 using GKTests;
30 using GKUI.Platform;
31 using NUnit.Framework;
32 
33 namespace GKCore
34 {
35     [TestFixture]
36     public class BaseContextTests
37     {
38         private BaseContext fContext;
39 
40         [TestFixtureSetUp]
SetUp()41         public void SetUp()
42         {
43             TestUtils.InitGEDCOMProviderTest();
44             WFAppHost.ConfigureBootstrap(false);
45             TestUtils.InitProgressStub();
46             LangMan.DefInit();
47 
48             fContext = TestUtils.CreateContext();
49             TestUtils.FillContext(fContext);
50         }
51 
52         [Test]
Test_Common()53         public void Test_Common()
54         {
55             Assert.IsNull(fContext.Viewer);
56 
57             GDMIndividualRecord iRec = fContext.Tree.XRefIndex_Find("I1") as GDMIndividualRecord;
58             Assert.IsNotNull(iRec);
59 
60             Assert.AreEqual(1990, iRec.GetChronologicalYear(GEDCOMTagName.BIRT));
61 
62             Assert.AreEqual(1990, fContext.FindBirthYear(iRec));
63             Assert.AreEqual(2010, fContext.FindDeathYear(iRec));
64 
65             // FIXME: error during execution of tests under TravisCI (a problem with UI)
66             //var patrGraph = PatriarchsMan.GetPatriarchsGraph(fContext, 1, true, false);
67             //Assert.IsNotNull(patrGraph);
68         }
69 
70         [Test]
Test_IsChildless()71         public void Test_IsChildless()
72         {
73             GDMIndividualRecord iRec = fContext.Tree.XRefIndex_Find("I1") as GDMIndividualRecord;
74             Assert.IsNotNull(iRec);
75 
76             Assert.AreEqual(false, fContext.IsChildless(iRec));
77         }
78 
79         [Test]
Test_LockRecord()80         public void Test_LockRecord()
81         {
82             GDMIndividualRecord iRec = fContext.Tree.XRefIndex_Find("I1") as GDMIndividualRecord;
83             Assert.IsNotNull(iRec);
84 
85             fContext.LockRecord(iRec);
86             fContext.UnlockRecord(iRec);
87         }
88 
89         [Test]
Test_DeleteRecord()90         public void Test_DeleteRecord()
91         {
92             Assert.IsFalse(fContext.DeleteRecord(null));
93 
94             Assert.IsTrue(fContext.DeleteRecord(fContext.Tree.CreateIndividual()));
95             Assert.IsTrue(fContext.DeleteRecord(fContext.Tree.CreateFamily()));
96             Assert.IsTrue(fContext.DeleteRecord(fContext.Tree.CreateNote()));
97             Assert.IsTrue(fContext.DeleteRecord(fContext.Tree.CreateMultimedia()));
98             Assert.IsTrue(fContext.DeleteRecord(fContext.Tree.CreateSource()));
99             Assert.IsTrue(fContext.DeleteRecord(fContext.Tree.CreateRepository()));
100             Assert.IsTrue(fContext.DeleteRecord(fContext.Tree.CreateGroup()));
101             Assert.IsTrue(fContext.DeleteRecord(fContext.Tree.CreateResearch()));
102             Assert.IsTrue(fContext.DeleteRecord(fContext.Tree.CreateTask()));
103             Assert.IsTrue(fContext.DeleteRecord(fContext.Tree.CreateCommunication()));
104             Assert.IsTrue(fContext.DeleteRecord(fContext.Tree.CreateLocation()));
105         }
106 
107         [Test]
Test_CreateEventEx()108         public void Test_CreateEventEx()
109         {
110             GDMIndividualRecord iRec = fContext.Tree.XRefIndex_Find("I1") as GDMIndividualRecord;
111 
112             var evt = fContext.CreateEventEx(iRec, GEDCOMTagName.FACT, "17 JAN 2013", "Ivanovo");
113             Assert.IsNotNull(evt);
114 
115             GDMFamilyRecord fRec = fContext.Tree.CreateFamily();
116             Assert.IsNotNull(fRec);
117 
118             evt = fContext.CreateEventEx(fRec, GEDCOMTagName.MARR, "28 DEC 2013", "Ivanovo");
119             Assert.IsNotNull(evt);
120         }
121 
122         [Test]
Test_Updating()123         public void Test_Updating()
124         {
125             fContext.BeginUpdate();
126             Assert.IsTrue(fContext.IsUpdated());
127             fContext.EndUpdate();
128             Assert.IsFalse(fContext.IsUpdated());
129         }
130 
131         [Test]
Test_CollectNameLangs()132         public void Test_CollectNameLangs()
133         {
134             GDMIndividualRecord iRec = fContext.Tree.XRefIndex_Find("I1") as GDMIndividualRecord;
135 
136             Assert.IsNotNull(fContext.LangsList);
137             Assert.AreEqual(0, fContext.LangsList.Count);
138             fContext.CollectNameLangs(null);
139             iRec.PersonalNames[0].Language = GDMLanguageID.AncientGreek;
140             fContext.CollectNameLangs(iRec.PersonalNames[0]);
141             Assert.AreEqual(1, fContext.LangsList.Count);
142         }
143 
144         [Test]
Test_SetFileName()145         public void Test_SetFileName()
146         {
147             fContext.SetFileName("testfile.ged");
148             Assert.AreEqual("testfile.ged", fContext.FileName);
149         }
150 
151         [Test]
Test_FindSource()152         public void Test_FindSource()
153         {
154             GDMSourceRecord srcRec = fContext.FindSource("test source");
155             Assert.IsNull(srcRec);
156         }
157 
158         [Test]
Test_GetSourcesList()159         public void Test_GetSourcesList()
160         {
161             var sources = new StringList();
162             fContext.GetSourcesList(sources);
163             Assert.AreEqual(1, sources.Count);
164         }
165 
166         [Test]
Test_SwitchShieldState()167         public void Test_SwitchShieldState()
168         {
169             Assert.AreEqual(ShieldState.Maximum, fContext.ShieldState, "BaseContext.ShieldState.1");
170 
171             fContext.SwitchShieldState();
172             Assert.AreEqual(ShieldState.Middle, fContext.ShieldState, "BaseContext.ShieldState.2");
173 
174             fContext.SwitchShieldState();
175             Assert.AreEqual(ShieldState.None, fContext.ShieldState, "BaseContext.ShieldState.3");
176 
177             fContext.SwitchShieldState();
178             Assert.AreEqual(ShieldState.Maximum, fContext.ShieldState, "BaseContext.ShieldState.4");
179         }
180 
181         [Test]
Test_GetStoreType()182         public void Test_GetStoreType()
183         {
184             Assert.Throws(typeof(ArgumentNullException), () => { fContext.GetStoreType(null); });
185 
186             var fileRef = new GDMFileReference();
187             fileRef.ParseString("file.txt");
188             var mediaStore = fContext.GetStoreType(fileRef);
189             Assert.AreEqual(MediaStoreType.mstReference, mediaStore.StoreType);
190 
191             fileRef.ParseString("stg:file.txt");
192             mediaStore = fContext.GetStoreType(fileRef);
193             Assert.AreEqual(MediaStoreType.mstStorage, mediaStore.StoreType);
194 
195             fileRef.ParseString("arc:file.txt");
196             mediaStore = fContext.GetStoreType(fileRef);
197             Assert.AreEqual(MediaStoreType.mstArchive, mediaStore.StoreType);
198 
199             fileRef.ParseString("rel:file.txt");
200             mediaStore = fContext.GetStoreType(fileRef);
201             Assert.AreEqual(MediaStoreType.mstRelativeReference, mediaStore.StoreType);
202         }
203 
204         [Test]
Test_Clear()205         public void Test_Clear()
206         {
207             BaseContext context = TestUtils.CreateContext();
208             TestUtils.FillContext(context);
209             Assert.AreEqual(17, context.Tree.RecordsCount);
210 
211             context.Clear();
212             Assert.AreEqual(0, context.Tree.RecordsCount);
213         }
214 
215         [Test]
Test_CollectEventValues()216         public void Test_CollectEventValues()
217         {
218             Assert.IsNotNull(fContext.ValuesCollection);
219 
220             fContext.CollectEventValues(null);
221             Assert.AreEqual(0, fContext.ValuesCollection.Count);
222 
223             GDMIndividualRecord iRec = fContext.Tree.XRefIndex_Find("I1") as GDMIndividualRecord;
224             var evt = new GDMIndividualAttribute((int)GEDCOMTagType._AWARD, "Congressional Gold Medal");
225 
226             fContext.CollectEventValues(evt);
227             Assert.AreEqual(1, fContext.ValuesCollection.Count);
228         }
229 
230         [Test]
Test_LoadAndSave()231         public void Test_LoadAndSave()
232         {
233             string sourFile = TestUtils.PrepareTestFile("test1.ged");
234             string destFile = TestUtils.GetTempFilePath("test11.ged");
235             string restoreFile = Path.ChangeExtension(destFile, ".restore");
236 
237             try {
238                 using (BaseContext ctx = new BaseContext(null)) {
239                     ctx.FileLoad(sourFile);
240                     ctx.FileSave(destFile);
241                     ctx.CriticalSave();
242                 }
243             } finally {
244                 TestUtils.RemoveTestFile(sourFile);
245                 TestUtils.RemoveTestFile(destFile);
246                 TestUtils.RemoveTestFile(restoreFile);
247             }
248         }
249 
250         [Test]
Test_MediaLoadSave()251         public void Test_MediaLoadSave()
252         {
253             string sourFile = TestUtils.PrepareTestFile("shaytan_plant.jpg");
254             string gedFile = TestUtils.GetTempFilePath("test_mm.ged");
255             string stgDirectory = string.Empty, arcFileName = string.Empty;
256 
257             try {
258                 using (BaseContext ctx = new BaseContext(null)) {
259                     Assert.IsTrue(ctx.IsUnknown());
260 
261                     Assert.AreEqual(false, ctx.MediaSave(null, "", MediaStoreType.mstReference));
262                     Assert.AreEqual(null, ctx.LoadMediaImage(null, false));
263                     Assert.AreEqual(null, ctx.LoadMediaImage(null, 0, 0, ExtRect.Empty, false));
264                     Assert.AreEqual(null, ctx.GetPrimaryBitmap(null, 0, 0, false));
265                     Assert.AreEqual(null, ctx.GetPrimaryBitmapUID(null));
266 
267                     ctx.FileSave(gedFile);
268                     Assert.AreEqual(true, ctx.CheckBasePath()); // need path for archive and storage
269 
270                     var mmRecR = new GDMMultimediaRecord(ctx.Tree);
271                     mmRecR.FileReferences.Add(new GDMFileReferenceWithTitle());
272                     Assert.AreEqual(true, ctx.MediaSave(mmRecR.FileReferences[0], sourFile, MediaStoreType.mstReference));
273                     Assert.IsNotNull(ctx.LoadMediaImage(mmRecR.FileReferences[0], false));
274                     Assert.IsNotNull(ctx.MediaLoad(mmRecR.FileReferences[0]));
275 
276                     var mmRecA = new GDMMultimediaRecord(ctx.Tree);
277                     mmRecA.FileReferences.Add(new GDMFileReferenceWithTitle());
278                     Assert.AreEqual(true, ctx.MediaSave(mmRecA.FileReferences[0], sourFile, MediaStoreType.mstArchive));
279                     Assert.IsNotNull(ctx.LoadMediaImage(mmRecA.FileReferences[0], false));
280                     Assert.IsNotNull(ctx.MediaLoad(mmRecA.FileReferences[0]));
281                     arcFileName = ctx.GetArcFileName();
282 
283                     var mmRecS = new GDMMultimediaRecord(ctx.Tree);
284                     mmRecS.FileReferences.Add(new GDMFileReferenceWithTitle());
285                     Assert.AreEqual(true, ctx.MediaSave(mmRecS.FileReferences[0], sourFile, MediaStoreType.mstStorage));
286                     Assert.IsNotNull(ctx.LoadMediaImage(mmRecS.FileReferences[0], false));
287                     Assert.IsNotNull(ctx.MediaLoad(mmRecS.FileReferences[0]));
288                     stgDirectory = ctx.GetStgFolder(false);
289 
290                     var mmRecRl = new GDMMultimediaRecord(ctx.Tree);
291                     mmRecRl.FileReferences.Add(new GDMFileReferenceWithTitle());
292                     Assert.AreEqual(true, ctx.MediaSave(mmRecRl.FileReferences[0], sourFile, MediaStoreType.mstRelativeReference));
293                     Assert.IsNotNull(ctx.LoadMediaImage(mmRecRl.FileReferences[0], false));
294                     Assert.IsNotNull(ctx.MediaLoad(mmRecRl.FileReferences[0]));
295                 }
296             } finally {
297                 TestUtils.RemoveTestFile(sourFile);
298                 TestUtils.RemoveTestFile(gedFile);
299                 TestUtils.RemoveTestFile(arcFileName);
300                 TestUtils.RemoveTestDirectory(stgDirectory);
301             }
302         }
303 
304         [Test]
Test_CryptoLoadAndSave()305         public void Test_CryptoLoadAndSave()
306         {
307             using (BaseContext ctx = new BaseContext(null)) {
308                 using (Stream stmGed1 = TestUtils.LoadResourceStream("test1.ged")) {
309                     var gedcomProvider = new GEDCOMProvider(ctx.Tree);
310                     gedcomProvider.LoadFromStreamExt(stmGed1, stmGed1);
311 
312                     string tempFileName = TestUtils.GetTempFilePath("test.geds");
313 
314                     try {
315                         ctx.SaveToSecFile(tempFileName, GEDCOMCharacterSet.csASCII, "test");
316 
317                         using (var ctx2 = new BaseContext(null)) {
318                             ctx2.LoadFromSecFile(tempFileName, "test");
319                         }
320                     } finally {
321                         TestUtils.RemoveTestFile(tempFileName);
322                     }
323                 }
324             }
325         }
326 
327         [Test]
Test_IsRecordAccess()328         public void Test_IsRecordAccess()
329         {
330             fContext.ShieldState = ShieldState.None;
331             Assert.IsTrue(fContext.IsRecordAccess(GDMRestriction.rnNone));
332             Assert.IsTrue(fContext.IsRecordAccess(GDMRestriction.rnConfidential));
333             Assert.IsTrue(fContext.IsRecordAccess(GDMRestriction.rnPrivacy));
334 
335             fContext.ShieldState = ShieldState.Middle;
336             Assert.IsTrue(fContext.IsRecordAccess(GDMRestriction.rnNone));
337             Assert.IsTrue(fContext.IsRecordAccess(GDMRestriction.rnConfidential));
338             Assert.IsFalse(fContext.IsRecordAccess(GDMRestriction.rnPrivacy));
339 
340             fContext.ShieldState = ShieldState.Maximum;
341             Assert.IsTrue(fContext.IsRecordAccess(GDMRestriction.rnNone));
342             Assert.IsFalse(fContext.IsRecordAccess(GDMRestriction.rnConfidential));
343             Assert.IsFalse(fContext.IsRecordAccess(GDMRestriction.rnPrivacy));
344         }
345 
346         [Test]
Test_Culture()347         public void Test_Culture()
348         {
349             Assert.IsNotNull(fContext.Culture);
350 
351             fContext.Tree.Header.Language = GDMLanguageID.German;
352             Assert.IsInstanceOf(typeof(GermanCulture), fContext.Culture);
353 
354             fContext.Tree.Header.Language = GDMLanguageID.Polish;
355             Assert.IsInstanceOf(typeof(PolishCulture), fContext.Culture);
356 
357             fContext.Tree.Header.Language = GDMLanguageID.Swedish;
358             Assert.IsInstanceOf(typeof(SwedishCulture), fContext.Culture);
359 
360             fContext.Tree.Header.Language = GDMLanguageID.Icelandic;
361             Assert.IsInstanceOf(typeof(IcelandCulture), fContext.Culture);
362 
363             fContext.Tree.Header.Language = GDMLanguageID.Russian;
364             Assert.IsInstanceOf(typeof(RussianCulture), fContext.Culture);
365 
366             fContext.Tree.Header.Language = GDMLanguageID.Ukrainian;
367             Assert.IsInstanceOf(typeof(RussianCulture), fContext.Culture);
368 
369             fContext.Tree.Header.Language = GDMLanguageID.Armenian;
370             Assert.IsInstanceOf(typeof(ArmenianCulture), fContext.Culture);
371             Assert.IsTrue(fContext.Culture.HasPatronymic());
372             Assert.IsTrue(fContext.Culture.HasSurname());
373 
374             fContext.Tree.Header.Language = GDMLanguageID.Turkish;
375             Assert.IsInstanceOf(typeof(TurkishCulture), fContext.Culture);
376             Assert.IsFalse(fContext.Culture.HasPatronymic());
377             Assert.IsTrue(fContext.Culture.HasSurname());
378 
379             fContext.Tree.Header.Language = GDMLanguageID.French;
380             Assert.IsInstanceOf(typeof(FrenchCulture), fContext.Culture);
381 
382             fContext.Tree.Header.Language = GDMLanguageID.Italian;
383             Assert.IsInstanceOf(typeof(ItalianCulture), fContext.Culture);
384 
385             fContext.Tree.Header.Language = GDMLanguageID.Cantonese;
386             Assert.IsInstanceOf(typeof(ChineseCulture), fContext.Culture);
387 
388             fContext.Tree.Header.Language = GDMLanguageID.Mandrin;
389             Assert.IsInstanceOf(typeof(ChineseCulture), fContext.Culture);
390             Assert.IsFalse(fContext.Culture.HasPatronymic());
391             Assert.IsTrue(fContext.Culture.HasSurname());
392         }
393 
TransactionEventHandler(object sender, TransactionType type)394         private void TransactionEventHandler(object sender, TransactionType type)
395         {
396         }
397 
398         private class InvalidOperation : CustomOperation
399         {
InvalidOperation(UndoManager manager)400             public InvalidOperation(UndoManager manager) : base(manager) { }
Redo()401             public override bool Redo() { return false; }
Undo()402             public override void Undo() {}
403         }
404 
405         [Test]
Test_UndoManager()406         public void Test_UndoManager()
407         {
408             using (var undoman = new UndoManager()) {
409                 Assert.IsNotNull(undoman);
410 
411                 Assert.IsFalse(undoman.CanUndo());
412                 Assert.IsFalse(undoman.CanRedo());
413 
414                 undoman.Clear();
415 
416                 Assert.IsFalse(undoman.DoOperation(null));
417 
418                 undoman.Undo();
419                 undoman.Redo();
420                 undoman.Commit();
421                 undoman.Rollback();
422 
423                 Assert.IsFalse(undoman.DoOperation(new InvalidOperation(undoman)));
424             }
425         }
426 
427         [Test]
Test_UndoRedo()428         public void Test_UndoRedo()
429         {
430             fContext.DoUndo();
431             fContext.DoRedo();
432             fContext.DoCommit();
433             fContext.DoRollback();
434 
435             Assert.AreEqual(fContext, fContext.Undoman.Context);
436 
437             fContext.Undoman.OnTransaction += TransactionEventHandler;
438 
439             fContext.Undoman.Clear();
440 
441             GDMIndividualRecord iRec = fContext.Tree.XRefIndex_Find("I1") as GDMIndividualRecord;
442             Assert.IsNotNull(iRec);
443 
444             Assert.Throws(typeof(ArgumentNullException), () => {
445                               fContext.Undoman.DoOrdinaryOperation(
446                                   OperationType.otIndividualBookmarkChange, null, true); });
447 
448             Assert.Throws(typeof(ArgumentNullException), () => {
449                               fContext.Undoman.DoOrdinaryOperation(
450                                   OperationType.otIndividualBookmarkChange, iRec, null); });
451 
452             iRec.Bookmark = false;
453             fContext.Undoman.DoOrdinaryOperation(OperationType.otIndividualBookmarkChange, iRec, true);
454             Assert.IsTrue(iRec.Bookmark);
455             Assert.IsTrue(fContext.Undoman.CanUndo());
456             fContext.Undoman.Undo();
457             Assert.IsFalse(iRec.Bookmark);
458             Assert.IsFalse(fContext.Undoman.CanUndo());
459 
460             iRec.Patriarch = false;
461             fContext.Undoman.DoOrdinaryOperation(OperationType.otIndividualPatriarchChange, iRec, true);
462             Assert.IsTrue(iRec.Patriarch);
463             Assert.IsTrue(fContext.Undoman.CanUndo());
464             fContext.Undoman.Undo();
465             Assert.IsFalse(iRec.Patriarch);
466             Assert.IsFalse(fContext.Undoman.CanUndo());
467 
468             iRec.Sex = GDMSex.svUnknown;
469             fContext.Undoman.DoOrdinaryOperation(OperationType.otIndividualSexChange, iRec, GDMSex.svMale);
470             Assert.AreEqual(GDMSex.svMale, iRec.Sex);
471             Assert.IsTrue(fContext.Undoman.CanUndo());
472             fContext.Undoman.Undo();
473             Assert.AreEqual(GDMSex.svUnknown, iRec.Sex);
474             Assert.IsFalse(fContext.Undoman.CanUndo());
475 
476             Assert.IsTrue(fContext.Undoman.CanRedo());
477             fContext.Undoman.Redo();
478             Assert.AreEqual(GDMSex.svMale, iRec.Sex);
479             Assert.IsTrue(fContext.Undoman.CanUndo());
480 
481             fContext.Undoman.Clear();
482 
483             iRec.Bookmark = false;
484             iRec.Patriarch = false;
485             iRec.Sex = GDMSex.svUnknown;
486 
487             fContext.Undoman.DoOrdinaryOperation(OperationType.otIndividualBookmarkChange, iRec, true);
488             fContext.Undoman.DoOrdinaryOperation(OperationType.otIndividualPatriarchChange, iRec, true);
489             fContext.Undoman.DoOrdinaryOperation(OperationType.otIndividualSexChange, iRec, GDMSex.svMale);
490             fContext.Undoman.Commit();
491             Assert.IsTrue(iRec.Bookmark);
492             Assert.IsTrue(iRec.Patriarch);
493             Assert.AreEqual(GDMSex.svMale, iRec.Sex);
494             Assert.IsTrue(fContext.Undoman.CanUndo());
495             fContext.Undoman.Undo();
496             Assert.IsFalse(iRec.Bookmark);
497             Assert.IsFalse(iRec.Patriarch);
498             Assert.AreEqual(GDMSex.svUnknown, iRec.Sex);
499             Assert.IsFalse(fContext.Undoman.CanUndo());
500 
501 
502             fContext.Undoman.DoOrdinaryOperation(OperationType.otIndividualBookmarkChange, iRec, true);
503             fContext.Undoman.DoOrdinaryOperation(OperationType.otIndividualPatriarchChange, iRec, true);
504             fContext.Undoman.DoOrdinaryOperation(OperationType.otIndividualSexChange, iRec, GDMSex.svMale);
505             fContext.Undoman.Rollback();
506             Assert.IsFalse(iRec.Bookmark);
507             Assert.IsFalse(iRec.Patriarch);
508             Assert.AreEqual(GDMSex.svUnknown, iRec.Sex);
509             Assert.IsFalse(fContext.Undoman.CanUndo());
510 
511             fContext.Undoman.OnTransaction -= TransactionEventHandler;
512 
513 
514             Assert.Throws(typeof(ArgumentNullException), () => {
515                               fContext.Undoman.DoIndividualNameChange(null, "", "", ""); });
516             Assert.AreEqual("Ivanov Ivan Ivanovich", GKUtils.GetNameString(iRec, true, false));
517             fContext.Undoman.DoIndividualNameChange(iRec, "Petrov", "Alex", "Ivanovich");
518             Assert.AreEqual("Petrov Alex Ivanovich", GKUtils.GetNameString(iRec, true, false));
519             fContext.Undoman.Rollback();
520             Assert.AreEqual("Ivanov Ivan Ivanovich", GKUtils.GetNameString(iRec, true, false));
521         }
522 
523         [Test]
Test_Modified()524         public void Test_Modified()
525         {
526             Assert.IsTrue(fContext.Modified);
527         }
528 
529         [Test]
Test_DeleteMediaRecord()530         public void Test_DeleteMediaRecord()
531         {
532             Assert.Throws(typeof(ArgumentNullException), () => { fContext.DeleteMediaRecord(null); });
533         }
534 
535         [Test]
Test_FindAll()536         public void Test_FindAll()
537         {
538             var result = fContext.FindAll(GDMRecordType.rtIndividual, "ZZZ");
539             Assert.AreEqual(0, result.Count);
540         }
541 
542         [Test]
Test_CollectTips()543         public void Test_CollectTips()
544         {
545             Assert.Throws(typeof(ArgumentNullException), () => { fContext.CollectTips(null); });
546         }
547 
548         [Test]
Test_CheckPersonSex()549         public void Test_CheckPersonSex()
550         {
551             Assert.Throws(typeof(ArgumentNullException), () => { fContext.CheckPersonSex(null); });
552         }
553 
554         [Test]
Test_MediaDelete()555         public void Test_MediaDelete()
556         {
557             var result = fContext.MediaDelete(null);
558             Assert.IsFalse(result);
559         }
560 
561         [Test]
Test_VerifyMediaFile()562         public void Test_VerifyMediaFile()
563         {
564             string fileName;
565             Assert.Throws(typeof(ArgumentNullException), () => { fContext.VerifyMediaFile(null, out fileName); });
566         }
567 
568         [Test]
Test_MediaExists()569         public void Test_MediaExists()
570         {
571             var result = fContext.MediaExists(null);
572             Assert.IsFalse(result);
573         }
574 
575         [Test]
Test_IsAvailableRecord()576         public void Test_IsAvailableRecord()
577         {
578             var result = fContext.IsAvailableRecord(null);
579             Assert.IsTrue(result);
580         }
581 
582         [Test]
Test_GetChildFamily()583         public void Test_GetChildFamily()
584         {
585             var result = fContext.GetChildFamily(null, false, null);
586             Assert.IsNull(result);
587         }
588 
589         [Test]
Test_AddFamilyForSpouse()590         public void Test_AddFamilyForSpouse()
591         {
592             Assert.Throws(typeof(ArgumentNullException), () => { fContext.AddFamilyForSpouse(null); });
593         }
594 
595         [Test]
Test_AddChildForParent()596         public void Test_AddChildForParent()
597         {
598             var result = fContext.AddChildForParent(null, GDMSex.svMale);
599             Assert.IsNull(result);
600         }
601 
602         [Test]
Test_SelectSpouseFor()603         public void Test_SelectSpouseFor()
604         {
605             Assert.Throws(typeof(ArgumentNullException), () => { fContext.SelectSpouseFor(null); });
606         }
607     }
608 }
609