Add a more functional (i.e. fewer-stubs) implementation of System.Data.Linq.
[mono.git] / mcs / class / Managed.Windows.Forms / Test / System.Windows.Forms / DataGridViewDataBindingTest.cs
1 // Permission is hereby granted, free of charge, to any person obtaining
2 // a copy of this software and associated documentation files (the
3 // "Software"), to deal in the Software without restriction, including
4 // without limitation the rights to use, copy, modify, merge, publish,
5 // distribute, sublicense, and/or sell copies of the Software, and to
6 // permit persons to whom the Software is furnished to do so, subject to
7 // the following conditions:
8 // 
9 // The above copyright notice and this permission notice shall be
10 // included in all copies or substantial portions of the Software.
11 // 
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19 //
20 // Copyright (c) 2008 Novell, Inc. (http://www.novell.com)
21 //
22 // Author:
23 //      Jonathan Pobst  (monkey@jpobst.com)
24 //
25
26 #if NET_2_0
27
28 using NUnit.Framework;
29 using System;
30 using System.Drawing;
31 using System.Windows.Forms;
32 using System.ComponentModel;
33 using System.Collections;
34 using System.Data;
35 using System.Collections.Generic;
36
37 namespace MonoTests.System.Windows.Forms.DataGridViewBindingTest
38 {
39
40         [TestFixture]
41         public class DataSetBindingTest : TestHelper
42         {
43                 [Test]
44                 public void TestDataSet ()
45                 {
46                         // Binding to a DataSet doesn't work unless you specify DataMember
47                         Form f = new Form ();
48                         f.ShowInTaskbar = false;
49                         
50                         DataSet ds = new DataSet ();
51                         
52                         DataTable dt = ds.Tables.Add ("Muppets");
53
54                         dt.Columns.Add ("ID");
55                         dt.Columns.Add ("Name");
56                         dt.Columns.Add ("Sex");
57
58                         dt.Rows.Add (1, "Kermit", "Male");
59                         dt.Rows.Add (2, "Miss Piggy", "Female");
60                         dt.Rows.Add (3, "Gonzo", "Male");
61                         
62                         DataGridView dgv = new DataGridView ();
63                         dgv.DataSource = ds;
64         
65                         f.Controls.Add (dgv);
66                         f.Show ();
67                         
68                         Assert.AreEqual (0, dgv.Columns.Count, "A1");
69                         Assert.AreEqual (0, dgv.Rows.Count, "A2");
70                         
71                         dgv.DataMember = "Muppets";
72
73                         Assert.AreEqual (3, dgv.Columns.Count, "A3");
74                         Assert.AreEqual (4, dgv.Rows.Count, "A4");                      
75                         
76                         f.Dispose ();
77                 }
78
79                 [Test]
80                 public void TestBasic ()
81                 {
82                         // Binding to a basic DataTable
83                         Form f = new Form ();
84                         f.ShowInTaskbar = false;
85                         
86                         DataSet ds = new DataSet ();
87
88                         DataTable dt = ds.Tables.Add ("Muppets");
89
90                         dt.Columns.Add ("ID");
91                         dt.Columns.Add ("Name");
92                         dt.Columns.Add ("Sex");
93
94                         dt.Rows.Add (1, "Kermit", "Male");
95                         dt.Rows.Add (2, "Miss Piggy", "Female");
96                         dt.Rows.Add (3, "Gonzo", "Male");
97
98                         DataGridView dgv = new DataGridView ();
99                         dgv.DataSource = dt;
100
101                         f.Controls.Add (dgv);
102                         f.Show ();
103
104                         Assert.AreEqual (3, dgv.ColumnCount, "A1");
105                         Assert.AreEqual (4, dgv.RowCount, "A2");
106
107                         Assert.AreEqual ("ID", dgv.Columns[0].Name, "A3");
108                         Assert.AreEqual ("ID", dgv.Columns[0].DataPropertyName, "A4");
109                         Assert.AreEqual (0, dgv.Columns[0].DisplayIndex, "A5");
110                         Assert.AreEqual ("ID", dgv.Columns[0].HeaderText, "A6");
111                         Assert.AreEqual (0, dgv.Columns[0].Index, "A7");
112                         Assert.AreEqual (true, dgv.Columns[0].IsDataBound, "A8");
113                         Assert.AreEqual (false, dgv.Columns[0].ReadOnly, "A9");
114                         Assert.AreEqual (true, dgv.Columns[0].Visible, "A10");
115                         Assert.AreEqual ("System.Windows.Forms.DataGridViewTextBoxCell", dgv.Columns[0].CellType.ToString (), "A11");
116                         Assert.AreEqual ("System.String", dgv.Columns[0].ValueType.ToString (), "A11-B");
117                         Assert.AreEqual ("System.Windows.Forms.DataGridViewTextBoxColumn", dgv.Columns[0].GetType ().ToString (), "A11-C");
118
119                         Assert.AreEqual ("Name", dgv.Columns[1].Name, "A12");
120                         Assert.AreEqual ("Name", dgv.Columns[1].DataPropertyName, "A13");
121                         Assert.AreEqual (1, dgv.Columns[1].DisplayIndex, "A14");
122                         Assert.AreEqual ("Name", dgv.Columns[1].HeaderText, "A15");
123                         Assert.AreEqual (1, dgv.Columns[1].Index, "A16");
124                         Assert.AreEqual (true, dgv.Columns[1].IsDataBound, "A17");
125                         Assert.AreEqual (false, dgv.Columns[1].ReadOnly, "A18");
126                         Assert.AreEqual (true, dgv.Columns[1].Visible, "A19");
127                         Assert.AreEqual ("System.Windows.Forms.DataGridViewTextBoxCell", dgv.Columns[1].CellType.ToString (), "A20");
128                         Assert.AreEqual ("System.String", dgv.Columns[1].ValueType.ToString (), "A20-B");
129
130                         Assert.AreEqual ("Sex", dgv.Columns[2].Name, "A21");
131                         Assert.AreEqual ("Sex", dgv.Columns[2].DataPropertyName, "A22");
132                         Assert.AreEqual (2, dgv.Columns[2].DisplayIndex, "A23");
133                         Assert.AreEqual ("Sex", dgv.Columns[2].HeaderText, "A24");
134                         Assert.AreEqual (2, dgv.Columns[2].Index, "A25");
135                         Assert.AreEqual (true, dgv.Columns[2].IsDataBound, "A26");
136                         Assert.AreEqual (false, dgv.Columns[2].ReadOnly, "A27");
137                         Assert.AreEqual (true, dgv.Columns[2].Visible, "A28");
138                         Assert.AreEqual ("System.Windows.Forms.DataGridViewTextBoxCell", dgv.Columns[2].CellType.ToString (), "A29");
139                         Assert.AreEqual ("System.String", dgv.Columns[2].ValueType.ToString (), "A29-B");
140
141                         Assert.AreEqual ("1", dgv.Rows[0].Cells[0].Value, "A30");
142                         Assert.AreEqual ("Kermit", dgv.Rows[0].Cells[1].Value, "A31");
143                         Assert.AreEqual ("Male", dgv.Rows[0].Cells[2].Value, "A32");
144                         Assert.AreEqual ("2", dgv.Rows[1].Cells[0].Value, "A33");
145                         Assert.AreEqual ("Miss Piggy", dgv.Rows[1].Cells[1].Value, "A34");
146                         Assert.AreEqual ("Female", dgv.Rows[1].Cells[2].Value, "A35");
147                         Assert.AreEqual ("3", dgv.Rows[2].Cells[0].Value, "A36");
148                         Assert.AreEqual ("Gonzo", dgv.Rows[2].Cells[1].Value, "A37");
149                         Assert.AreEqual ("Male", dgv.Rows[2].Cells[2].Value, "A38");
150                         
151                         f.Dispose ();
152                 }
153
154                 [Test]
155                 public void TestCheckBoxColumn ()
156                 {
157                         // Binding to a basic DataTable with a boolean value
158                         Form f = new Form ();
159                         f.ShowInTaskbar = false;
160
161                         DataSet ds = new DataSet ();
162
163                         DataTable dt = ds.Tables.Add ("Muppets");
164
165                         dt.Columns.Add ("ID");
166                         dt.Columns.Add ("Name");
167                         dt.Columns.Add ("IsFunny", typeof (bool));
168
169                         dt.Rows.Add (1, "Kermit", "true");
170                         dt.Rows.Add (2, "Miss Piggy", "false");
171                         dt.Rows.Add (3, "Gonzo", DBNull.Value);
172                         dt.Rows.Add (4, "Animal", true);
173                         dt.Rows.Add (5, "Fozzy", false);
174                         dt.Rows.Add (6, "Beaker", "TRUE");
175                         dt.Rows.Add (7, "Bunsen", "fALSe");
176                         dt.Rows.Add (8, "Sweedish Chef", 1);
177                         dt.Rows.Add (9, "Rolf", 0);
178
179                         DataGridView dgv = new DataGridView ();
180                         dgv.DataSource = dt;
181
182                         f.Controls.Add (dgv);
183                         f.Show ();
184
185                         Assert.AreEqual (3, dgv.ColumnCount, "A1");
186                         Assert.AreEqual (10, dgv.RowCount, "A2");
187
188                         Assert.AreEqual ("IsFunny", dgv.Columns[2].Name, "A3");
189                         Assert.AreEqual ("IsFunny", dgv.Columns[2].DataPropertyName, "A4");
190                         Assert.AreEqual (2, dgv.Columns[2].DisplayIndex, "A5");
191                         Assert.AreEqual ("IsFunny", dgv.Columns[2].HeaderText, "A6");
192                         Assert.AreEqual (2, dgv.Columns[2].Index, "A7");
193                         Assert.AreEqual (true, dgv.Columns[2].IsDataBound, "A8");
194                         Assert.AreEqual (false, dgv.Columns[2].ReadOnly, "A9");
195                         Assert.AreEqual (true, dgv.Columns[2].Visible, "A10");
196                         Assert.AreEqual ("System.Windows.Forms.DataGridViewCheckBoxCell", dgv.Columns[2].CellType.ToString (), "A11");
197                         Assert.AreEqual ("System.Boolean", dgv.Columns[2].ValueType.ToString (), "A12");
198                         Assert.AreEqual ("System.Windows.Forms.DataGridViewCheckBoxColumn", dgv.Columns[2].GetType ().ToString (), "A12-B");
199
200                         Assert.AreEqual (true, dgv.Rows[0].Cells[2].Value, "A13");
201                         Assert.AreEqual (false, dgv.Rows[1].Cells[2].Value, "A14");
202                         Assert.AreEqual (DBNull.Value, dgv.Rows[2].Cells[2].Value, "A15");
203                         Assert.AreEqual (true, dgv.Rows[3].Cells[2].Value, "A16");
204                         Assert.AreEqual (false, dgv.Rows[4].Cells[2].Value, "A17");
205                         Assert.AreEqual (true, dgv.Rows[5].Cells[2].Value, "A18");
206                         Assert.AreEqual (false, dgv.Rows[6].Cells[2].Value, "A19");
207                         Assert.AreEqual (true, dgv.Rows[7].Cells[2].Value, "A20");
208                         Assert.AreEqual (false, dgv.Rows[8].Cells[2].Value, "A21");
209
210                         Assert.AreEqual ("System.Windows.Forms.DataGridViewCheckBoxCell", dgv.Rows[8].Cells[2].GetType ().ToString (), "A22");
211                         
212                         f.Dispose ();
213                 }
214
215                 [Test]
216                 public void TestAutoGenerateColumns ()
217                 {
218                         // Binding when AutoGenerateColumns is false
219                         Form f = new Form ();
220                         f.ShowInTaskbar = false;
221
222                         DataSet ds = new DataSet ();
223
224                         DataTable dt = ds.Tables.Add ("Muppets");
225
226                         dt.Columns.Add ("ID");
227                         dt.Columns.Add ("Name");
228
229                         dt.Rows.Add (1, "Kermit");
230                         dt.Rows.Add (2, "Miss Piggy");
231                         dt.Rows.Add (3, "Gonzo");
232
233                         DataGridView dgv = new DataGridView ();
234                         dgv.AutoGenerateColumns = false;
235                         dgv.DataSource = dt;
236
237                         f.Controls.Add (dgv);
238                         f.Show ();
239
240                         Assert.AreEqual (0, dgv.ColumnCount, "A1");
241                         Assert.AreEqual (0, dgv.RowCount, "A2");
242
243                         dgv.DataSource = null;
244                         
245                         DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn ();
246                         col1.DataPropertyName = "Name";
247                         dgv.Columns.Add (col1);
248
249                         dgv.DataSource = dt;
250
251                         Assert.AreEqual (1, dgv.ColumnCount, "A3");
252                         Assert.AreEqual (4, dgv.RowCount, "A4");
253
254                         Assert.AreEqual ("Kermit", dgv.Rows[0].Cells[0].Value, "A5");
255
256                         dgv.DataSource = null;
257
258                         DataGridViewTextBoxColumn col2 = new DataGridViewTextBoxColumn ();
259                         col2.DataPropertyName = "id";
260                         dgv.Columns.Add (col2);
261
262                         dgv.DataSource = dt;
263
264                         Assert.AreEqual (2, dgv.ColumnCount, "A6");
265                         Assert.AreEqual (4, dgv.RowCount, "A7");
266
267                         Assert.AreEqual ("Kermit", dgv.Rows[0].Cells[0].Value, "A8");
268                         Assert.AreEqual ("1", dgv.Rows[0].Cells[1].Value, "A9");
269
270                         f.Dispose ();
271                 }
272                 
273                 [Test]  // Bug #399601
274                 public void TestAddingWithoutAutoGenerate ()
275                 {
276                         // Binding when AutoGenerateColumns is false
277                         // and adding rows to the dataset
278                         Form f = new Form ();
279                         f.ShowInTaskbar = false;
280
281                         DataSet ds = new DataSet ();
282
283                         DataTable dt = ds.Tables.Add ("Muppets");
284
285                         dt.Columns.Add ("ID");
286                         dt.Columns.Add ("Name");
287
288                         DataGridView dgv = new DataGridView ();
289                         dgv.AutoGenerateColumns = false;
290                         dgv.AllowUserToAddRows = false;
291                         
292                         DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn ();
293                         col1.DataPropertyName = "Name";
294                         dgv.Columns.Add (col1);
295
296                         dgv.DataSource = dt;
297
298                         f.Controls.Add (dgv);
299                         f.Show ();
300
301                         dt.Rows.Add (1, "Kermit");
302                         dt.Rows.Add (2, "Miss Piggy");
303                         dt.Rows.Add (3, "Gonzo");
304
305                         Assert.AreEqual (1, dgv.ColumnCount, "A1");
306                         Assert.AreEqual (3, dgv.RowCount, "A2");
307
308                         f.Dispose ();
309                 }
310
311                 [Test]
312                 public void TestDeleting ()
313                 {
314                         // Binding when AutoGenerateColumns is false
315                         // and deleting rows from the dataset and DGV
316                         Form f = new Form ();
317                         f.ShowInTaskbar = false;
318
319                         DataSet ds = new DataSet ();
320
321                         DataTable dt = ds.Tables.Add ("Muppets");
322
323                         dt.Columns.Add ("ID");
324                         dt.Columns.Add ("Name");
325
326                         DataGridView dgv = new DataGridView ();
327                         dgv.AutoGenerateColumns = false;
328                         dgv.AllowUserToAddRows = false;
329
330                         DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn ();
331                         col1.DataPropertyName = "Name";
332                         dgv.Columns.Add (col1);
333
334                         dgv.DataSource = dt;
335
336                         f.Controls.Add (dgv);
337                         f.Show ();
338
339                         dt.Rows.Add (1, "Kermit");
340                         dt.Rows.Add (2, "Miss Piggy");
341                         dt.Rows.Add (3, "Gonzo");
342
343                         Assert.AreEqual (1, dgv.ColumnCount, "A1");
344                         Assert.AreEqual (3, dgv.RowCount, "A2");
345
346                         dt.Rows[2].Delete ();
347                         Assert.AreEqual (2, dgv.RowCount, "A3");
348
349                         dgv.Rows.RemoveAt (0);
350                         Assert.AreEqual (1, dgv.RowCount, "A4");
351                         
352                         f.Dispose();
353                 }
354
355                 [Test]
356                 public void TestChangingDataSetAfterSettingDataSource ()
357                 {
358                         // Binding when AutoGenerateColumns is false
359                         // and deleting rows from the dataset and DGV
360                         Form f = new Form ();
361                         f.ShowInTaskbar = false;
362
363                         DataSet ds = new DataSet ();
364
365                         DataGridView dgv = new DataGridView ();
366                         dgv.AutoGenerateColumns = false;
367                         dgv.AllowUserToAddRows = false;
368
369                         DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn ();
370                         col1.DataPropertyName = "Name";
371                         dgv.Columns.Add (col1);
372
373                         dgv.DataSource = ds;
374                         dgv.DataMember = "Muppets";
375
376                         DataTable dt = ds.Tables.Add ("Muppets");
377
378                         dt.Columns.Add ("ID");
379                         dt.Columns.Add ("Name");
380
381                         f.Controls.Add (dgv);
382                         f.Show ();
383
384                         dt.Rows.Add (1, "Kermit");
385                         dt.Rows.Add (2, "Miss Piggy");
386                         dt.Rows.Add (3, "Gonzo");
387
388                         Assert.AreEqual (1, dgv.ColumnCount, "A1");
389                         Assert.AreEqual (3, dgv.RowCount, "A2");
390
391                         dt.Rows[2].Delete ();
392                         Assert.AreEqual (2, dgv.RowCount, "A3");
393
394                         dgv.Rows.RemoveAt (0);
395                         Assert.AreEqual (1, dgv.RowCount, "A4");
396
397                         f.Dispose ();
398                 }
399
400                 [Test]  // bug #448005
401                 public void TestClearing ()
402                 {
403                         // Binding to a DataSet doesn't work unless you specify DataMember
404                         Form f = new Form ();
405                         f.ShowInTaskbar = false;
406
407                         DataSet ds = new DataSet ();
408
409                         DataTable dt = ds.Tables.Add ("Muppets");
410
411                         dt.Columns.Add ("ID");
412                         dt.Columns.Add ("Name");
413                         dt.Columns.Add ("Sex");
414
415                         dt.Rows.Add (1, "Kermit", "Male");
416                         dt.Rows.Add (2, "Miss Piggy", "Female");
417                         dt.Rows.Add (3, "Gonzo", "Male");
418
419                         DataGridView dgv = new DataGridView ();
420                         dgv.DataSource = ds;
421
422                         f.Controls.Add (dgv);
423                         f.Show ();
424
425                         dgv.DataMember = "Muppets";
426
427                         Assert.AreEqual (3, dgv.Columns.Count, "A1");
428                         Assert.AreEqual (4, dgv.Rows.Count, "A2");
429                         
430                         ds.Tables[0].Clear ();
431                         
432                         Assert.AreEqual (3, dgv.Columns.Count, "A3");
433                         Assert.AreEqual (1, dgv.Rows.Count, "A4");
434
435                         f.Dispose ();
436                 }
437
438                 [Test]  // bug #462019
439                 public void TestCreatingColumnsAfterBind ()
440                 {
441                         // When columns are added, we need to rebind.
442                         Form f = new Form ();
443                         f.ShowInTaskbar = false;
444
445                         DataSet ds = new DataSet ();
446
447                         DataTable dt = ds.Tables.Add ("Muppets");
448
449                         dt.Columns.Add ("ID");
450                         dt.Columns.Add ("Name");
451                         dt.Columns.Add ("Sex");
452
453                         dt.Rows.Add (1, "Kermit", "Male");
454                         dt.Rows.Add (2, "Miss Piggy", "Female");
455                         dt.Rows.Add (3, "Gonzo", "Male");
456
457                         DataGridView dgv = new DataGridView ();
458                         dgv.AutoGenerateColumns = false;
459                         dgv.AllowUserToAddRows = false;
460                         dgv.DataSource = ds;
461                         dgv.DataMember = "Muppets";
462
463                         f.Controls.Add (dgv);
464                         f.Show ();
465
466                         Assert.AreEqual (0, dgv.Rows.Count, "A1");
467                         
468                         DataGridViewColumn col = new DataGridViewTextBoxColumn ();
469                         col.DataPropertyName = "ID";
470                         dgv.Columns.Add (col);
471
472                         Assert.AreEqual (3, dgv.Rows.Count, "A1");
473
474                         f.Dispose ();
475                 }
476         }
477         
478         [TestFixture]
479         public class BindingListTest : TestHelper
480         {
481                 [Test]  // bug #325239
482                 public void TestNullItemInList ()
483                 {
484                         Form f = new Form ();
485                         f.ShowInTaskbar = false;
486
487                         // The list contains one object, but the object is null
488                         IList<Customer> list = new Customer[1];
489
490                         DataGridView dgv = new DataGridView ();
491                         dgv.DataSource = new BindingList<Customer> (list);
492
493                         f.Controls.Add (dgv);
494                         f.Show ();
495
496                         Assert.AreEqual (1, dgv.ColumnCount, "A1");
497                         Assert.AreEqual (2, dgv.RowCount, "A2");
498
499                         f.Dispose ();
500                 }
501
502                 private class Customer
503                 {
504                         string name;
505                         
506                         public string Name {
507                                 get { return name; }
508                                 set { name = value; }
509                         }
510                 }
511         }
512
513         [TestFixture]
514         public class ArrayTest : TestHelper
515         {
516                 [Test]  // bug #337470
517                 public void TestNestedCollections ()
518                 {
519                         // The grid should not accept collection properties, like Names
520                         Form f = new Form ();
521                         f.ShowInTaskbar = false;
522
523                         Array customers = new Customer[1];
524                         customers.SetValue (new Customer (), 0);
525                         
526                         DataGridView dgv = new DataGridView ();
527                         dgv.DataSource = customers;
528
529                         f.Controls.Add (dgv);
530                         f.Show ();
531
532                         Assert.AreEqual (1, dgv.ColumnCount, "A1");
533                         Assert.AreEqual ("Name", dgv.Columns[0].Name, "A2");
534
535                         f.Dispose ();
536                 }
537
538                 private class Customer
539                 {
540                         public string Name { get { return "Kermit"; } }
541                         public string[] Names { get { return new string[] { "Kermit", "Gonzo" }; } }
542                 }
543         }
544
545         [TestFixture]
546         public class BindingSourceTest : TestHelper
547         {
548                 [Test]  // bug #345483
549                 public void TestBindingSource ()
550                 {
551                         // The grid has to extract the List from the BindingSource
552                         Form f = new Form ();
553                         f.ShowInTaskbar = false;
554
555                         BindingSource BindingSource = new BindingSource ();
556
557                         DataSet dataSet1 = new DataSet ();
558
559                         dataSet1.Tables.Add ();
560                         dataSet1.Tables[0].Columns.Add ();
561                         dataSet1.Tables[0].Columns.Add ();
562                         dataSet1.Tables[0].Columns.Add ();
563                         dataSet1.Tables[0].Columns.Add ();
564                         dataSet1.Tables[0].Columns.Add ();
565                         dataSet1.Tables[0].Rows.Add ("111111", "222222", "333333", "444444", "555555");
566
567                         BindingSource.DataSource = dataSet1.Tables[0];
568
569                         DataGridView dgv = new DataGridView ();
570                         dgv.DataSource = BindingSource;
571
572                         f.Controls.Add (dgv);
573                         f.Show ();
574
575                         Assert.AreEqual (5, dgv.ColumnCount, "A1");
576                         Assert.AreEqual (2, dgv.RowCount, "A2");
577
578                         Assert.AreEqual ("Column1", dgv.Columns[0].Name, "A3");
579                         Assert.AreEqual ("111111", dgv.Rows[0].Cells[0].Value, "A4");
580
581                         f.Dispose ();
582                 }
583
584                 private class Customer
585                 {
586                         public string Name { get { return "Kermit"; } }
587                         public string[] Names { get { return new string[] { "Kermit", "Gonzo" }; } }
588                 }
589         }
590 }
591 #endif