55using System . Linq ;
66using System . Threading ;
77using NUnit . Framework ;
8- using Xtensive . Orm . Localization . Tests . Model ;
8+ using Xtensive . Orm . Localization . Tests . CustomTypeModel ;
9+ using Xtensive . Orm . Configuration ;
10+ using Xtensive . Orm . Tests ;
11+ using English = Xtensive . Orm . Localization . Tests . WellKnownCultures . English ;
12+ using Spanish = Xtensive . Orm . Localization . Tests . WellKnownCultures . Spanish ;
913
1014namespace Xtensive . Orm . Localization . Tests
1115{
1216 [ TestFixture ]
13- public class ProjectionToCustomTypesTests : LocalizationBaseTest
17+ public class ProjectionToCustomTypesTests : AutoBuildTest
1418 {
19+ protected override DomainConfiguration BuildConfiguration ( )
20+ {
21+ var configuration = base . BuildConfiguration ( ) ;
22+ configuration . Types . Register ( typeof ( ILocalizable < > ) . Assembly ) ;
23+ configuration . Types . Register ( typeof ( Country ) . Assembly , typeof ( Country ) . Namespace ) ;
24+ configuration . UpgradeMode = DomainUpgradeMode . Recreate ;
25+ return configuration ;
26+ }
27+
1528 protected override void PopulateData ( )
1629 {
17- using ( var session = Domain . OpenSession ( ) )
30+ using ( var session = Domain . OpenSession ( ) )
1831 using ( var ts = session . OpenTransaction ( ) ) {
32+ // populating database
33+ var m1 = new Country ( session ) {
34+ Identifier = "HUN" ,
35+ Name = "Magyarország"
36+ } ;
37+ var m2 = new Country ( session ) {
38+ Identifier = "RUS" ,
39+ Name = "Oroszország"
40+ } ;
41+ using ( new LocalizationScope ( English . Culture ) ) {
42+ m2 . Name = "Russia" ;
43+ }
44+ using ( new LocalizationScope ( Spanish . Culture ) ) {
45+ m2 . Name = "Rusia" ;
46+ }
47+ ts . Complete ( ) ;
48+ }
49+ }
50+
51+ [ Test ]
52+ public void EntityHierarchyWithAbstractPropertyTest ( )
53+ {
54+ var currentCulture = Thread . CurrentThread . CurrentCulture ;
55+ try {
56+ Thread . CurrentThread . CurrentCulture = English . Culture ;
57+ using ( var session = Domain . OpenSession ( ) )
58+ using ( var ts = session . OpenTransaction ( ) ) {
59+ var q = session . Query . All < Country > ( ) . OrderBy ( e => e . Identifier ) . Select ( e => new { e . Name } ) ;
60+ var l = q . ToList ( ) ;
61+ // assertions
62+ Assert . That ( l . Count , Is . EqualTo ( 2 ) ) ;
63+
64+ var propertyInfos = l . First ( ) . GetType ( ) . GetProperties ( ) ;
65+ Assert . That ( propertyInfos . Length , Is . EqualTo ( 1 ) ) ;
66+ Assert . That ( propertyInfos . First ( ) . Name , Is . EqualTo ( nameof ( Country . Name ) ) ) ;
67+ Assert . That ( l . First ( ) . Name , Is . EqualTo ( "Magyarország" ) ) ;
68+ Assert . That ( l . Last ( ) . Name , Is . EqualTo ( "Russia" ) ) ;
69+ }
70+ }
71+ finally {
72+ Thread . CurrentThread . CurrentCulture = currentCulture ;
73+ }
74+ }
75+ }
76+
77+ public sealed class CustomTypesUpgradeTest
78+ {
79+ [ Test ]
80+ [ TestCase ( DomainUpgradeMode . Skip ) ]
81+ [ TestCase ( DomainUpgradeMode . Validate ) ]
82+ [ TestCase ( DomainUpgradeMode . Recreate ) ]
83+ [ TestCase ( DomainUpgradeMode . Perform ) ]
84+ [ TestCase ( DomainUpgradeMode . PerformSafely ) ]
85+ [ TestCase ( DomainUpgradeMode . LegacySkip ) ]
86+ [ TestCase ( DomainUpgradeMode . LegacyValidate ) ]
87+ public void MainTest ( DomainUpgradeMode upgradeMode )
88+ {
89+ TestDomainBuild ( DomainUpgradeMode . Recreate , upgradeMode ) ;
90+ }
91+
92+ private void TestDomainBuild ( DomainUpgradeMode initialDomainMode , DomainUpgradeMode upgradedDomainMode )
93+ {
94+ using ( var initialDomain = Domain . Build ( BuildConfiguration ( initialDomainMode ) ) ) {
95+ using ( var session = initialDomain . OpenSession ( ) )
96+ using ( var ts = session . OpenTransaction ( ) ) {
1997 // populating database
2098 var m1 = new Country ( session ) {
2199 Identifier = "HUN" ,
@@ -25,32 +103,57 @@ protected override void PopulateData()
25103 Identifier = "RUS" ,
26104 Name = "Oroszország"
27105 } ;
28- using ( new LocalizationScope ( EnglishCulture ) ) {
106+ using ( new LocalizationScope ( English . Culture ) ) {
29107 m2 . Name = "Russia" ;
30108 }
31- using ( new LocalizationScope ( SpanishCulture ) ) {
32- m2 . Name = "Rusia" ;
109+ using ( new LocalizationScope ( Spanish . Culture ) ) {
110+ m2 . Name = "Rusia" ;
33111 }
34- ts . Complete ( ) ;
112+ ts . Complete ( ) ;
113+ }
114+ }
115+
116+ using ( var upgradedDomain = Domain . Build ( BuildConfiguration ( upgradedDomainMode ) ) ) {
117+
118+ var currentCulture = Thread . CurrentThread . CurrentCulture ;
119+ try {
120+ Thread . CurrentThread . CurrentCulture = English . Culture ;
121+ using ( var session = upgradedDomain . OpenSession ( ) )
122+ using ( var ts = session . OpenTransaction ( ) ) {
123+
124+ if ( upgradedDomainMode == DomainUpgradeMode . Recreate ) {
125+ var q = session . Query . All < Country > ( ) . OrderBy ( e => e . Identifier ) . Select ( e => new { e . Name } ) ;
126+ var l = q . ToList ( ) ;
127+ // assertions
128+ Assert . That ( l . Count , Is . EqualTo ( 0 ) ) ;
129+ }
130+ else {
131+ var q = session . Query . All < Country > ( ) . OrderBy ( e => e . Identifier ) . Select ( e => new { e . Name } ) ;
132+ var l = q . ToList ( ) ;
133+ // assertions
134+ Assert . That ( l . Count , Is . EqualTo ( 2 ) ) ;
135+
136+ var propertyInfos = l . First ( ) . GetType ( ) . GetProperties ( ) ;
137+ Assert . That ( propertyInfos . Length , Is . EqualTo ( 1 ) ) ;
138+ Assert . That ( propertyInfos . First ( ) . Name , Is . EqualTo ( nameof ( Country . Name ) ) ) ;
139+ Assert . That ( l . First ( ) . Name , Is . EqualTo ( "Magyarország" ) ) ;
140+ Assert . That ( l . Last ( ) . Name , Is . EqualTo ( "Russia" ) ) ;
141+ }
142+ }
143+ }
144+ finally {
145+ Thread . CurrentThread . CurrentCulture = currentCulture ;
146+ }
35147 }
36148 }
37149
38- [ Test ]
39- public void EntityHierarchyWithAbstractPropertyTest ( )
150+ private DomainConfiguration BuildConfiguration ( DomainUpgradeMode upgradeMode )
40151 {
41- Thread . CurrentThread . CurrentCulture = EnglishCulture ;
42- using ( var session = Domain . OpenSession ( ) )
43- using ( var ts = session . OpenTransaction ( ) ) {
44- var q = session . Query . All < Country > ( ) . OrderBy ( e => e . Identifier ) . Select ( e => new { e . Name } ) ;
45- var l = q . ToList ( ) ;
46- // assertions
47- Assert . AreEqual ( 2 , l . Count ) ;
48- var propertyInfos = l . First ( ) . GetType ( ) . GetProperties ( ) ;
49- Assert . AreEqual ( propertyInfos . Length , 1 ) ;
50- Assert . AreEqual ( propertyInfos . First ( ) . Name , nameof ( Country . Name ) ) ;
51- Assert . AreEqual ( l . First ( ) . Name , "Magyarország" ) ;
52- Assert . AreEqual ( l . Last ( ) . Name , "Russia" ) ;
53- }
152+ var configuration = DomainConfigurationFactory . Create ( ) ;
153+ configuration . Types . Register ( typeof ( ILocalizable < > ) . Assembly ) ;
154+ configuration . Types . Register ( typeof ( Country ) . Assembly , typeof ( Country ) . Namespace ) ;
155+ configuration . UpgradeMode = upgradeMode ;
156+ return configuration ;
54157 }
55158 }
56159}
0 commit comments