utSchemaPascalTypes.pas 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513
  1. unit utSchemaPascalTypes;
  2. {$mode ObjFPC}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, fpcunit, testregistry, fpjson, fpjson.schema.types, fpjson.schema.pascaltypes, fpjson.schema.schema;
  6. Type
  7. { TTestSchemaPascalType }
  8. TTestSchemaPascalType = class(TTestCase)
  9. private
  10. FSchema: TJSONSchema;
  11. FSchemaData: TSchemaData;
  12. FType : TPascalTypeData;
  13. function DefineProperty(aName: string; aType: TSchemaSimpleType; aFormat: String='') : TJSONSchema;
  14. Public
  15. Procedure SetUp; override;
  16. Procedure TearDown; override;
  17. procedure DoAddProperties;
  18. procedure AssertEquals(const Msg: string; aExpected, aActual: TPascalType); overload;
  19. function AssertPascalTypeData(const Msg: string; aType: TPascalTypeData; aPascaltype: TPascalType; const aSchemaName, aPascalName: String) : TPascalTypeData;
  20. procedure AssertProperty(Msg: String; aType: TPascalTypeData; aIndex: Integer; const aSchemaName, aPascalName, aPascalTypeName: String; aPascalType: TPascalType; aTypeData: TPascalTypeData);
  21. Property Schema : TJSONSchema Read FSchema;
  22. Property Data : TSchemaData Read FSchemaData;
  23. Published
  24. Procedure TestHookup;
  25. Procedure TestTypeMap;
  26. procedure TestCreatePascalType;
  27. Procedure TestAddType;
  28. Procedure TestAddTypeAlias;
  29. Procedure TestStandardTypes;
  30. Procedure TestAddPropertiesInteger;
  31. procedure TestAddPropertiesInt64;
  32. procedure TestAddPropertiesString;
  33. procedure TestAddPropertiesStringDate;
  34. procedure TestAddPropertiesStringDateTime;
  35. procedure TestAddPropertiesStringTime;
  36. procedure TestAddPropertiesStringNoEnum;
  37. procedure TestAddPropertiesStringEnum;
  38. procedure TestAddPropertiesNumber;
  39. procedure TestAddPropertiesBoolean;
  40. procedure TestAddPropertiesAny;
  41. procedure TestAddPropertiesEmptyObject;
  42. procedure TestAddPropertiesNone;
  43. procedure TestAddPropertiesNull;
  44. procedure TestAddPropertiesMulti;
  45. procedure TestAddPropertiesArray;
  46. procedure TestAddPropertiesArrayDelphi;
  47. procedure TestAddPropertiesArrayMultiValue;
  48. procedure TestAddPropertiesObject;
  49. procedure TestAddPropertiesObjectExisting;
  50. end;
  51. implementation
  52. uses TypInfo;
  53. { TTestSchemaPascalType }
  54. procedure TTestSchemaPascalType.SetUp;
  55. begin
  56. inherited SetUp;
  57. FSchemaData:=TSchemaData.Create;
  58. Fschema:=TJSONSchema.Create;
  59. end;
  60. procedure TTestSchemaPascalType.TearDown;
  61. begin
  62. FreeAndNil(FSchema);
  63. FreeAndNil(FSchemaData);
  64. inherited TearDown;
  65. end;
  66. procedure TTestSchemaPascalType.AssertEquals(const Msg : string; aExpected, aActual : TPascalType);
  67. begin
  68. AssertEquals(Msg,GetEnumName(Typeinfo(TPascalType),Ord(aExpected)),
  69. GetEnumName(Typeinfo(TPascalType),Ord(aActual)));
  70. end;
  71. function TTestSchemaPascalType.AssertPascalTypeData(const Msg: string; aType: TPascalTypeData; aPascaltype: TPascalType;
  72. const aSchemaName, aPascalName: String): TPascalTypeData;
  73. begin
  74. AssertNotNull(Msg+': have type',aType);
  75. AssertEquals(Msg+' Schema name',aSchemaName,aType.SchemaName);
  76. AssertEquals(Msg+' Pascal name',aPascalName,aType.PascalName);
  77. AssertEquals(Msg+' Pascal type',aPascalType,aType.PascalType);
  78. Result:=aType;
  79. end;
  80. procedure TTestSchemaPascalType.TestHookup;
  81. begin
  82. AssertNotNull('Have schema',Data);
  83. AssertEquals('No types',0,Data.TypeCount);
  84. end;
  85. procedure TTestSchemaPascalType.TestTypeMap;
  86. begin
  87. Data.AddAliasToTypeMap(ptInteger,'a','a','b',Nil);
  88. AssertEquals('Correct existing map','b',Data.TypeMap['a']);
  89. AssertEquals('Correct nonexisting map','c',Data.TypeMap['c']);
  90. end;
  91. procedure TTestSchemaPascalType.TestCreatePascalType;
  92. var
  93. aType : TPascalTypeData;
  94. S : TJSONSchema;
  95. begin
  96. S:=TJSONSchema.Create;
  97. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',S);
  98. try
  99. AssertPascalTypeData('basic',aType,ptSchemaStruct,'a','Ta');
  100. AssertSame('Schema',S,aType.Schema);
  101. AssertEquals('Not added to types',0,Data.TypeCount);
  102. finally
  103. aType.Free;
  104. S.Free;
  105. end;
  106. end;
  107. procedure TTestSchemaPascalType.TestAddType;
  108. var
  109. aType : TPascalTypeData;
  110. begin
  111. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Nil);
  112. Data.AddType('a',aType);
  113. AssertEquals('Not added to types',1,Data.TypeCount);
  114. AssertSame('Can find',aType,Data.FindSchemaTypeData('a'));
  115. AssertEquals('Can index',0,Data.IndexOfSchemaType('a'));
  116. end;
  117. procedure TTestSchemaPascalType.TestAddTypeAlias;
  118. begin
  119. Data.AddAliasToTypeMap(ptInteger,'int','int','integer',Nil);
  120. AssertNotNull('Can find',Data.FindSchemaTypeData('int'));
  121. AssertEquals('Cannot index',-1,Data.IndexOfSchemaType('int'));
  122. AssertEquals('Not added to types',0,Data.Typecount);
  123. end;
  124. procedure TTestSchemaPascalType.TestStandardTypes;
  125. begin
  126. Data.DefineStandardPascalTypes;
  127. AssertPascalTypeData('integer',Data.FindSchemaTypeData('integer'),ptInteger,'integer','integer');
  128. AssertPascalTypeData('int64',Data.FindSchemaTypeData('integer','int64'),ptInt64,'integer','int64');
  129. AssertPascalTypeData('string',Data.FindSchemaTypeData('string'),ptString,'string','string');
  130. AssertPascalTypeData('date-time',Data.FindSchemaTypeData('string--date-time'),ptDateTime,'string','TDateTime');
  131. AssertPascalTypeData('date',Data.FindSchemaTypeData('string--date'),ptDateTime,'string','TDateTime');
  132. AssertPascalTypeData('time',Data.FindSchemaTypeData('string--time'),ptDateTime,'string','TDateTime');
  133. AssertPascalTypeData('boolean',Data.FindSchemaTypeData('boolean'),ptBoolean,'boolean','boolean');
  134. AssertPascalTypeData('number',Data.FindSchemaTypeData('number'),ptFloat64,'number','double');
  135. end;
  136. procedure TTestSchemaPascalType.AssertProperty(Msg : String; aType : TPascalTypeData; aIndex : Integer; const aSchemaName,aPascalName,aPascalTypeName : String; aPascalType : TPascalType; aTypeData : TPascalTypeData);
  137. var
  138. lProp : TPascalPropertyData;
  139. begin
  140. AssertNotNull(Msg+': have type',aType);
  141. AssertTrue(Msg+': have properties',aType.PropertyCount>0);
  142. AssertTrue(Msg+': have valid index',aIndex<aType.PropertyCount);
  143. lProp:=aType.Properties[aIndex];
  144. AssertNotNull(Msg+': have property',lProp);
  145. AssertEquals(Msg+': schema name',aSchemaName,lProp.SchemaName);
  146. AssertEquals(Msg+': pascal name',aPascalName,lProp.PascalName);
  147. AssertEquals(Msg+': Pascal type name',aPascalTypeName,lProp.PascalTypeName);
  148. AssertEquals(Msg+': Pascal type',aPascalType,lProp.PropertyType);
  149. AssertSame(Msg+': Type data',aTypeData,lProp.TypeData);
  150. end;
  151. function TTestSchemaPascalType.DefineProperty(aName: string; aType: TSchemaSimpleType; aFormat: String): TJSONSchema;
  152. begin
  153. Data.DefineStandardPascalTypes;
  154. Result:=TJSONSchema.Create;
  155. Result.Name:=aName;
  156. Result.Validations.Types:=[aType];
  157. if aFormat<>'' then
  158. Result.Validations.Format:=aFormat;
  159. Schema.Properties.Add(Result);
  160. end;
  161. procedure TTestSchemaPascalType.TestAddPropertiesInteger;
  162. var
  163. aType : TPascalTypeData;
  164. begin
  165. DefineProperty('b',sstInteger,'');
  166. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  167. Data.AddType('a',aType);
  168. Data.AddPropertiesToType(aType);
  169. AssertPascalTypeData('Ta',Data.FindSchemaTypeData('a'),ptSchemaStruct,'a','Ta');
  170. AssertProperty('Integer',aType,0,'b','b','integer',ptInteger,Data.FindSchemaTypeData('integer'));
  171. end;
  172. procedure TTestSchemaPascalType.TestAddPropertiesInt64;
  173. var
  174. aType : TPascalTypeData;
  175. begin
  176. DefineProperty('b',sstInteger,'int64');
  177. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  178. Data.AddType('a',aType);
  179. Data.AddPropertiesToType(aType);
  180. AssertPascalTypeData('Ta',Data.FindSchemaTypeData('a'),ptSchemaStruct,'a','Ta');
  181. AssertProperty('Int64',aType,0,'b','b','int64',ptInt64,Data.FindSchemaTypeData('integer','int64'));
  182. end;
  183. procedure TTestSchemaPascalType.TestAddPropertiesString;
  184. var
  185. aType : TPascalTypeData;
  186. begin
  187. DefineProperty('b',sstString,'');
  188. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  189. Data.AddType('a',aType);
  190. Data.AddPropertiesToType(aType);
  191. AssertPascalTypeData('Ta',Data.FindSchemaTypeData('a'),ptSchemaStruct,'a','Ta');
  192. AssertProperty('String',aType,0,'b','b','string',ptString,Data.FindSchemaTypeData('string'));
  193. end;
  194. procedure TTestSchemaPascalType.TestAddPropertiesStringDate;
  195. var
  196. aType : TPascalTypeData;
  197. begin
  198. DefineProperty('b',sstString,'date');
  199. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  200. Data.AddType('a',aType);
  201. Data.AddPropertiesToType(aType);
  202. AssertPascalTypeData('Ta',Data.FindSchemaTypeData('a'),ptSchemaStruct,'a','Ta');
  203. AssertProperty('Date',aType,0,'b','b','TDateTime',ptDateTime,Data.FindSchemaTypeData('string','date'));
  204. end;
  205. procedure TTestSchemaPascalType.TestAddPropertiesStringDateTime;
  206. var
  207. aType : TPascalTypeData;
  208. begin
  209. DefineProperty('b',sstString,'date-time');
  210. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  211. Data.AddType('a',aType);
  212. Data.AddPropertiesToType(aType);
  213. AssertPascalTypeData('Ta',Data.FindSchemaTypeData('a'),ptSchemaStruct,'a','Ta');
  214. AssertProperty('Date',aType,0,'b','b','TDateTime',ptDateTime,Data.FindSchemaTypeData('string','date-time'));
  215. end;
  216. procedure TTestSchemaPascalType.TestAddPropertiesStringTime;
  217. var
  218. aType : TPascalTypeData;
  219. begin
  220. DefineProperty('b',sstString,'time');
  221. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  222. Data.AddType('a',aType);
  223. Data.AddPropertiesToType(aType);
  224. AssertPascalTypeData('Ta',Data.FindSchemaTypeData('a'),ptSchemaStruct,'a','Ta');
  225. AssertProperty('Date',aType,0,'b','b','TDateTime',ptDateTime,Data.FindSchemaTypeData('string','time'));
  226. end;
  227. procedure TTestSchemaPascalType.TestAddPropertiesStringNoEnum;
  228. var
  229. lProp : TJSONSchema;
  230. aType : TPascalTypeData;
  231. begin
  232. lprop:=DefineProperty('b',sstString,'');
  233. lProp.Validations.Enum:=TJSONArray.Create(['de','fg','hi']);
  234. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  235. Data.AddType('a',aType);
  236. Data.AddPropertiesToType(aType);
  237. AssertPascalTypeData('Ta',Data.FindSchemaTypeData('a'),ptSchemaStruct,'a','Ta');
  238. AssertProperty('Enum',aType,0,'b','b','string',ptString,Data.FindSchemaTypeData('string'));
  239. end;
  240. procedure TTestSchemaPascalType.TestAddPropertiesStringEnum;
  241. var
  242. lProp : TJSONSchema;
  243. aType : TPascalTypeData;
  244. begin
  245. Data.UseEnums:=True;
  246. lprop:=DefineProperty('b',sstString,'');
  247. lProp.Validations.Enum:=TJSONArray.Create(['de','fg','hi']);
  248. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  249. Data.AddType('a',aType);
  250. Data.AddPropertiesToType(aType);
  251. AssertPascalTypeData('Ta',Data.FindSchemaTypeData('a'),ptSchemaStruct,'a','Ta');
  252. AssertProperty('Enum',aType,0,'b','b','Ta_b',ptEnum,Data.FindSchemaTypeData('(a_b)'));
  253. AssertSame('Schema in property def',lProp,aType.Properties[0].Schema);
  254. AssertSame('Schema in property type def',lProp,Data.FindSchemaTypeData('(a_b)').Schema);
  255. AssertEquals('Have 2 public types',2,Data.TypeCount);
  256. end;
  257. procedure TTestSchemaPascalType.TestAddPropertiesNumber;
  258. var
  259. aType : TPascalTypeData;
  260. begin
  261. DefineProperty('b',sstNumber,'');
  262. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  263. Data.AddType('a',aType);
  264. Data.AddPropertiesToType(aType);
  265. AssertPascalTypeData('Ta',Data.FindSchemaTypeData('a'),ptSchemaStruct,'a','Ta');
  266. AssertProperty('Number',aType,0,'b','b','double',ptFloat64,Data.FindSchemaTypeData('number'));
  267. end;
  268. procedure TTestSchemaPascalType.TestAddPropertiesBoolean;
  269. var
  270. aType : TPascalTypeData;
  271. begin
  272. DefineProperty('b',sstBoolean,'');
  273. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  274. Data.AddType('a',aType);
  275. Data.AddPropertiesToType(aType);
  276. AssertPascalTypeData('Ta',Data.FindSchemaTypeData('a'),ptSchemaStruct,'a','Ta');
  277. AssertProperty('Boolean',aType,0,'b','b','boolean',ptBoolean,Data.FindSchemaTypeData('boolean'));
  278. end;
  279. procedure TTestSchemaPascalType.TestAddPropertiesAny;
  280. var
  281. aType : TPascalTypeData;
  282. begin
  283. DefineProperty('b',sstAny,'');
  284. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  285. Data.AddType('a',aType);
  286. Data.AddPropertiesToType(aType);
  287. AssertProperty('any',aType,0,'b','b','string',ptJSON,Data.FindSchemaTypeData('any'));
  288. end;
  289. procedure TTestSchemaPascalType.TestAddPropertiesEmptyObject;
  290. var
  291. aType : TPascalTypeData;
  292. begin
  293. DefineProperty('b',sstObject,'');
  294. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  295. Data.AddType('a',aType);
  296. Data.AddPropertiesToType(aType);
  297. AssertProperty('any',aType,0,'b','b','string',ptJSON,Data.FindSchemaTypeData('JSON'));
  298. end;
  299. procedure TTestSchemaPascalType.DoAddProperties;
  300. begin
  301. Data.AddPropertiesToType(FType);
  302. end;
  303. procedure TTestSchemaPascalType.TestAddPropertiesNone;
  304. var
  305. aType : TPascalTypeData;
  306. begin
  307. DefineProperty('b',sstNone,'');
  308. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  309. Data.AddType('a',aType);
  310. FType:=aType;
  311. AssertException('type none not allowed', ESchemaData, @DoAddProperties);
  312. end;
  313. procedure TTestSchemaPascalType.TestAddPropertiesNull;
  314. var
  315. aType : TPascalTypeData;
  316. begin
  317. DefineProperty('b',sstNull,'');
  318. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  319. Data.AddType('a',aType);
  320. FType:=aType;
  321. AssertException('type null not allowed', ESchemaData, @DoAddProperties);
  322. end;
  323. procedure TTestSchemaPascalType.TestAddPropertiesMulti;
  324. var
  325. lProp : TJSONSchema;
  326. aType : TPascalTypeData;
  327. begin
  328. lProp:=DefineProperty('b',sstString,'');
  329. lProp.Validations.Types:=[sstString,sstNumber];
  330. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  331. Data.AddType('a',aType);
  332. FType:=aType;
  333. AssertException('multiple types not allowed', ESchemaData, @DoAddProperties);
  334. end;
  335. procedure TTestSchemaPascalType.TestAddPropertiesArray;
  336. var
  337. lProp,lElement : TJSONSchema;
  338. aType : TPascalTypeData;
  339. begin
  340. lProp:=DefineProperty('b',sstArray,'');
  341. lElement:=TJSONSchema.Create;
  342. lElement.Validations.Types:=[sstString];
  343. lProp.Items.Add(lElement);
  344. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  345. Data.AddType('a',aType);
  346. Data.AddPropertiesToType(aType);
  347. AssertProperty('array',aType,0,'b','b','TStringDynArray',ptArray,Data.FindSchemaTypeData('[string]'));
  348. AssertSame('Schema in property def',lProp,aType.Properties[0].Schema);
  349. // AssertSame('Schema in property type def',lProp,Data.FindSchemaTypeData('[string]').Schema);
  350. AssertEquals('Have 2 public types',1,Data.TypeCount);
  351. end;
  352. procedure TTestSchemaPascalType.TestAddPropertiesArrayDelphi;
  353. var
  354. lProp,lElement : TJSONSchema;
  355. aType : TPascalTypeData;
  356. begin
  357. Data.DelphiTypes:=True;
  358. lProp:=DefineProperty('b',sstArray,'');
  359. lElement:=TJSONSchema.Create;
  360. lElement.Validations.Types:=[sstString];
  361. lProp.Items.Add(lElement);
  362. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  363. Data.AddType('a',aType);
  364. Data.AddPropertiesToType(aType);
  365. AssertProperty('array',aType,0,'b','b','TStringDynArray',ptArray,Data.FindSchemaTypeData('[string]'));
  366. AssertEquals('Have 2 public types',1,Data.TypeCount);
  367. end;
  368. procedure TTestSchemaPascalType.TestAddPropertiesArrayMultiValue;
  369. var
  370. lProp,lElement : TJSONSchema;
  371. aType : TPascalTypeData;
  372. begin
  373. lProp:=DefineProperty('b',sstArray,'');
  374. lElement:=TJSONSchema.Create;
  375. lElement.Validations.Types:=[sstString];
  376. lProp.Items.Add(lElement);
  377. lElement:=TJSONSchema.Create;
  378. lElement.Validations.Types:=[sstInteger];
  379. lProp.Items.Add(lElement);
  380. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  381. Data.AddType('a',aType);
  382. FType:=aType;
  383. AssertException('multiple value types in array not allowed', ESchemaData, @DoAddProperties);
  384. end;
  385. procedure TTestSchemaPascalType.TestAddPropertiesObject;
  386. var
  387. lProp,lElement : TJSONSchema;
  388. aType,aType2 : TPascalTypeData;
  389. begin
  390. lProp:=DefineProperty('b',sstObject,'');
  391. lElement:=TJSONSchema.Create;
  392. lElement.Name:='c';
  393. lElement.Validations.Types:=[sstString];
  394. lProp.Properties.Add(lElement);
  395. lElement:=TJSONSchema.Create;
  396. lElement.Name:='d';
  397. lElement.Validations.Types:=[sstInteger];
  398. lProp.Properties.Add(lElement);
  399. aType:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  400. Data.AddType('a',aType);
  401. Data.AddPropertiesToType(aType);
  402. AssertProperty('array',aType,0,'b','b','Ta_b',ptAnonStruct,Data.FindSchemaTypeData('{a_b}'));
  403. AssertSame('Schema in property def',lProp,aType.Properties[0].Schema);
  404. AssertSame('Schema in property type def',lProp,Data.FindSchemaTypeData('{a_b}').Schema);
  405. aType2:=Data.FindSchemaTypeData('{a_b}');
  406. AssertProperty('sub prop 1',aType2,0,'c','c','string',ptString,Data.FindSchemaTypeData('string'));
  407. AssertProperty('sub prop 2',aType2,1,'d','d','integer',ptInteger,Data.FindSchemaTypeData('integer'));
  408. AssertEquals('Have 2 public types',2,Data.TypeCount);
  409. Data.CheckDependencies;
  410. AssertEquals('type depends on created subtype',1,aType.DependencyCount);
  411. AssertSame('type depends on created subtype',aType2,aType.Dependency[0]);
  412. end;
  413. procedure TTestSchemaPascalType.TestAddPropertiesObjectExisting;
  414. var
  415. lProp : TJSONSchema;
  416. aType1,aType2 : TPascalTypeData;
  417. begin
  418. aType1:=Data.CreatePascalType(0,ptSchemaStruct,'a','Ta',Schema);
  419. Data.AddType('a',aType1);
  420. aType2:=Data.CreatePascalType(1,ptSchemaStruct,'b','Tb',Nil);
  421. Data.AddType('b',aType2);
  422. lProp:=DefineProperty('c',sstObject,'');
  423. lProp.Ref:='b';
  424. Data.AddPropertiesToType(aType1);
  425. AssertProperty('prop 1',aType1,0,'c','c','Tb',ptSchemaStruct,aType2);
  426. end;
  427. initialization
  428. RegisterTest(TTestSchemaPascalType);
  429. end.