fields.bmx 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. SuperStrict
  2. Import brl.maxunit
  3. Import text.persistencexml
  4. Import "types.bmx"
  5. Type FieldsTest Extends TTest
  6. Const NUM_INT:Int = 12345
  7. Const NUM_LONG:Long = 84343238901:Long
  8. Const NUM_FLOAT:Float = 10.688:Float
  9. Const NUM_DOUBLE:Double = 9420.0394:Double
  10. Const NUM_BYTE:Byte = 129
  11. Const NUM_SHORT:Short = 40000
  12. Const NUM_UINT:UInt = 123456
  13. Const NUM_ULONG:ULong = 4473709551615:ULong
  14. Const NUM_LONGINT:LongInt = 998800
  15. Const NUM_ULONGINT:ULongInt = 560000
  16. Const STR_ONE:String = "ABCDEFG"
  17. Const STR_TWO:String = "HIJKLMNOP"
  18. Const STR_THREE:String = "QRSTUVWXYZ"
  19. Const OBJ_ONE:Int = 6644
  20. Const OBJ_TWO:Int = 7755
  21. Const OBJ_THREE:Int = 8833
  22. Field persist:TPersist
  23. Field obj1:TObject
  24. Field obj2:TObject
  25. Field obj3:TObject
  26. Method Setup() { before }
  27. persist = New TXMLPersistenceBuilder.Build()
  28. obj1 = New TObject.Create(OBJ_ONE)
  29. obj2 = New TObject.Create(OBJ_TWO)
  30. obj3 = New TObject.Create(OBJ_THREE)
  31. End Method
  32. Method TearDown() { after }
  33. persist.Free()
  34. End Method
  35. Method testNumbers() { test }
  36. Local numbers:TNumbers = New TNumbers.Create(NUM_INT, NUM_LONG, NUM_FLOAT, NUM_DOUBLE, NUM_BYTE, NUM_SHORT, NUM_UINT, NUM_ULONG, NUM_LONGINT, NUM_ULONGINT)
  37. Local s:String = persist.SerializeToString(numbers)
  38. persist.Free()
  39. Local result:TNumbers = TNumbers(persist.DeserializeObject(s))
  40. assertEquals(NUM_INT, result.a)
  41. assertEquals(NUM_LONG, result.b)
  42. assertEquals(NUM_FLOAT, result.c)
  43. assertEquals(NUM_DOUBLE, result.d)
  44. assertEquals(NUM_BYTE, result.e)
  45. assertEquals(NUM_SHORT, result.f)
  46. assertEquals(NUM_UINT, result.g)
  47. assertEquals(NUM_ULONG, result.h)
  48. assertEquals(NUM_LONGINT, result.i)
  49. assertEquals(NUM_ULONGINT, result.j)
  50. End Method
  51. Method testStrings() { test }
  52. Local strings:TStrings = New TStrings.Create(STR_ONE, STR_TWO, STR_THREE)
  53. Local s:String = persist.SerializeToString(strings)
  54. validateStringRefs(s, STR_ONE, 1)
  55. validateStringRefs(s, STR_TWO, 1)
  56. validateStringRefs(s, STR_THREE, 1)
  57. persist.Free()
  58. Local result:TStrings = TStrings(persist.DeserializeObject(s))
  59. assertEquals(STR_ONE, result.a)
  60. assertEquals(STR_TWO, result.b)
  61. assertEquals(STR_THREE, result.c)
  62. End Method
  63. ' should only store a single copy of the string
  64. Method testStringRefs() { test }
  65. Local strings:TStrings = New TStrings.Create(STR_ONE, STR_ONE, STR_ONE)
  66. Local s:String = persist.SerializeToString(strings)
  67. validateStringRefs(s, STR_ONE, 1)
  68. persist.Free()
  69. Local result:TStrings = TStrings(persist.DeserializeObject(s))
  70. assertEquals(STR_ONE, result.a)
  71. assertEquals(STR_ONE, result.b)
  72. assertEquals(STR_ONE, result.c)
  73. End Method
  74. Method testObjects() { test }
  75. Local container:TObjectContainer = New TObjectContainer.Create(obj1, obj2, obj3)
  76. Local s:String = persist.SerializeToString(container)
  77. validateStringRefs(s, OBJ_ONE, 1)
  78. validateStringRefs(s, OBJ_TWO, 1)
  79. validateStringRefs(s, OBJ_THREE, 1)
  80. persist.Free()
  81. Local result:TObjectContainer = TObjectContainer(persist.DeserializeObject(s))
  82. assertEquals(OBJ_ONE, result.object1.code)
  83. assertEquals(OBJ_TWO, result.object2.code)
  84. assertEquals(OBJ_THREE, result.object3.code)
  85. End Method
  86. Method testObjectRefs() { test }
  87. Local container:TObjectContainer = New TObjectContainer.Create(obj1, obj2, obj1)
  88. Local s:String = persist.SerializeToString(container)
  89. validateStringRefs(s, OBJ_ONE, 1)
  90. validateStringRefs(s, OBJ_TWO, 1)
  91. persist.Free()
  92. Local result:TObjectContainer = TObjectContainer(persist.DeserializeObject(s))
  93. assertEquals(OBJ_ONE, result.object1.code)
  94. assertEquals(OBJ_TWO, result.object2.code)
  95. assertEquals(OBJ_ONE, result.object3.code)
  96. End Method
  97. Method testEmptyStrings() { test }
  98. Local strings:TStrings = New TStrings.Create(Null, STR_ONE, Null)
  99. assertNull(strings.a)
  100. assertEquals(STR_ONE, strings.b)
  101. assertNull(strings.c)
  102. Local s:String = persist.SerializeToString(strings)
  103. validateStringRefs(s, STR_ONE, 1)
  104. persist.Free()
  105. Local result:TStrings = TStrings(persist.DeserializeObject(s))
  106. assertNull(result.a)
  107. assertEquals(STR_ONE, result.b)
  108. assertNull(result.c)
  109. End Method
  110. Method validateStringRefs(ser:String, txt:String, expected:Int)
  111. Local count:Int
  112. Local i:Int = ser.Find(txt, 0)
  113. While i <> -1
  114. count :+ 1
  115. i = ser.Find(txt, i + txt.length)
  116. Wend
  117. assertEquals(expected, count, "Refs mismatch")
  118. End Method
  119. End Type