source: trunk/Providers/SHP/Managed/UnitTest/ProviderTests/SelectTests.cs

Last change on this file was 7500, checked in by christinebao, 7 weeks ago

Fix managed FDO SHP unit test. Port to VS2015, fix provider version. Test pass.

  • Property svn:eol-style set to native
File size: 26.4 KB
Line 
1// Copyright (C) 2004-2006  Autodesk, Inc.
2//
3// This library is free software; you can redistribute it and/or
4// modify it under the terms of version 2.1 of the GNU Lesser
5// General Public License as published by the Free Software Foundation.
6//
7// This library is distributed in the hope that it will be useful,
8// but WITHOUT ANY WARRANTY; without even the implied warranty of
9// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
10// Lesser General Public License for more details.
11//
12// You should have received a copy of the GNU Lesser General Public
13// License along with this library; if not, write to the Free Software
14// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
15
16using System;
17using System.Collections.Generic;
18using System.Text;
19using System.Diagnostics;
20
21using OSGeo.FDO.Connections;
22using OSGeo.FDO.Commands;
23using OSGeo.FDO.Commands.Schema;
24using OSGeo.FDO.Commands.Feature;
25using OSGeo.FDO.Commands.SpatialContext;
26using OSGeo.FDO.Schema;
27using OSGeo.FDO.Expression;
28using OSGeo.FDO.Geometry;
29using OSGeo.FDO.Common;
30
31using unit_test.Framework;
32
33namespace unit_test.ProviderTests
34{
35    class SelectTests : BaseTestWithConnection
36    {
37        public SelectTests(ShpTestProvider connectProvider)
38            : base(connectProvider)
39        { }
40
41        public void Test_select()
42        {
43            double area = 0;
44            double length = 0;
45            int count = 0;
46            IConnection mConnection = base.ConnectionInitialized;
47            try
48            {
49                ISelect select = (ISelect)mConnection.CreateCommand(CommandType.CommandType_Select);
50                select.SetFeatureClassName("ontario");
51                IFeatureReader reader = select.Execute(); 
52                count = 0;
53                while (reader.ReadNext())
54                {
55                    count++;
56                    reader.GetInt32("FeatId");
57                    area = reader.GetDouble("AREA");
58                    length = reader.GetDouble("PERIMETER");
59                    reader.GetDouble("ONTARIO_");
60                    reader.GetDouble("ONTARIO_ID");
61                    byte[] geometry = reader.GetGeometry("Geometry");
62
63                    ShpTests.AnalyzeGeometry("ontario", count, geometry, length, area);
64                }
65                Debug.Assert(count != 0, "no ontario features selected");
66
67                select.SetFeatureClassName("roads");
68                reader = select.Execute();
69                count = 0;
70                while (reader.ReadNext())
71                {
72                    count++;
73                    reader.GetInt32("FeatId");
74                    reader.GetDouble("FNODE_");
75                    reader.GetDouble("TNODE_");
76                    reader.GetDouble("LPOLY_");
77                    reader.GetDouble("RPOLY_");
78                    length = reader.GetDouble("LENGTH");
79                    reader.GetDouble("ROADWAYS_");
80                    reader.GetDouble("ROADWAYS_I");
81                    reader.GetDouble("MNRCODE");
82                    reader.GetString("FCODE");
83                    byte[] geometry = reader.GetGeometry("Geometry");
84
85                    ShpTests.AnalyzeGeometry("ontario", count, geometry, length, area);
86                }
87                Debug.Assert(count != 0, "no roads features selected");
88
89                select.SetFeatureClassName("lakes");
90                reader = select.Execute();
91                count = 0;
92                while (reader.ReadNext())
93                {
94                    count++;
95                    reader.GetInt32("FeatId");
96                    area = reader.GetDouble("AREA");
97                    length = reader.GetDouble("PERIMETER");
98                    reader.GetDouble("DRAINAGE_");
99                    reader.GetDouble("DRAINAGE_I");
100                    if (!reader.IsNull("HOTLINK"))
101                        reader.GetString("HOTLINK");
102                    byte[] geometry = reader.GetGeometry("Geometry");
103
104                    ShpTests.AnalyzeGeometry("ontario", count, geometry, length, area);
105                }
106                Debug.Assert(count != 0, "no lakes features selected");
107            }
108            catch (OSGeo.FDO.Common.Exception ex)
109            {
110                Debug.Fail(ex.Message);
111            }
112            catch (System.Exception ex)
113            {
114                Debug.Fail(ex.Message);
115            }
116        }
117
118        public void Test_selectInvalidGeometry()
119        {
120            int count = 0;
121
122            base.SetLocation(@"..\..\..\..\TestData\Sheboygan\");
123
124            IConnection mConnection = base.ConnectionNew;
125            try
126            {
127                FgfGeometryFactory factory = new FgfGeometryFactory();
128                Debug.Assert(mConnection.Open() == ConnectionState.ConnectionState_Open, "connection state not open");
129                ISelect select = (ISelect)mConnection.CreateCommand(CommandType.CommandType_Select);
130                select.SetFeatureClassName("Parcels");
131                select.SetFilter("FeatId=97");
132                IFeatureReader reader = select.Execute();
133                count = 0;
134                while (reader.ReadNext())
135                {
136                    count++;
137
138                    reader.GetInt32("FeatId");
139                    byte[] bytes = reader.GetGeometry("Geometry");
140                    IGeometry geometry = factory.CreateGeometryFromFgf(bytes);
141                   
142                    GeometryType type = geometry.DerivedType;
143                    Debug.Assert(type == GeometryType.GeometryType_MultiPolygon, "Not a polygon");
144
145                    IMultiPolygon poly = (IMultiPolygon)geometry;
146                    ILinearRing ring = poly[0].ExteriorRing;
147                    IEnvelope envelope = ring.Envelope;
148
149                    for (int i = 0; i < poly[0].InteriorRingCount; i++)
150                    {
151                        ring = poly[0].GetInteriorRing(i);
152                        envelope = ring.Envelope;
153                    }
154
155                    string geomText = geometry.Text;
156
157                    ShpTests.AnalyzeGeometry("Parcels", count, bytes, 0, 0);
158                }
159            }
160            catch (OSGeo.FDO.Common.Exception ex)
161            {
162                Debug.Fail(ex.Message);
163            }
164            catch (System.Exception ex)
165            {
166                Debug.Fail(ex.Message);
167            }
168        }
169
170        public void Test_get_spatial_contexts()
171        {
172            try
173            {
174                // Test #1. No PRJ file
175                get_spatial_context(base.ConnectionInitialized, "Default");
176
177                // Test #2. PRJ file present
178                IConnection connection = base.ConnectionNew;
179
180                connection.ConnectionString = @"DefaultFileLocation=..\..\..\..\TestData\Florida";
181
182                Debug.Assert(connection.Open() == ConnectionState.ConnectionState_Open, "connection state not open");
183
184                get_spatial_context(connection, "NAD_1983_HARN_UTM_Zone_17N");
185
186                connection.Close();
187            }
188            catch (OSGeo.FDO.Common.Exception ex)
189            {
190                Debug.Fail(ex.Message);
191            }
192            catch (System.Exception ex)
193            {
194                Debug.Fail(ex.Message);
195            }
196        }
197
198        //**********************Runtime error, debug later*********************
199        private void get_spatial_context(IConnection connection, string cs_name)
200        {
201            IGetSpatialContexts get;
202            ISpatialContextReader reader;
203            int count;
204
205            try
206            {
207                get = (IGetSpatialContexts)connection.CreateCommand(CommandType.CommandType_GetSpatialContexts);
208                reader = get.Execute();
209                count = 0;
210                while (reader.ReadNext())
211                    count++;
212                Debug.Assert(count != 0, "no spatial context");
213
214                get.ActiveOnly = true; // BUG !!!!! ActiveOnly not respected
215                reader = get.Execute();
216                count = 0;
217                while (reader.ReadNext())
218                {
219                    string name = reader.GetName();
220                    if (name == cs_name)
221                    {
222                        Debug.Assert(reader.GetName() == cs_name, "Coordinate System not active");
223
224                        string wkt = reader.GetCoordinateSystemWkt();
225                        string cs = reader.GetCoordinateSystem();
226
227                        if (cs_name != "Default")
228                            Debug.Assert(wkt != "", "WKT Coordinate System is not set");
229                        else
230                            Debug.Assert(wkt == "", "WKT Coordinate System is set");
231
232                        count++;
233                    }
234                }
235                Debug.Assert(count != 0, "no spatial context");
236                Debug.Assert(count == 1, "too many spatial contexts");
237            }
238            catch (OSGeo.FDO.Common.Exception ex)
239            {
240                Debug.Fail(ex.Message);
241            }
242            catch (System.Exception ex)
243            {
244                Debug.Fail(ex.Message);
245            }
246        }
247
248        public void Test_get_class_definition()
249        {
250            ISelect select = (ISelect)base.ConnectionInitialized.CreateCommand(CommandType.CommandType_Select);
251            select.SetFeatureClassName("ontario");
252            IFeatureReader reader = select.Execute();
253            reader.ReadNext();
254            ClassDefinition definition = reader.GetClassDefinition();
255            Debug.Assert(definition.ClassType == ClassType.ClassType_FeatureClass, "wrong class type");
256            Debug.Assert(definition.Name == "ontario", "wrong class name");
257            ClassCapabilities caps = definition.Capabilities;
258            Debug.Assert(!caps.SupportsLocking, "supports locking?");
259            Debug.Assert(!caps.SupportsLongTransactions, "supports long transactions?");
260            DataPropertyDefinitionCollection identities = definition.IdentityProperties;
261            Debug.Assert(identities.Count == 1, "too many id properties");
262            DataPropertyDefinition id = identities[0];
263            Debug.Assert(id.Name == "FeatId", "id property wrong name");
264            Debug.Assert(id.DataType == DataType.DataType_Int32, "id property wrong type");
265            Debug.Assert(!reader.IsNull(id.Name), "id property is nul");
266            // ToDo: check regular properties..
267            GeometricPropertyDefinition geometry = ((FeatureClass)definition).GeometryProperty;
268            Debug.Assert(geometry.Name == "Geometry", "geometry property wrong name");
269            Debug.Assert(geometry.GeometryTypes == 0x04, "geometry property wrong types");
270        }
271
272        public void Test_requery()
273        {
274            try
275            {
276                ISelect select = (ISelect)base.ConnectionInitialized.CreateCommand(CommandType.CommandType_Select);
277                select.SetFeatureClassName("lakes");
278                IFeatureReader reader = select.Execute();
279                int count1 = 0;
280                while (reader.ReadNext())
281                {
282                    count1++;
283                }
284                reader = select.Execute();
285                int count2 = 0;
286                while (reader.ReadNext())
287                {
288                    count2++;
289                }
290                Debug.Assert(count1 == count2, "feature counts differ");
291            }
292            catch (OSGeo.FDO.Common.Exception ex)
293            {
294                Debug.Fail(ex.Message);
295            }
296            catch (System.Exception ex)
297            {
298                Debug.Fail(ex.Message);
299            }
300        }
301
302        public void Test_select_subset()
303        {
304            ISelect select = (ISelect)base.ConnectionInitialized.CreateCommand(CommandType.CommandType_Select);
305            select.SetFeatureClassName("ontario");
306            IdentifierCollection ids = select.PropertyNames;
307            Identifier id = new Identifier("PERIMETER");
308            ids.Add(id);
309            IFeatureReader reader = select.Execute();
310            reader.ReadNext();
311            ClassDefinition definition = reader.GetClassDefinition();
312            PropertyDefinitionCollection properties = definition.Properties;
313            Debug.Assert(properties.Count == 1, "properties has wrong number of values");  // 2 == the selected property (PERIMITER) + the identity properties (FEATID; they never get filtered out)
314            PropertyDefinition property = properties["PERIMETER"];
315            Debug.Assert(property.PropertyType == PropertyType.PropertyType_DataProperty, "property is not a data property");
316            Debug.Assert(property.Name == "PERIMETER", "property is wrong");
317            double d = reader.GetDouble("PERIMETER");
318            bool bad;
319            try
320            {
321                d = reader.GetDouble("AREA");
322                bad = true;
323            }
324            catch (OSGeo.FDO.Common.Exception)
325            {
326                bad = false;
327            }
328            Debug.Assert(!bad, "non.selected property is accessible");
329        }
330
331        public void Test_select_all()
332        {
333            double area;
334            double length;
335            int count = 0;
336
337            ISelect select = (ISelect)base.ConnectionInitialized.CreateCommand(CommandType.CommandType_Select);
338            select.SetFeatureClassName("ontario");
339            IdentifierCollection ids = select.PropertyNames;
340            IFeatureReader reader = select.Execute();
341            while (reader.ReadNext())
342            {
343                reader.GetInt32("FeatId");
344                area = reader.GetDouble("AREA");
345                length = reader.GetDouble("PERIMETER");
346                reader.GetDouble("ONTARIO_");
347                reader.GetDouble("ONTARIO_ID");
348                byte[] geometry = reader.GetGeometry("Geometry");
349
350                ShpTests.AnalyzeGeometry("ontario", count++, geometry, length, area);
351            }
352        }
353
354        public void Test_select_mixed_decimals()
355        {
356            try
357            {
358                double myfloat;
359                double mydouble;
360                double mysmallint;
361                double mylargeint;
362                double myobjectid;
363                int count;
364
365                ISelect select = (ISelect)base.ConnectionInitialized.CreateCommand(CommandType.CommandType_Select);
366                select.SetFeatureClassName("ShpMixedDecimals");
367                IFeatureReader reader = select.Execute();
368                count = 0;
369                while (reader.ReadNext())
370                {
371                    count++;
372                    mylargeint = reader.GetDouble("MYLARGEINT");
373                    myfloat = reader.GetDouble("MYFLOAT");
374                    mydouble = reader.GetDouble("MYDOUBLE");
375                    mysmallint = reader.GetDouble("MYSMALLINT");
376                    myobjectid = reader.GetDouble("OBJECTID");
377                    byte[] geometry = reader.GetGeometry("Geometry");
378                }
379                Debug.Assert(count != 0, "no features selected");
380            }
381            catch (OSGeo.FDO.Common.Exception ex)
382            {
383                Debug.Fail(ex.Message);
384            }
385            catch (System.Exception ex)
386            {
387                Debug.Fail(ex.Message);
388            }
389        }
390
391        public void Test_get_spatial_context_text()
392        {
393            IGetSpatialContexts get;
394            ISpatialContextReader reader;
395            IConnection mConnection = base.ConnectionInitialized;
396            try
397            {
398                mConnection.Close();
399
400                mConnection.ConnectionString = @"DefaultFileLocation=..\..\..\..\TestData\Oahu";
401
402                Debug.Assert(mConnection.Open() == ConnectionState.ConnectionState_Open, "connection state not open");
403
404                get = (IGetSpatialContexts)mConnection.CreateCommand(CommandType.CommandType_GetSpatialContexts);
405                reader = get.Execute();
406                string text = "PROJCS[\"NAD_1983_UTM_Zone_4N\",GEOGCS[\"GCS_North_American_1983\",DATUM[\"D_North_American_1983\",SPHEROID[\"GRS_1980\",6378137.0,298.257222101]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"False_Easting\",500000.0],PARAMETER[\"False_Northing\",0.0],PARAMETER[\"Central_Meridian\",-159.0],PARAMETER[\"Scale_Factor\",0.9996],PARAMETER[\"Latitude_Of_Origin\",0.0],UNIT[\"Meter\",1.0]]";
407                while (reader.ReadNext())
408                {
409                    string name = reader.GetName();
410                    if (name == "NAD_1983_UTM_Zone_4N")
411                    {
412                        string wkt = reader.GetCoordinateSystemWkt();
413                        Debug.Assert(text.Length == wkt.Length, "wrong wkt text length");
414                        if (wkt != text)
415                        {
416                            Debug.Fail("wrong wkt text");
417                        }
418                    }
419                }
420            }
421            catch (OSGeo.FDO.Common.Exception ex)
422            {
423                Debug.Fail(ex.Message);
424            }
425            catch (System.Exception ex)
426            {
427                Debug.Fail(ex.Message);
428            }
429        }
430
431        public void Test_select_only_geometry()
432        {
433            int count;
434
435            IConnection mConnection = base.ConnectionInitialized;
436            try
437            {
438                mConnection.Close();
439                mConnection.ConnectionString = @"DefaultFileLocation=..\..\..\..\TestData\Ontario";
440                Debug.Assert(mConnection.Open() == ConnectionState.ConnectionState_Open, "connection state not open");
441
442                ISelect select = (ISelect)mConnection.CreateCommand(CommandType.CommandType_Select);
443                select.SetFeatureClassName("lakes");
444                IdentifierCollection ids = select.PropertyNames;
445                Identifier id = new Identifier("Geometry");
446                ids.Add(id);
447                IFeatureReader reader = select.Execute();
448                ClassDefinition definition = reader.GetClassDefinition();
449                PropertyDefinitionCollection properties = definition.Properties;
450                count = properties.Count;
451                Debug.Assert(count == 1, "wrong number of properties");
452                PropertyDefinition property = properties[0];
453                Debug.Assert(property.Name == "Geometry", "wrong property");
454                count = 0;
455                while (reader.ReadNext())
456                {
457                    count++;
458                    byte[] geometry = reader.GetGeometry("Geometry");
459                    try
460                    {
461                        reader.GetInt32("FeatId");
462                        Debug.Fail("FeatId present");
463                    }
464                    catch (OSGeo.FDO.Common.Exception)
465                    {
466                    }
467                }
468                Debug.Assert(count != 0, "no lakes features selected");
469            }
470            catch (OSGeo.FDO.Common.Exception ex)
471            {
472                Debug.Fail(ex.Message);
473            }
474            catch (System.Exception ex)
475            {
476                Debug.Fail(ex.Message);
477            }
478        }
479
480        private static string GeometryTypeToString (GeometryType type)
481        {
482            string ret;
483
484            switch (type)
485            {
486                case GeometryType.GeometryType_None:
487                    ret = "GeometryType.GeometryType_None";
488                    break;
489                case GeometryType.GeometryType_Point:
490                    ret = "GeometryType.GeometryType_Point";
491                    break;
492                case GeometryType.GeometryType_LineString:
493                    ret = "GeometryType.GeometryType_LineString";
494                    break;
495                case GeometryType.GeometryType_Polygon:
496                    ret = "GeometryType.GeometryType_Polygon";
497                    break;
498                case GeometryType.GeometryType_MultiPoint:
499                    ret = "GeometryType.GeometryType_MultiPoint";
500                    break;
501                case GeometryType.GeometryType_MultiLineString:
502                    ret = "GeometryType.GeometryType_MultiLineString";
503                    break;
504                case GeometryType.GeometryType_MultiPolygon:
505                    ret = "GeometryType.GeometryType_MultiPolygon";
506                    break;
507                case GeometryType.GeometryType_MultiGeometry:
508                    ret = "GeometryType.GeometryType_MultiGeometry";
509                    break;
510                case GeometryType.GeometryType_CurveString:
511                    ret = "GeometryType.GeometryType_CurveString";
512                    break;
513                case GeometryType.GeometryType_CurvePolygon:
514                    ret = "GeometryType.GeometryType_CurvePolygon";
515                    break;
516                case GeometryType.GeometryType_MultiCurveString:
517                    ret = "GeometryType.GeometryType_MultiCurveString";
518                    break;
519                case GeometryType.GeometryType_MultiCurvePolygon:
520                    ret = "GeometryType.GeometryType_MultiCurvePolygon";
521                    break;
522                default:
523                    ret = type.ToString();
524                    break;
525            }
526
527            return (ret);
528        }
529
530        public void Test_select_hawaii()
531        {
532            int count;
533
534            try
535            {
536                IConnection mConnection = base.ConnectionInitialized;
537
538                mConnection.Close();
539                mConnection.ConnectionString = @"DefaultFileLocation=..\..\..\..\TestData\Hawaii";
540
541                Debug.Assert(mConnection.Open() == ConnectionState.ConnectionState_Open, "connection state not open");
542
543                ISelect select = (ISelect)mConnection.CreateCommand(CommandType.CommandType_Select);
544                select.SetFeatureClassName("coast_n83");
545                IFeatureReader reader = select.Execute();
546                FgfGeometryFactory factory = new FgfGeometryFactory();
547                count = 0;
548                while (reader.ReadNext())
549                {
550                    count++;
551                    int id = reader.GetInt32("FeatId");
552                    byte[] bytes = reader.GetGeometry("Geometry");
553                    Debug.Assert(bytes != null, "null bytes");
554                    IGeometry geometry = factory.CreateGeometryFromFgf(bytes);
555                    GeometryType type = geometry.DerivedType;
556#if DEBUG
557                    Console.WriteLine(id.ToString() + " " + GeometryTypeToString(type));
558#endif
559                    Debug.Assert(type == GeometryType.GeometryType_Polygon, "not a polygon");
560                    IPolygon poly = (IPolygon)geometry;
561                    ILinearRing ring = poly.ExteriorRing;
562                    IEnvelope envelope = ring.Envelope;
563#if DEBUG
564                    {
565                        Console.WriteLine(" [" + envelope.MinX.ToString() + "," + envelope.MinY.ToString() + " " + envelope.MaxX.ToString() + "," + envelope.MaxY.ToString() + "]");
566                        Console.WriteLine(poly.InteriorRingCount.ToString());
567                    }
568#endif
569                    for (int i = 0; i < poly.InteriorRingCount; i++)
570                    {
571                        ring = poly.GetInteriorRing(i);
572                        envelope = ring.Envelope;
573#if DEBUG
574                        Console.WriteLine(" [" + envelope.MinX.ToString() + "," + envelope.MinY.ToString() + " " + envelope.MaxX.ToString() + "," + envelope.MaxY.ToString() + "]");
575#endif
576                    }
577                }
578                Debug.Assert(count != 0, "no coast_n83 features selected");
579            }
580            catch (OSGeo.FDO.Common.Exception ex)
581            {
582                Debug.Fail(ex.Message);
583            }
584            catch (System.Exception ex)
585            {
586                Debug.Fail(ex.Message);
587            }
588        }
589
590        public void Test_select_ontario ()
591        {
592            int count;
593
594            try
595            {
596                IConnection mConnection = base.ConnectionInitialized;
597
598                mConnection.Close ();
599                mConnection.ConnectionString = @"DefaultFileLocation=..\..\..\..\TestData\Ontario";
600
601                Debug.Assert (mConnection.Open() == ConnectionState.ConnectionState_Open, "connection state not open");
602
603                ISelect select = (ISelect)mConnection.CreateCommand (CommandType.CommandType_Select);
604                select.SetFeatureClassName("ontario");
605                IFeatureReader reader = select.Execute ();
606                FgfGeometryFactory factory = new FgfGeometryFactory();
607                count = 0;
608                while (reader.ReadNext ())
609                {
610                    count++;
611                    int id = reader.GetInt32 ("FeatId");
612                    byte [] bytes = reader.GetGeometry ("Geometry");
613                   
614                    Debug.Assert (bytes != null, "null bytes");
615                }
616                Debug.Assert (count != 0, "no ontario features selected");
617            }
618            catch (OSGeo.FDO.Common.Exception ex)
619            {
620                Debug.Fail(ex.Message);
621            }
622            catch (System.Exception ex)
623            {
624                Debug.Fail(ex.Message);
625            }
626        }
627
628        //**********************Runtime error, debug later*********************
629        public void Test_select_date_time()
630        {
631            try
632            {
633                IConnection mConnection = base.ConnectionInitialized;
634
635                mConnection.Close();
636                mConnection.ConnectionString = @"DefaultFileLocation=..\..\..\..\TestData\Zones";
637
638                Debug.Assert(mConnection.Open() == ConnectionState.ConnectionState_Open, "connection state not open");
639                ISelect select = (ISelect)mConnection.CreateCommand(CommandType.CommandType_Select);
640                select.SetFeatureClassName("ZONES");
641                IFeatureReader reader = select.Execute();
642                long count = 0;
643                long nonnull = 0;
644                while (reader.ReadNext())
645                {
646                    if (!reader.IsNull("REZONEDATE"))
647                    {
648                        // DateTime when = reader.GetDateTime("REZONEDATE"); !!!  THIS IS A BUG
649                        nonnull++;
650                    }
651                    count++;
652                }
653                Debug.Assert(524 == count, "Wrong record count");
654                Debug.Assert(25 == nonnull, "Wrong non.null record count");
655                reader.Close();
656            }
657            catch (OSGeo.FDO.Common.Exception ex)
658            {
659                Debug.Fail(ex.Message);
660            }
661            catch (System.Exception ex)
662            {
663                Debug.Fail(ex.Message);
664            }
665        }
666    }
667}
Note: See TracBrowser for help on using the repository browser.