Author: suresh
Date: 2005-04-29 05:03:57 -0400 (Fri, 29 Apr 2005)
New Revision: 43774

Modified:
   trunk/mcs/class/System.Data/System.Data/ChangeLog
   trunk/mcs/class/System.Data/System.Data/DataTableReader.cs
   trunk/mcs/class/System.Data/Test/System.Data/ChangeLog
   trunk/mcs/class/System.Data/Test/System.Data/DataTableReaderTest.cs
Log:
2005-04-29  Sureshkumar T  <[EMAIL PROTECTED]>
        * Test/System.Data/DataTableReaderTest.cs: Added few more tests.
        * System.Data/DataTableReader.cs: removed use of _first. throw if given 
index
        is out of range of columns.



Modified: trunk/mcs/class/System.Data/System.Data/ChangeLog
===================================================================
--- trunk/mcs/class/System.Data/System.Data/ChangeLog   2005-04-29 07:31:47 UTC 
(rev 43773)
+++ trunk/mcs/class/System.Data/System.Data/ChangeLog   2005-04-29 09:03:57 UTC 
(rev 43774)
@@ -1,3 +1,8 @@
+2005-04-29  Sureshkumar T  <[EMAIL PROTECTED]>
+
+       * DataTableReader.cs: removed use of _first. throw if given index
+       is out of range of columns.
+
 2005-04-27  Sureshkumar T  <[EMAIL PROTECTED]>
 
        * DataTableReader.cs: Implemented most of the TODO.

Modified: trunk/mcs/class/System.Data/System.Data/DataTableReader.cs
===================================================================
--- trunk/mcs/class/System.Data/System.Data/DataTableReader.cs  2005-04-29 
07:31:47 UTC (rev 43773)
+++ trunk/mcs/class/System.Data/System.Data/DataTableReader.cs  2005-04-29 
09:03:57 UTC (rev 43774)
@@ -42,8 +42,7 @@
                 bool            _closed;
                 DataTable []    _tables;
                 IEnumerator     _enumerator;
-                bool            _first = true;
-                int             _current = 0;
+                int             _current = -1;
                 int             _index;
                 DataTable       _schemaTable;
 
@@ -64,7 +63,7 @@
                         this._tables = dataTables;
                         _closed = false;
                         _index = 0;
-                        _current = 0;
+                        _current = -1;
                 }
 
                 #endregion // Constructors
@@ -76,11 +75,11 @@
                 }
 
                 public override int FieldCount {
-                        get { return _tables [_index].Columns.Count; }
+                        get { return CurrentTable.Columns.Count; }
                 }
 
                 public override bool HasRows {
-                        get { return _tables [_index].Rows.Count > 0; }
+                        get { return CurrentTable.Rows.Count > 0; }
                 }
 
                 public override bool IsClosed {
@@ -90,6 +89,11 @@
                 public override object this [int index] {
                         get { 
                                 Validate ();
+                                if (index < 0 || index >= FieldCount)
+                                        throw new ArgumentOutOfRangeException 
(String.Format ("index {0} is not" +
+                                                                               
            "in the range",
+                                                                               
            index)
+                                                                            );
                                 DataRow row = CurrentRow;
                                 if (row.RowState == DataRowState.Deleted)
                                         throw new InvalidOperationException 
("Deleted Row's information cannot be accessed!");
@@ -201,7 +205,7 @@
                 
                 public override Type GetFieldType (int i)
                 {
-                        Validate ();
+                        ValidateClosed ();
                         return CurrentTable.Columns [i].DataType;
                 }
                 
@@ -237,7 +241,7 @@
                 
                 public override int GetOrdinal (string name)
                 {
-                        Validate ();
+                        ValidateClosed ();
                         DataColumn column = CurrentTable.Columns [name];
                         if (column == null)
                                 throw new ArgumentException (String.Format 
("Column {0} is not found in the schema",
@@ -312,11 +316,20 @@
 
                 private void Validate ()
                 {
+                       ValidateClosed ();
+                       if (_current == -1)
+                                throw new InvalidOperationException ("Invalid 
attempt to read before " + 
+                                                                     "Read is 
called");
+                }
+
+                private void ValidateClosed ()
+                {
                         if (IsClosed)
                                 throw new InvalidOperationException ("Invalid 
attempt to read when " + 
                                                                      "the 
reader is closed");
                 }
                 
+                
                 private bool MoveNext ()
                 {
                         do {
@@ -328,23 +341,15 @@
 
                 public override bool NextResult ()
                 {
-                        _current = 0;
+                        _current = -1;
                         _index++;
-                        _first = true;
                         _schemaTable = null;            // force to create 
fresh
                         return _index < _tables.Length;
                 }
 
                 public override bool Read ()
                 {       
-                        Validate ();
-                        if (_first) {
-                                _first = false;
-                                if (! HasRows)
-                                        return false;
-                                if (CurrentRow.RowState != 
DataRowState.Deleted)
-                                        return true;
-                        }
+                        ValidateClosed ();
                         return MoveNext ();
                 }
 

Modified: trunk/mcs/class/System.Data/Test/System.Data/ChangeLog
===================================================================
--- trunk/mcs/class/System.Data/Test/System.Data/ChangeLog      2005-04-29 
07:31:47 UTC (rev 43773)
+++ trunk/mcs/class/System.Data/Test/System.Data/ChangeLog      2005-04-29 
09:03:57 UTC (rev 43774)
@@ -1,3 +1,7 @@
+2005-04-29  Sureshkumar T  <[EMAIL PROTECTED]>
+
+       * DataTableReaderTest.cs: Added few more tests.
+
 2005-04-27  Sureshkumar T  <[EMAIL PROTECTED]>
 
        * DataTableReaderTest.cs: Added Tests for DataTableReader class.

Modified: trunk/mcs/class/System.Data/Test/System.Data/DataTableReaderTest.cs
===================================================================
--- trunk/mcs/class/System.Data/Test/System.Data/DataTableReaderTest.cs 
2005-04-29 07:31:47 UTC (rev 43773)
+++ trunk/mcs/class/System.Data/Test/System.Data/DataTableReaderTest.cs 
2005-04-29 09:03:57 UTC (rev 43774)
@@ -183,6 +183,14 @@
                         reader.Close ();
                         reader.Read ();
                 }
+
+                [Test]
+                public void GetOrdinalTest ()
+                {
+                        DataTableReader reader = new DataTableReader (dt);
+                        Assert.AreEqual (1, reader.GetOrdinal ("name"), "#1 
get ordinal should work even" +
+                                         " without calling Read");
+                }
                 #endregion // Positive Tests
                 
                 #region Negative Tests
@@ -205,6 +213,47 @@
                         DataTableReader reader = new DataTableReader (new 
DataTable [] {});
                         reader.Read ();
                 }
+
+               [Test]
+                [ExpectedException (typeof (InvalidOperationException))]
+               public void ReadAfterClosedTest ()
+               {
+                        DataTableReader reader = new DataTableReader (dt);
+                       reader.Read ();
+                       reader.Close ();
+                        reader.Read ();
+               }       
+
+               [Test]
+                [ExpectedException (typeof (InvalidOperationException))]
+               public void AccessAfterClosedTest ()
+               {
+                        DataTableReader reader = new DataTableReader (dt);
+                       reader.Read ();
+                       reader.Close ();
+                       int i = (int) reader [0];
+                       i++; // to supress warning
+               }
+
+                [Test]
+                [ExpectedException (typeof (InvalidOperationException))]
+               public void AccessBeforeReadTest ()
+               {
+                        DataTableReader reader = new DataTableReader (dt);
+                       int i = (int) reader [0];
+                       i++; // to supress warning
+               }
+
+                [Test]
+                [ExpectedException (typeof (ArgumentOutOfRangeException))]
+               public void InvalidIndexTest ()
+               {
+                        DataTableReader reader = new DataTableReader (dt);
+                        reader.Read ();
+                       int i = (int) reader [90]; // kidding, ;-)
+                       i++; // to supress warning
+               }
+
                 #endregion // Negative Tests
 
         }

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to