1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
4 
5 using System.Collections;
6 using System.IO;
7 using System.Reflection;
8 using System.Text;
9 
10 namespace System.Data.SqlClient.ManualTesting.Tests
11 {
12     internal static class UdtTestHelpers
13     {
DumpReaderString(SqlDataReader reader)14         internal static string DumpReaderString(SqlDataReader reader)
15         {
16             return DumpReaderString(reader, true);
17         }
18 
DumpReaderString(SqlDataReader reader, bool showMetaData)19         internal static string DumpReaderString(SqlDataReader reader, bool showMetaData)
20         {
21             int i;
22             int x = 0, y = 0;
23             double d;
24             object o = 0;
25             bool fNull;
26             StringBuilder builder = new StringBuilder();
27 
28             if (showMetaData)
29             {
30                 for (i = 0; i < reader.FieldCount; i++)
31                 {
32                     builder.AppendLine($"ColumnName[{i}] = {reader.GetName(i)}");
33                     builder.AppendLine($"DataType[{i}] = {reader.GetDataTypeName(i)}");
34                     builder.AppendLine($"FieldType[{i}] = {reader.GetFieldType(i)}");
35                 }
36             }
37 
38             while (reader.Read())
39             {
40                 for (i = 0; i < reader.FieldCount; i++)
41                 {
42                     if (i > 0)
43                     {
44                         builder.Append(", ");
45                     }
46 
47                     object fieldValue = reader.GetValue(i);
48 
49                     if (fieldValue is Point)
50                     {
51                         fNull = (bool)fieldValue.GetType().InvokeMember("IsNull", BindingFlags.GetProperty, null, fieldValue, null);
52                         if (!fNull)
53                         {
54                             x = (int)fieldValue.GetType().InvokeMember("X", BindingFlags.GetProperty, null, fieldValue, null);
55                             y = (int)fieldValue.GetType().InvokeMember("X", BindingFlags.GetProperty, null, fieldValue, null);
56                             d = (double)fieldValue.GetType().InvokeMember("Distance", BindingFlags.Public | BindingFlags.Default | BindingFlags.Instance | BindingFlags.InvokeMethod, null, fieldValue, new Object[] { });
57                             builder.Append(string.Format("p.X = {0,3}, p.Y = {1,3}, p.Distance() = {2}", x, y, d));
58                         }
59                         else
60                         {
61                             builder.Append("null");
62                         }
63                     }
64                     else if (fieldValue is Circle)
65                     {
66                         fNull = (bool)fieldValue.GetType().InvokeMember("IsNull", BindingFlags.GetProperty, null, fieldValue, null);
67                         if (!fNull)
68                         {
69                             o = fieldValue.GetType().InvokeMember("Center", BindingFlags.Public | BindingFlags.Default | BindingFlags.Instance | BindingFlags.GetProperty, null, fieldValue, new Object[] { });
70                             builder.Append("Center = " + o);
71                         }
72                     }
73                     else
74                     {
75                         builder.Append(string.Format("{0,10}", fieldValue.ToString()));
76                     }
77                 }
78                 builder.AppendLine();
79             }
80             return builder.ToString();
81         }
82     }
83 }
84