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

Last change on this file was 2045, checked in by gregboone, 10 years ago

FDO2: Add copyright information to source files

  • Property svn:eol-style set to native
File size: 9.2 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;
20using System.IO;
21
22using OSGeo.FDO.Connections;
23using OSGeo.FDO.Commands;
24using OSGeo.FDO.Commands.Schema;
25using OSGeo.FDO.Commands.Feature;
26using OSGeo.FDO.Schema;
27using OSGeo.FDO.Expression;
28using OSGeo.Geometry;
29
30using unit_test.Framework;
31
32namespace unit_test.ProviderTests
33{
34    class UpdateTests : BaseTestWithConnection
35    {
36        public UpdateTests(ShpTestProvider connectionProvider)
37            : base(connectionProvider)
38        { }
39
40        public override void SetUp()
41        {
42            //
43            if(!Directory.Exists(GetLocation()))
44            {
45                Directory.CreateDirectory(GetLocation());
46            }
47
48            base.SetUp() ;
49        }
50
51        public override void TearDown()
52        {
53            // Clean up leftover class, if any:
54            ShpTests.CleanUpClass(base.ConnectionInitialized, null, className);
55
56            base.TearDown() ;
57
58            //
59            if (File.Exists(GetLocation() + "schema.xml"))
60            {
61                File.Delete(GetLocation() + "schema.xml");
62            }
63        }
64
65        public enum GeometricType
66        {
67            GeometricType_Point = 0x01,
68            GeometricType_Curve = 0x02,
69            GeometricType_Surface = 0x04,
70            GeometricType_Solid = 0x08
71        };
72
73        private string className = "Test";
74        private string schemaName = "TheSchema";
75
76        public void Test_update ()
77        {
78            try
79            {
80                create_schema (schemaName, className, GeometricType.GeometricType_Point, true, true);
81
82                IInsert insert = (IInsert)base.ConnectionInitialized.CreateCommand (CommandType.CommandType_Insert);
83                insert.SetFeatureClassName(className);
84                PropertyValueCollection values = insert.PropertyValues ;
85                values.Clear() ;
86
87                ValueExpression expression = (ValueExpression)ShpTests.ParseByDataType("24", DataType.DataType_Decimal); 
88                PropertyValue value = new PropertyValue("Id", expression);
89                values.Add (value);
90
91                expression = (ValueExpression)Expression.Parse ("'1147 Trafford Drive'");
92                value = new PropertyValue("Street", expression);
93                values.Add (value);
94
95                // add NULL geometry value:
96                GeometryValue geometry = new GeometryValue();
97                geometry.SetNull();
98                value = new PropertyValue("Geometry", geometry);
99                values.Add (value);
100
101                IFeatureReader reader = insert.Execute ();
102                int featid = -1;
103                while (reader.ReadNext ())
104                {
105                    if (-1 != featid)
106                        Debug.Fail("too many features inserted");
107                    featid = reader.GetInt32 ("FeatId");
108                }
109                reader.Close ();
110                if (-1 == featid)
111                    Debug.Fail("too few features inserted");
112
113                ISelect select = (ISelect)base.ConnectionInitialized.CreateCommand(CommandType.CommandType_Select);
114                select.SetFeatureClassName(className);
115                reader = select.Execute();
116                while (reader.ReadNext())
117                {
118                    Debug.Assert(featid == reader.GetInt32("FeatId"), "incorrect featid value");
119                    Debug.Assert(24 == reader.GetDouble("Id"), "incorrect id value");
120                    Debug.Assert(0 == string.Compare("1147 Trafford Drive", reader.GetString("Street")), "incorrect street value");
121                    Debug.Assert(reader.IsNull("Area"), "incorrect area value");
122                    Debug.Assert(reader.IsNull("Vacant"), "incorrect vacant value");
123                    Debug.Assert(reader.IsNull("Birthday"), "incorrect birthday year value");
124                    Debug.Assert(reader.IsNull("Geometry"), "incorrect geometry value");
125                }
126                reader.Close();
127
128                // update it
129                IUpdate update = (IUpdate)base.ConnectionInitialized.CreateCommand (CommandType.CommandType_Update);
130                update.SetFeatureClassName (className);
131               
132                string filter = "FeatId = " + featid.ToString() ;
133                update.SetFilter (filter);
134                    values = update.PropertyValues ;
135                expression = (ValueExpression)Expression.Parse("'88 Noodle Court'");
136                value = new PropertyValue("Street", expression);
137                values.Add (value);
138                if (1 != update.Execute ())
139                    Debug.Fail("update execute failed");
140
141                // check by doing a select
142                select = (ISelect)base.ConnectionInitialized.CreateCommand (CommandType.CommandType_Select);
143                select.SetFeatureClassName(className);
144                reader = select.Execute ();
145                while (reader.ReadNext ())
146                {
147                    Debug.Assert (featid == reader.GetInt32 ("FeatId"), "incorrect featid value");
148                    Debug.Assert (24 == reader.GetDouble ("Id"), "incorrect id value");
149                    Debug.Assert (0 == string.Compare("88 Noodle Court", reader.GetString ("Street")), "incorrect street value");
150                    Debug.Assert (reader.IsNull("Area"), "incorrect area value");
151                    Debug.Assert (reader.IsNull("Vacant"), "incorrect vacant value");
152                    Debug.Assert (reader.IsNull ("Birthday"), "incorrect birthday year value");
153                    Debug.Assert (reader.IsNull ("Geometry"), "incorrect geometry value");
154                }
155                reader.Close ();
156            }
157            catch (OSGeo.Common.Exception ex)
158            {
159                Debug.Fail(ex.Message);
160            }
161        }
162
163        // utility methods:
164        protected void create_schema(string schemaName, string className, GeometricType type, bool elevation, bool measure)
165        {
166            // Clean up leftovers from previous tests:
167            ShpTests.CleanUpClass(base.ConnectionInitialized, null, className);
168           
169            IApplySchema apply = (IApplySchema)base.ConnectionInitialized.CreateCommand(CommandType.CommandType_ApplySchema);
170            FeatureSchema schema = new FeatureSchema(schemaName, "test schema");
171            ClassCollection classes = schema.Classes;
172
173            DataPropertyDefinition featid = new DataPropertyDefinition("FeatId", "integer");
174            featid.DataType = DataType.DataType_Int32 ;
175            featid.IsAutoGenerated = true ;
176            featid.Nullable = false ;
177
178            DataPropertyDefinition id = new DataPropertyDefinition("Id", "decimal");
179            id.DataType = DataType.DataType_Decimal;
180            id.Precision = 10;
181            id.Scale = 10 ;
182         
183            DataPropertyDefinition street = new DataPropertyDefinition("Street", "text");
184            street.DataType = DataType.DataType_String;
185            street.Length = 64;
186
187            DataPropertyDefinition area = new DataPropertyDefinition("Area", "double");
188            area.DataType = DataType.DataType_Decimal;
189            area.Precision = 20;
190            area.Scale = 20;
191
192            DataPropertyDefinition vacant = new DataPropertyDefinition("Vacant", "boolean");
193            vacant.DataType = DataType.DataType_Boolean;
194
195            DataPropertyDefinition birthday = new DataPropertyDefinition("Birthday", "date");
196            birthday.DataType = DataType.DataType_DateTime;
197
198            // build a location geometry property
199            GeometricPropertyDefinition location = new GeometricPropertyDefinition("Geometry", "geometry");
200            location.GeometryTypes = (int)type;
201            location.HasElevation = elevation;
202            location.HasMeasure = measure;
203
204            //// assemble the feature class
205            FeatureClass feature = new FeatureClass(className, "test class created with apply schema");
206            PropertyDefinitionCollection properties = feature.Properties;
207            properties.Add(featid);
208            properties.Add(id);
209            properties.Add(street);
210            properties.Add(area);
211            properties.Add(vacant);
212            properties.Add(birthday);
213            properties.Add(location);
214            feature.GeometryProperty = location;
215            DataPropertyDefinitionCollection identities = feature.IdentityProperties;
216            identities.Add(featid);
217
218            // submit the new schema
219            classes.Add(feature);
220            apply.FeatureSchema = schema;
221            apply.Execute();
222        }
223    }
224}
Note: See TracBrowser for help on using the repository browser.