Jo Shields 3c1f479b9d Imported Upstream version 4.0.0~alpha1
Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
2015-04-07 09:35:12 +01:00

351 lines
12 KiB
C#

// SqlCommandBuilderTest.cs - NUnit Test Cases for testing SqlCommandBuilder.
//
// Authors:
// Gert Driesen (drieseng@users.sourceforge.net)
//
// Copyright (c) 2008 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.Common;
using System.Data.SqlClient;
using NUnit.Framework;
namespace MonoTests.System.Data.Odbc
{
[TestFixture]
public class SqlCommandBuilderTest
{
[Test]
public void CatalogLocationTest ()
{
SqlCommandBuilder cb = new SqlCommandBuilder ();
Assert.AreEqual (CatalogLocation.Start, cb.CatalogLocation, "#1");
cb.CatalogLocation = CatalogLocation.Start;
Assert.AreEqual (CatalogLocation.Start, cb.CatalogLocation, "#2");
}
[Test]
public void CatalogLocation_Value_Invalid ()
{
SqlCommandBuilder cb = new SqlCommandBuilder ();
try {
cb.CatalogLocation = (CatalogLocation) 666;
Assert.Fail ("#A1");
} catch (ArgumentException ex) {
// The only acceptable value for the property
// 'CatalogLocation' is 'Start'
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
Assert.IsNull (ex.InnerException, "#A3");
Assert.IsNotNull (ex.Message, "#A4");
Assert.IsTrue (ex.Message.IndexOf ("'CatalogLocation'") != -1, "#A5:" + ex.Message);
Assert.IsTrue (ex.Message.IndexOf ("'Start'") != -1, "#A6:" + ex.Message);
Assert.IsNull (ex.ParamName, "#A7");
}
Assert.AreEqual (CatalogLocation.Start, cb.CatalogLocation, "#A7");
try {
cb.CatalogLocation = CatalogLocation.End;
Assert.Fail ("#B1");
} catch (ArgumentException ex) {
// The only acceptable value for the property
// 'CatalogLocation' is 'Start'
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
Assert.IsNull (ex.InnerException, "#B3");
Assert.IsNotNull (ex.Message, "#B4");
Assert.IsTrue (ex.Message.IndexOf ("'CatalogLocation'") != -1, "#B5:" + ex.Message);
Assert.IsTrue (ex.Message.IndexOf ("'Start'") != -1, "#B6:" + ex.Message);
Assert.IsNull (ex.ParamName, "#B7");
}
Assert.AreEqual (CatalogLocation.Start, cb.CatalogLocation, "#B8");
}
[Test]
public void CatalogSeparator ()
{
SqlCommandBuilder cb = new SqlCommandBuilder ();
Assert.AreEqual (".", cb.CatalogSeparator, "#1");
}
[Test]
public void CatalogSeparator_Value_Invalid ()
{
string [] separators = new string [] {
"x",
"'",
"[x",
string.Empty,
null
};
SqlCommandBuilder cb = new SqlCommandBuilder ();
for (int i = 0; i < separators.Length; i++) {
try {
cb.CatalogSeparator = separators [i];
Assert.Fail ("#1:" + i);
} catch (ArgumentException ex) {
// The acceptable value for the property
// 'CatalogSeparator' is '.'
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2:" + i);
Assert.IsNull (ex.InnerException, "#3:" + i);
Assert.IsNotNull (ex.Message, "#4:" + i);
Assert.IsTrue (ex.Message.IndexOf ("'CatalogSeparator'") != -1, "#5:" + ex.Message);
Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#6:" + ex.Message);
Assert.IsNull (ex.ParamName, "#7:" + i);
}
}
}
[Test]
public void ConflictOptionTest ()
{
SqlCommandBuilder cb = new SqlCommandBuilder ();
Assert.AreEqual (ConflictOption.CompareAllSearchableValues, cb.ConflictOption, "#1");
cb.ConflictOption = ConflictOption.CompareRowVersion;
Assert.AreEqual (ConflictOption.CompareRowVersion, cb.ConflictOption, "#2");
}
[Test]
public void ConflictOption_Value_Invalid ()
{
SqlCommandBuilder cb = new SqlCommandBuilder ();
cb.ConflictOption = ConflictOption.CompareRowVersion;
try {
cb.ConflictOption = (ConflictOption) 666;
Assert.Fail ("#1");
} catch (ArgumentOutOfRangeException ex) {
// The ConflictOption enumeration value, 666, is invalid
Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsTrue (ex.Message.IndexOf ("ConflictOption") != -1, "#5:" + ex.Message);
Assert.IsTrue (ex.Message.IndexOf ("666") != -1, "#6:" + ex.Message);
Assert.AreEqual ("ConflictOption", ex.ParamName, "#7");
}
Assert.AreEqual (ConflictOption.CompareRowVersion, cb.ConflictOption, "#8");
}
[Test] // QuoteIdentifier (String)
public void QuoteIdentifier ()
{
SqlCommandBuilder cb;
cb = new SqlCommandBuilder ();
Assert.AreEqual ("[mono]", cb.QuoteIdentifier ("mono"), "#A1");
Assert.AreEqual ("[]", cb.QuoteIdentifier (string.Empty), "#A2");
Assert.AreEqual ("[Z]", cb.QuoteIdentifier ("Z"), "#A3");
Assert.AreEqual ("[[]", cb.QuoteIdentifier ("["), "#A4");
Assert.AreEqual ("[A[C]", cb.QuoteIdentifier ("A[C"), "#A5");
Assert.AreEqual ("[]]]", cb.QuoteIdentifier ("]"), "#A6");
Assert.AreEqual ("[A]]C]", cb.QuoteIdentifier ("A]C"), "#A7");
Assert.AreEqual ("[[]]]", cb.QuoteIdentifier ("[]"), "#A8");
Assert.AreEqual ("[A[]]C]", cb.QuoteIdentifier ("A[]C"), "#A9");
cb = new SqlCommandBuilder ();
cb.QuotePrefix = "\"";
cb.QuoteSuffix = "\"";
Assert.AreEqual ("\"mono\"", cb.QuoteIdentifier ("mono"), "#B1");
Assert.AreEqual ("\"\"", cb.QuoteIdentifier (string.Empty), "#B2");
Assert.AreEqual ("\"Z\"", cb.QuoteIdentifier ("Z"), "#B3");
Assert.AreEqual ("\"\"\"\"", cb.QuoteIdentifier ("\""), "#B4");
Assert.AreEqual ("\"A\"\"C\"", cb.QuoteIdentifier ("A\"C"), "#B5");
}
[Test]
public void QuoteIdentifier_PrefixSuffix_NoMatch ()
{
SqlCommandBuilder cb;
cb = new SqlCommandBuilder ();
cb.QuoteSuffix = "\"";
try {
cb.QuoteIdentifier ("mono");
Assert.Fail ("#A1");
} catch (ArgumentException ex) {
// Specified QuotePrefix and QuoteSuffix values
// do not match
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
Assert.IsNull (ex.InnerException, "#A3");
Assert.IsNotNull (ex.Message, "#A4");
Assert.IsTrue (ex.Message.IndexOf ("QuotePrefix") != -1, "#A5:" + ex.Message);
Assert.IsTrue (ex.Message.IndexOf ("QuoteSuffix") != -1, "#A6:" + ex.Message);
Assert.IsNull (ex.ParamName, "#A7");
}
cb = new SqlCommandBuilder ();
cb.QuotePrefix = "\"";
try {
cb.QuoteIdentifier ("mono");
Assert.Fail ("#B1");
} catch (ArgumentException ex) {
// Specified QuotePrefix and QuoteSuffix values
// do not match
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
Assert.IsNull (ex.InnerException, "#B3");
Assert.IsNotNull (ex.Message, "#B4");
Assert.IsTrue (ex.Message.IndexOf ("QuotePrefix") != -1, "#B5:" + ex.Message);
Assert.IsTrue (ex.Message.IndexOf ("QuoteSuffix") != -1, "#B6:" + ex.Message);
Assert.IsNull (ex.ParamName, "#B7");
}
}
[Test] // QuoteIdentifier (String)
public void QuoteIdentifier_UnquotedIdentifier_Null ()
{
SqlCommandBuilder cb = new SqlCommandBuilder ();
try {
cb.QuoteIdentifier ((string) null);
Assert.Fail ("#1");
} catch (ArgumentNullException ex) {
Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.AreEqual ("unquotedIdentifier", ex.ParamName, "#5");
}
}
[Test]
public void QuotePrefix ()
{
SqlCommandBuilder cb = new SqlCommandBuilder ();
Assert.AreEqual ("[", cb.QuotePrefix, "#A1");
Assert.AreEqual ("]", cb.QuoteSuffix, "#A2");
cb.QuotePrefix = "\"";
Assert.AreEqual ("\"", cb.QuotePrefix, "#B1");
Assert.AreEqual ("]", cb.QuoteSuffix, "#B2");
cb.QuotePrefix = "[";
Assert.AreEqual ("[", cb.QuotePrefix, "#C1");
Assert.AreEqual ("]", cb.QuoteSuffix, "#C2");
}
[Test]
public void QuotePrefix_Value_Invalid ()
{
string [] prefixes = new string [] {
"x",
"'",
"[x",
string.Empty,
null,
"]"
};
SqlCommandBuilder cb = new SqlCommandBuilder ();
for (int i = 0; i < prefixes.Length; i++) {
try {
cb.QuotePrefix = prefixes [i];
Assert.Fail ("#1:" + i);
} catch (ArgumentException ex) {
// The acceptable values for the property
// 'QuoteSuffix' are ']' or '"'
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2:" + i);
Assert.IsNull (ex.InnerException, "#3:" + i);
Assert.IsNotNull (ex.Message, "#4:" + i);
Assert.IsNull (ex.ParamName, "#5:" + i);
}
}
}
[Test]
public void QuoteSuffix ()
{
SqlCommandBuilder cb = new SqlCommandBuilder ();
Assert.AreEqual ("[", cb.QuotePrefix, "#A1");
Assert.AreEqual ("]", cb.QuoteSuffix, "#A2");
cb.QuoteSuffix = "\"";
Assert.AreEqual ("[", cb.QuotePrefix, "#B1");
Assert.AreEqual ("\"", cb.QuoteSuffix, "#B2");
cb.QuoteSuffix = "]";
Assert.AreEqual ("[", cb.QuotePrefix, "#C1");
Assert.AreEqual ("]", cb.QuoteSuffix, "#C2");
}
[Test]
public void QuoteSuffix_Value_Invalid ()
{
string [] suffixes = new string [] {
"x",
"'",
"[x",
string.Empty,
null,
"["
};
SqlCommandBuilder cb = new SqlCommandBuilder ();
for (int i = 0; i < suffixes.Length; i++) {
try {
cb.QuoteSuffix = suffixes [i];
Assert.Fail ("#1:" + i);
} catch (ArgumentException ex) {
// The acceptable values for the property
// 'QuoteSuffix' are ']' or '"'
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2:" + i);
Assert.IsNull (ex.InnerException, "#3:" + i);
Assert.IsNotNull (ex.Message, "#4:" + i);
Assert.IsNull (ex.ParamName, "#5:" + i);
}
}
}
[Test]
public void SchemaSeparator ()
{
SqlCommandBuilder cb = new SqlCommandBuilder ();
Assert.AreEqual (".", cb.SchemaSeparator, "#1");
cb.SchemaSeparator = ".";
Assert.AreEqual (".", cb.SchemaSeparator, "#2");
}
[Test]
public void SchemaSeparator_Value_Invalid ()
{
string [] separators = new string [] {
"x",
"'",
"[x",
string.Empty,
null
};
SqlCommandBuilder cb = new SqlCommandBuilder ();
for (int i = 0; i < separators.Length; i++) {
try {
cb.SchemaSeparator = separators [i];
Assert.Fail ("#1:" + i);
} catch (ArgumentException ex) {
// The acceptable value for the property
// 'SchemaSeparator' is '.'
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2:" + i);
Assert.IsNull (ex.InnerException, "#3:" + i);
Assert.IsNotNull (ex.Message, "#4:" + i);
Assert.IsTrue (ex.Message.IndexOf ("'SchemaSeparator'") != -1, "#5:" + ex.Message);
Assert.IsTrue (ex.Message.IndexOf ("'.'") != -1, "#6:" + ex.Message);
Assert.IsNull (ex.ParamName, "#7:" + i);
}
}
}
}
}