context: //
  // SqlDataAdapterTest.cs - NUnit Test Cases for testing the
  //                        SqlDataAdapter class
  // Author:
  //      Gert Driesen (drieseng@users.sourceforge.net)
  //
  // Copyright (c) 2007 Gert Driesen
  //
  // Permission is hereby granted, free of charge, to any person obtaining
  // a copy of this software and associated documentation files (the
  // "Software"), to deal in the Software without restriction, including
  // without limitation the rights to use, copy, modify, merge, publish,
  // distribute, sublicense, and/or sell copies of the Software, and to
  // permit persons to whom the Software is furnished to do so, subject to
  // the following conditions:
  //
  // The above copyright notice and this permission notice shall be
  // included in all copies or substantial portions of the Software.
  //
  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  //
  
  using System;
  using System.Data;
  using System.Data.SqlClient;
  #if !MOBILE
  using System.Data.Odbc;
  #endif
  
  using NUnit.Framework;
  
  namespace MonoTests.System.Data.SqlClient
  {
  	[TestFixture]
  	public class SqlDataAdapterTest
  	{
  		[Test] // SqlDataAdapter ()
  		public void Constructor1 ()
  		{
  			SqlDataAdapter da = new SqlDataAdapter ();
  			Assert.IsTrue (da.AcceptChangesDuringFill, "#1");
  			Assert.IsTrue (da.AcceptChangesDuringUpdate, "#2");
  			Assert.IsNull (da.Container, "#3");
  			Assert.IsFalse (da.ContinueUpdateOnError, "#4");
  			Assert.IsNull (da.DeleteCommand, "#5");
  			Assert.AreEqual (LoadOption.OverwriteChanges, da.FillLoadOption, "#6");
  			Assert.IsNull (da.InsertCommand, "#7");
  			Assert.AreEqual (MissingMappingAction.Passthrough, da.MissingMappingAction, "#8");
  			Assert.AreEqual (MissingSchemaAction.Add, da.MissingSchemaAction, "#9");
  			Assert.IsFalse (da.ReturnProviderSpecificTypes, "#10");
  			Assert.IsNull (da.SelectCommand, "#11");
  			Assert.IsNull (da.Site, "#12");
  			Assert.IsNotNull (da.TableMappings, "#13");
  			Assert.AreEqual (0, da.TableMappings.Count, "#14");
  			Assert.AreEqual (1, da.UpdateBatchSize, "#15");
  			Assert.IsNull (da.UpdateCommand, "#16");
  		}
  
  		[Test] // SqlDataAdapter (SqlCommand)
  		public void Constructor2 ()
  		{
  			SqlCommand cmd = new SqlCommand ();
  			SqlDataAdapter da = new SqlDataAdapter (cmd);
  			Assert.IsTrue (da.AcceptChangesDuringFill, "#1");
  			Assert.IsTrue (da.AcceptChangesDuringUpdate, "#2");
  			Assert.IsNull (da.Container, "#3");
  			Assert.IsFalse (da.ContinueUpdateOnError, "#4");
  			Assert.IsNull (da.DeleteCommand, "#5");
  			Assert.AreEqual (LoadOption.OverwriteChanges, da.FillLoadOption, "#6");
  			Assert.IsNull (da.InsertCommand, "#7");
  			Assert.AreEqual (MissingMappingAction.Passthrough, da.MissingMappingAction, "#8");
  			Assert.AreEqual (MissingSchemaAction.Add, da.MissingSchemaAction, "#9");
  			Assert.IsFalse (da.ReturnProviderSpecificTypes, "#10");
  			Assert.IsNotNull (da.SelectCommand, "#11");
  			Assert.AreSame (cmd, da.SelectCommand, "#12");
  			Assert.IsNull (da.Site, "#13");
  			Assert.IsNotNull (da.TableMappings, "#14");
  			Assert.AreEqual (0, da.TableMappings.Count, "#15");
  			Assert.AreEqual (1, da.UpdateBatchSize, "#16");
  			Assert.IsNull (da.UpdateCommand, "#17");
  		}
  
  		[Test] // SqlDataAdapter (SqlCommand)
  		public void Constructor2_SelectCommand_Null ()
  		{
  			SqlDataAdapter da = new SqlDataAdapter ((SqlCommand) null);
  			Assert.IsTrue (da.AcceptChangesDuringFill, "#1");
  			Assert.IsTrue (da.AcceptChangesDuringUpdate, "#2");
  			Assert.IsNull (da.Container, "#3");
  			Assert.IsFalse (da.ContinueUpdateOnError, "#4");
  			Assert.IsNull (da.DeleteCommand, "#5");
  			Assert.AreEqual (LoadOption.OverwriteChanges, da.FillLoadOption, "#6");
  			Assert.IsNull (da.InsertCommand, "#7");
  			Assert.AreEqual (MissingMappingAction.Passthrough, da.MissingMappingAction, "#8");
  			Assert.AreEqual (MissingSchemaAction.Add, da.MissingSchemaAction, "#9");
  			Assert.IsFalse (da.ReturnProviderSpecificTypes, "#10");
  			Assert.IsNull (da.SelectCommand, "#11");
  			Assert.IsNull (da.Site, "#12");
  			Assert.IsNotNull (da.TableMappings, "#13");
  			Assert.AreEqual (0, da.TableMappings.Count, "#14");
  			Assert.AreEqual (1, da.UpdateBatchSize, "#15");
  			Assert.IsNull (da.UpdateCommand, "#16");
  		}
  
  		[Test] // SqlDataAdapter (string, SqlConnection)
  		public void Constructor3 ()
  		{
  			string selectCommandText = "SELECT * FROM Authors";
  			SqlConnection selectConnection = new SqlConnection ();
  
  			SqlDataAdapter da = new SqlDataAdapter (selectCommandText,
  				selectConnection);
  			Assert.IsTrue (da.AcceptChangesDuringFill, "#1");
  			Assert.IsTrue (da.AcceptChangesDuringUpdate, "#2");
  			Assert.IsNull (da.Container, "#3");
  			Assert.IsFalse (da.ContinueUpdateOnError, "#4");
  			Assert.IsNull (da.DeleteCommand, "#5");
  			Assert.AreEqual (LoadOption.OverwriteChanges, da.FillLoadOption, "#6");
  			Assert.IsNull (da.InsertCommand, "#7");
  			Assert.AreEqual (MissingMappingAction.Passthrough, da.MissingMappingAction, "#8");
  			Assert.AreEqual (MissingSchemaAction.Add, da.MissingSchemaAction, "#9");
  			Assert.IsFalse (da.ReturnProviderSpecificTypes, "#10");
  			Assert.IsNotNull (da.SelectCommand, "#11");
  			Assert.AreSame (selectCommandText, da.SelectCommand.CommandText, "#12");
  			Assert.AreSame (selectConnection, da.SelectCommand.Connection, "#13");
  			Assert.IsNull (da.Site, "#14");
  			Assert.IsNotNull (da.TableMappings, "#15");
  			Assert.AreEqual (0, da.TableMappings.Count, "#16");
  			Assert.AreEqual (1, da.UpdateBatchSize, "#17");
  			Assert.IsNull (da.UpdateCommand, "#18");
  		}
  
  		[Test] // SqlDataAdapter (string, SqlConnection)
  		public void Constructor3_SelectCommandText_Null ()
  		{
  			SqlConnection selectConnection = new SqlConnection ();
  
  			SqlDataAdapter da = new SqlDataAdapter ((string) null,
  				selectConnection);
  			Assert.IsTrue (da.AcceptChangesDuringFill, "#1");
  			Assert.IsTrue (da.AcceptChangesDuringUpdate, "#2");
  			Assert.IsNull (da.Container, "#3");
  			Assert.IsFalse (da.ContinueUpdateOnError, "#4");
  			Assert.IsNull (da.DeleteCommand, "#5");
  			Assert.AreEqual (LoadOption.OverwriteChanges, da.FillLoadOption, "#6");
  			Assert.IsNull (da.InsertCommand, "#7");
  			Assert.AreEqual (MissingMappingAction.Passthrough, da.MissingMappingAction, "#8");
  			Assert.AreEqual (MissingSchemaAction.Add, da.MissingSchemaAction, "#9");
  			Assert.IsFalse (da.ReturnProviderSpecificTypes, "#10");
  			Assert.IsNotNull (da.SelectCommand, "#11");
  			Assert.IsNotNull (da.SelectCommand.CommandText, "#12");
  			Assert.AreEqual (string.Empty, da.SelectCommand.CommandText, "#13");
  			Assert.AreSame (selectConnection, da.SelectCommand.Connection, "#14");
  			Assert.IsNull (da.Site, "#15");
  			Assert.IsNotNull (da.TableMappings, "#16");
  			Assert.AreEqual (0, da.TableMappings.Count, "#17");
  			Assert.AreEqual (1, da.UpdateBatchSize, "#18");
  			Assert.IsNull (da.UpdateCommand, "#19");
  		}
  
  		[Test] // SqlDataAdapter (string, SqlConnection)
  		public void Constructor3_SelectConnection_Null ()
  		{
  			string selectCommandText = "SELECT * FROM Authors";
  
  			SqlDataAdapter da = new SqlDataAdapter (selectCommandText,
  				(SqlConnection) null);
  			Assert.IsTrue (da.AcceptChangesDuringFill, "#1");
  			Assert.IsTrue (da.AcceptChangesDuringUpdate, "#2");
  			Assert.IsNull (da.Container, "#3");
  			Assert.IsFalse (da.ContinueUpdateOnError, "#4");
  			Assert.IsNull (da.DeleteCommand, "#5");
  			Assert.AreEqual (LoadOption.OverwriteChanges, da.FillLoadOption, "#6");
  			Assert.IsNull (da.InsertCommand, "#7");
  			Assert.AreEqual (MissingMappingAction.Passthrough, da.MissingMappingAction, "#8");
  			Assert.AreEqual (MissingSchemaAction.Add, da.MissingSchemaAction, "#9");
  			Assert.IsFalse (da.ReturnProviderSpecificTypes, "#10");
  			Assert.IsNotNull (da.SelectCommand, "#11");
  			Assert.AreSame (selectCommandText, da.SelectCommand.CommandText, "#12");
  			Assert.IsNull (da.SelectCommand.Connection, "#13");
  			Assert.IsNull (da.Site, "#14");
  			Assert.IsNotNull (da.TableMappings, "#15");
  			Assert.AreEqual (0, da.TableMappings.Count, "#16");
  			Assert.AreEqual (1, da.UpdateBatchSize, "#17");
  			Assert.IsNull (da.UpdateCommand, "#18");
  		}
  
  		[Test] // SqlDataAdapter (string, string)]
  		public void Constructor4 ()
  		{
  			string selectCommandText = "SELECT * FROM Authors";
  			string selectConnectionString = "server=SQLSRV;database=Mono";
  
  			SqlDataAdapter da = new SqlDataAdapter (selectCommandText,
  				selectConnectionString);
  			Assert.IsTrue (da.AcceptChangesDuringFill, "#1");
  			Assert.IsTrue (da.AcceptChangesDuringUpdate, "#2");
  			Assert.IsNull (da.Container, "#3");
  			Assert.IsFalse (da.ContinueUpdateOnError, "#4");
  			Assert.IsNull (da.DeleteCommand, "#5");
  			Assert.AreEqual (LoadOption.OverwriteChanges, da.FillLoadOption, "#6");
  			Assert.IsNull (da.InsertCommand, "#7");
  			Assert.AreEqual (MissingMappingAction.Passthrough, da.MissingMappingAction, "#8");
  			Assert.AreEqual (MissingSchemaAction.Add, da.MissingSchemaAction, "#9");
  			Assert.IsFalse (da.ReturnProviderSpecificTypes, "#10");
  			Assert.IsNotNull (da.SelectCommand, "#11");
  			Assert.AreSame (selectCommandText, da.SelectCommand.CommandText, "#12");
  			Assert.IsNotNull (da.SelectCommand.Connection, "#13");
  			Assert.AreEqual (selectConnectionString, da.SelectCommand.Connection.ConnectionString, "#14");
  			Assert.IsNull (da.Site, "#15");
  			Assert.IsNotNull (da.TableMappings, "#16");
  			Assert.AreEqual (0, da.TableMappings.Count, "#17");
  			Assert.AreEqual (1, da.UpdateBatchSize, "#18");
  			Assert.IsNull (da.UpdateCommand, "#19");
  		}
  
  		[Test] // SqlDataAdapter (string, string)]
  		public void Constructor4_SelectCommandText_Null ()
  		{
  			string selectConnectionString = "server=SQLSRV;database=Mono";
  
  			SqlDataAdapter da = new SqlDataAdapter ((string) null,
  				selectConnectionString);
  			Assert.IsTrue (da.AcceptChangesDuringFill, "#1");
  			Assert.IsTrue (da.AcceptChangesDuringUpdate, "#2");
  			Assert.IsNull (da.Container, "#3");
  			Assert.IsFalse (da.ContinueUpdateOnError, "#4");
  			Assert.IsNull (da.DeleteCommand, "#5");
  			Assert.AreEqual (LoadOption.OverwriteChanges, da.FillLoadOption, "#6");
  			Assert.IsNull (da.InsertCommand, "#7");
  			Assert.AreEqual (MissingMappingAction.Passthrough, da.MissingMappingAction, "#8");
  			Assert.AreEqual (MissingSchemaAction.Add, da.MissingSchemaAction, "#9");
  			Assert.IsFalse (da.ReturnProviderSpecificTypes, "#10");
  			Assert.IsNotNull (da.SelectCommand, "#11");
  			Assert.IsNotNull (da.SelectCommand.CommandText, "#12");
  			Assert.AreEqual (string.Empty, da.SelectCommand.CommandText, "#13");
  			Assert.IsNotNull (da.SelectCommand.Connection, "#14");
  			Assert.AreEqual (selectConnectionString, da.SelectCommand.Connection.ConnectionString, "#15");
  			Assert.IsNull (da.Site, "#16");
  			Assert.IsNotNull (da.TableMappings, "#17");
  			Assert.AreEqual (0, da.TableMappings.Count, "#18");
  			Assert.AreEqual (1, da.UpdateBatchSize, "#19");
  			Assert.IsNull (da.UpdateCommand, "#20");
  		}
  
  		[Test] // SqlDataAdapter (string, string)]
  		public void Constructor4_SelectConnectionString_Null ()
  		{
  			string selectCommandText = "SELECT * FROM Authors";
  
  			SqlDataAdapter da = new SqlDataAdapter (selectCommandText,
  				(string) null);
  			Assert.IsTrue (da.AcceptChangesDuringFill, "#1");
  			Assert.IsTrue (da.AcceptChangesDuringUpdate, "#2");
  			Assert.IsNull (da.Container, "#3");
  			Assert.IsFalse (da.ContinueUpdateOnError, "#4");
  			Assert.IsNull (da.DeleteCommand, "#5");
  			Assert.AreEqual (LoadOption.OverwriteChanges, da.FillLoadOption, "#6");
  			Assert.IsNull (da.InsertCommand, "#7");
  			Assert.AreEqual (MissingMappingAction.Passthrough, da.MissingMappingAction, "#8");
  			Assert.AreEqual (MissingSchemaAction.Add, da.MissingSchemaAction, "#9");
  			Assert.IsFalse (da.ReturnProviderSpecificTypes, "#10");
  			Assert.IsNotNull (da.SelectCommand, "#11");
  			Assert.AreSame (selectCommandText, da.SelectCommand.CommandText, "#12");
  			Assert.IsNotNull (da.SelectCommand.Connection, "#14");
  			Assert.AreEqual (string.Empty, da.SelectCommand.Connection.ConnectionString, "#15");
  			Assert.IsNull (da.Site, "#16");
  			Assert.IsNotNull (da.TableMappings, "#17");
  			Assert.AreEqual (0, da.TableMappings.Count, "#18");
  			Assert.AreEqual (1, da.UpdateBatchSize, "#19");
  			Assert.IsNull (da.UpdateCommand, "#20");
  		}
  
  		[Test]
  		public void DeleteCommand ()
  		{
  			SqlDataAdapter da = new SqlDataAdapter ();
  			SqlCommand cmd1 = new SqlCommand ();
  			SqlCommand cmd2 = new SqlCommand ();
  
  			da.DeleteCommand = cmd1;
  			Assert.AreSame (cmd1, da.DeleteCommand, "#1");
  			da.DeleteCommand = cmd2;
  			Assert.AreSame (cmd2, da.DeleteCommand, "#2");
  			da.DeleteCommand = null;
  			Assert.IsNull (da.DeleteCommand, "#3");
  		}
  
  		[Test]
  		public void Dispose ()
  		{
  			SqlDataAdapter da = new SqlDataAdapter ();
  			da.DeleteCommand = new SqlCommand ();
  			da.InsertCommand = new SqlCommand ();
  			da.SelectCommand = new SqlCommand ();
  			da.UpdateCommand = new SqlCommand ();
  			da.Dispose ();
  
  			Assert.IsNull (da.DeleteCommand, "#1");
  			Assert.IsNull (da.InsertCommand, "#2");
  			Assert.IsNull (da.SelectCommand, "#3");
  			Assert.IsNotNull (da.TableMappings, "#4");
  			Assert.AreEqual (0, da.TableMappings.Count, "#5");
  			Assert.IsNull (da.UpdateCommand, "#6");
  		}
  
  		[Test]
  		public void InsertCommand ()
  		{
  			SqlDataAdapter da = new SqlDataAdapter ();
  			SqlCommand cmd1 = new SqlCommand ();
  			SqlCommand cmd2 = new SqlCommand ();
  
  			da.InsertCommand = cmd1;
  			Assert.AreSame (cmd1, da.InsertCommand, "#1");
  			da.InsertCommand = cmd2;
  			Assert.AreSame (cmd2, da.InsertCommand, "#2");
  			da.InsertCommand = null;
  			Assert.IsNull (da.InsertCommand, "#3");
  		}
  
  		[Test]
  		public void SelectCommand ()
  		{
  			SqlDataAdapter da = new SqlDataAdapter ();
  			SqlCommand cmd1 = new SqlCommand ();
  			SqlCommand cmd2 = new SqlCommand ();
  
  			da.SelectCommand = cmd1;
  			Assert.AreSame (cmd1, da.SelectCommand, "#1");
  			da.SelectCommand = cmd2;
  			Assert.AreSame (cmd2, da.SelectCommand, "#2");
  			da.SelectCommand = null;
  			Assert.IsNull (da.SelectCommand, "#3");
  		}
  
  		[Test]
  		public void UpdateBatchSize ()
  		{
  			SqlDataAdapter da = new SqlDataAdapter ();
  			da.UpdateBatchSize = 0;
  			Assert.AreEqual (0, da.UpdateBatchSize, "#1");
  			da.UpdateBatchSize = int.MaxValue;
  			Assert.AreEqual (int.MaxValue, da.UpdateBatchSize, "#2");
  			da.UpdateBatchSize = 1;
  			Assert.AreEqual (1, da.UpdateBatchSize, "#3");
  		}
  		
  		[Test]
  		public void UpdateBatchSize_Negative ()
  		{
  			SqlDataAdapter da = new SqlDataAdapter ();
  			try {
  				da.UpdateBatchSize = -1;
  				Assert.Fail ("#1");
  			} catch (ArgumentOutOfRangeException ex) {
  				Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
  				Assert.IsNull (ex.InnerException, "#3");
  				Assert.IsNotNull (ex.Message, "#4");
  				Assert.IsNotNull (ex.ParamName, "#5");
  				Assert.AreEqual ("UpdateBatchSize", ex.ParamName, "#6");
  			}
  		}
  
  		[Test]
  		public void UpdateCommand ()
  		{
  			SqlDataAdapter da = new SqlDataAdapter ();
  			SqlCommand cmd1 = new SqlCommand ();
  			SqlCommand cmd2 = new SqlCommand ();
  
  			da.UpdateCommand = cmd1;
  			Assert.AreSame (cmd1, da.UpdateCommand, "#1");
  			da.UpdateCommand = cmd2;
  			Assert.AreSame (cmd2, da.UpdateCommand, "#2");
  			da.UpdateCommand = null;
  			Assert.IsNull (da.UpdateCommand, "#3");
  		}
  
  #if !MOBILE
  		[Test]
  		public void DeleteCommand_IDbDataAdapter ()
  		{
  			IDbDataAdapter da = new SqlDataAdapter ();
  			SqlCommand cmd1 = new SqlCommand ();
  			SqlCommand cmd2 = new SqlCommand ();
  			
  			da.DeleteCommand = cmd1;
  			Assert.AreSame (cmd1, da.DeleteCommand, "#A1");
  			da.DeleteCommand = cmd2;
  			Assert.AreSame (cmd2, da.DeleteCommand, "#A2");
  			da.DeleteCommand = null;
  			Assert.IsNull (da.DeleteCommand, "#A3");
  			
  			try {
  
gt: 				da.DeleteCommand = new OdbcCommand ();