THRIFT-5826 binary constants create uncompilable Delphi code
Client: Delphi
Patch: Jens Geyer
diff --git a/compiler/cpp/src/thrift/generate/t_delphi_generator.cc b/compiler/cpp/src/thrift/generate/t_delphi_generator.cc
index dc85f60..b6b3b28 100644
--- a/compiler/cpp/src/thrift/generate/t_delphi_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_delphi_generator.cc
@@ -1237,7 +1237,14 @@
   }
 
   t_base_type::t_base tbase = ((t_base_type*)truetype)->get_base();
-  return (tbase == t_base_type::TYPE_UUID);
+  switch (tbase) {
+  case t_base_type::TYPE_UUID:
+    return true;
+  case t_base_type::TYPE_STRING:
+    return truetype->is_binary();
+  default:
+    return false;
+  }
 }
 
 void t_delphi_generator::print_const_prop(std::ostream& out,
@@ -1266,10 +1273,9 @@
   }
 
   if (truetype->is_base_type()) {
-    t_base_type::t_base tbase = ((t_base_type*)truetype)->get_base();
-    if(tbase == t_base_type::TYPE_UUID) {   // already done otherwise
-      string v2 = render_const_value( vars, out, name, type, value, false);
-      indent_impl(out) << name << " := " << v2 << ";" << '\n';
+    if(const_needs_var(type)) {
+      string the_value = render_const_value( vars, out, name, type, value, false);
+      indent_impl(out) << name << " := " << the_value << ";" << '\n';
     }
   } else if (truetype->is_enum()) {
     indent_impl(out) << name << " := " << type_name(type) << "." << value->get_identifier_name()
@@ -1321,7 +1327,11 @@
     t_base_type::t_base tbase = ((t_base_type*)truetype)->get_base();
     switch (tbase) {
     case t_base_type::TYPE_STRING:
-      render << "'" << get_escaped_string(value) << "'";
+      if (truetype->is_binary()) {        
+        render << "TEncoding.UTF8.GetBytes('" << get_escaped_string(value) << "')";
+      } else {
+        render << "'" << get_escaped_string(value) << "'";
+      }
       break;
     case t_base_type::TYPE_UUID:
       if(guidAsLiteral) {
diff --git a/lib/delphi/test/codegen/run-Pascal-Codegen-Tests.ps1 b/lib/delphi/test/codegen/run-Pascal-Codegen-Tests.ps1
index 5cde19c..961795b 100644
--- a/lib/delphi/test/codegen/run-Pascal-Codegen-Tests.ps1
+++ b/lib/delphi/test/codegen/run-Pascal-Codegen-Tests.ps1
@@ -26,17 +26,16 @@
 	"Include.thrift")   # subdir includes don't work here
 
 # expected to fail at Delphi Compiler
-$FAIL_DELPHI = @()
+$FAIL_DELPHI = @(
+    "Thrift5320.thrift"   # this conflicts with Delphi scopes, but it's a bad practice testcase anyway
+)
 
 # unexpected but known bugs (TODO: fix them)
-$KNOWN_BUGS = @( "ConstOptionalField.thrift"
-               , "IgnoreInitialismsTest.thrift"
-               , "JavaTypes.thrift"
-               , "JavaDefinitionOrderB.thrift"
-               , "JavaDeepCopyTest.thrift"
-               , "NameConflictTest.thrift"
-			   , "Thrift5320.thrift"   # this conflicts with Delphi scopes, but it's a bad practice testcase anyway
-               )
+$KNOWN_BUGS = @(
+	"IgnoreInitialismsTest.thrift", 
+	"JavaDefinitionOrderB.thrift",
+	"NameConflictTest.thrift"
+    )