Przeglądaj źródła

+ add tests for casts from Variant to the various string types

Sven/Sarah Barth 2 tygodni temu
rodzic
commit
aa78225be0
1 zmienionych plików z 61 dodań i 0 usunięć
  1. 61 0
      packages/rtl-objpas/tests/tests.rtti.value.pas

+ 61 - 0
packages/rtl-objpas/tests/tests.rtti.value.pas

@@ -130,6 +130,12 @@ Type
     Procedure TestFromVarRecQWord;
     Procedure TestFromVarRecUnicodeString;
     Procedure TestArrayOfConstToTValue;
+    procedure TestCastAnsiString;
+{$ifndef FPC_WIDESTRING_EQUAL_UNICODESTRING}
+    procedure TestCastUnicodeString;
+{$endif}
+    procedure TestCastWideString;
+    procedure TestCastShortString;
   end;
 
   { TMyUNknown }
@@ -719,6 +725,61 @@ begin
   CheckEquals(1.23,S[2].AsDouble,0.01,'Value 3');
 end;
 
+procedure TTestValueVariant.TestCastAnsiString;
+var
+  s: AnsiString;
+  v: Variant;
+  vvar, vstr: TValue;
+begin
+  s := 'Test';
+  v := s;
+  vvar := TValue.{$ifdef fpc}specialize{$endif}From<Variant>(v);
+  CheckTrue(vvar.TryCast(TypeInfo(AnsiString), vstr));
+  CheckEquals(s, vstr.AsAnsiString);
+end;
+
+{$ifndef FPC_WIDESTRING_EQUAL_UNICODESTRING}
+procedure TTestValueVariant.TestCastUnicodeString;
+var
+  u: UnicodeString;
+  v: Variant;
+  vvar, vstr: TValue;
+begin
+  u := 'Test';
+  TVarData(v).vType := varUString;
+  TVarData(v).vuString := Pointer(u);
+  vvar := TValue.{$ifdef fpc}specialize{$endif}From<Variant>(v);
+  CheckTrue(vvar.TryCast(TypeInfo(UnicodeString), vstr));
+  CheckEquals(u, vstr.AsUnicodeString);
+end;
+{$endif}
+
+procedure TTestValueVariant.TestCastWideString;
+var
+  w: WideString;
+  v: Variant;
+  vvar, vstr: TValue;
+begin
+  w := 'Test';
+  v := w;
+  vvar := TValue.{$ifdef fpc}specialize{$endif}From<Variant>(v);
+  CheckTrue(vvar.TryCast(TypeInfo(WideString), vstr));
+  CheckEquals(w, vstr.AsUnicodeString);
+end;
+
+procedure TTestValueVariant.TestCastShortString;
+var
+  s: ShortString;
+  v: Variant;
+  vvar, vstr: TValue;
+begin
+  s := 'Test';
+  v := s;
+  vvar := TValue.{$ifdef fpc}specialize{$endif}From<Variant>(v);
+  CheckTrue(vvar.TryCast(TypeInfo(ShortString), vstr));
+  CheckEquals(s, vstr.AsAnsiString);
+end;
+
 { TMyUNknown }
 
 function TMyUNknown.GetTypeInfoCount(out count: longint): HResult; stdcall;