public void CurrentIsVisibleAccrossThreads()
        {
            var sqlCharacters = new TestSqlCharacters();

            SqlCharacters actual = null;
            var handle = new AutoResetEvent(false);

            var thread1 = new Thread(() =>
            {
                SqlCharacters.Current = sqlCharacters;
                handle.Set();
            });

            var thread2 = new Thread(() =>
            {
                actual = SqlCharacters.Current;
                handle.Set();
            });

            thread1.Start();
            handle.WaitOne();

            thread2.Start();
            handle.WaitOne();

            thread1.Abort();
            thread2.Abort();

            Assert.Same(sqlCharacters, actual);
        }
        public void CurrentIsVisibleAccrossThreads()
        {
            var sqlCharacters = new TestSqlCharacters();

            SqlCharacters actual = null;
            var           handle = new AutoResetEvent(false);

            var thread1 = new Thread(() =>
            {
                SqlCharacters.Current = sqlCharacters;
                handle.Set();
            });

            var thread2 = new Thread(() =>
            {
                actual = SqlCharacters.Current;
                handle.Set();
            });

            thread1.Start();
            handle.WaitOne();

            thread2.Start();
            handle.WaitOne();

            thread1.Abort();
            thread2.Abort();

            Assert.Same(sqlCharacters, actual);
        }
        public void CurrentReturnsSpecifiedSqlCharactersIfSet()
        {
            var sqlCharacters = new TestSqlCharacters();

            SqlCharacters.Current = sqlCharacters;

            Assert.Same(sqlCharacters, SqlCharacters.Current);
        }
        public void CurrentIsVisibleAccrossTasks()
        {
            var sqlCharacters = new TestSqlCharacters();
            SqlCharacters.Current = sqlCharacters;

            SqlCharacters actual = null;

            System.Threading.Tasks.Task.Factory.StartNew(
                () => actual = SqlCharacters.Current,
                System.Threading.Tasks.TaskCreationOptions.LongRunning).Wait();

            Assert.Same(sqlCharacters, actual);
        }
        public void CurrentIsVisibleAccrossTasks()
        {
            var sqlCharacters = new TestSqlCharacters();

            SqlCharacters.Current = sqlCharacters;

            SqlCharacters actual = null;

            System.Threading.Tasks.Task.Factory.StartNew(
                () => actual = SqlCharacters.Current,
                System.Threading.Tasks.TaskCreationOptions.LongRunning).Wait();

            Assert.Same(sqlCharacters, actual);
        }
        public void CurrentIsVisibleAccrossThreadPools()
        {
            var sqlCharacters = new TestSqlCharacters();
            SqlCharacters.Current = sqlCharacters;

            SqlCharacters actual = null;
            var handle = new ManualResetEvent(false);

            ThreadPool.QueueUserWorkItem(_ =>
            {
                actual = SqlCharacters.Current;
                handle.Set();
            });

            handle.WaitOne();

            Assert.Same(sqlCharacters, actual);
        }
        public void CurrentIsVisibleAccrossThreadPools()
        {
            var sqlCharacters = new TestSqlCharacters();

            SqlCharacters.Current = sqlCharacters;

            SqlCharacters actual = null;
            var           handle = new ManualResetEvent(false);

            ThreadPool.QueueUserWorkItem(_ =>
            {
                actual = SqlCharacters.Current;
                handle.Set();
            });

            handle.WaitOne();

            Assert.Same(sqlCharacters, actual);
        }
        public void IsEscapedReturnsFalseIfNull()
        {
            var sqlCharacters = new TestSqlCharacters();

            Assert.False(sqlCharacters.IsEscaped(null));
        }
        public void IsEscapedReturnsFalseIfNotEscapedWithCorrectDelimiters()
        {
            var sqlCharacters = new TestSqlCharacters();

            Assert.False(sqlCharacters.IsEscaped("Name"));
        }
        public void IsEscapedReturnsFalseIfEmpty()
        {
            var sqlCharacters = new TestSqlCharacters();

            Assert.False(sqlCharacters.IsEscaped(string.Empty));
        }
        public void GetParameterNameReturnsCorrectValue()
        {
            var sqlCharacters = new TestSqlCharacters();

            Assert.Equal("#p0", sqlCharacters.GetParameterName(0));
        }
        public void EscapeSqlExcapesValueIfNotAlreadyEscaped()
        {
            var sqlCharacters = new TestSqlCharacters();

            Assert.Equal("~Name~", sqlCharacters.EscapeSql("Name"));
        }
        public void IsEscapedReturnsFalseIfNotEscapedWithCorrectDelimiters()
        {
            var sqlCharacters = new TestSqlCharacters();

            Assert.False(sqlCharacters.IsEscaped("Name"));
        }
        public void EscapeSqlExcapesValueIfNotAlreadyEscaped()
        {
            var sqlCharacters = new TestSqlCharacters();

            Assert.Equal("~Name~", sqlCharacters.EscapeSql("Name"));
        }
        public void EscapeSqlExcapesQualifiedValueIfNotAlreadyEscaped()
        {
            var sqlCharacters = new TestSqlCharacters();

            Assert.Equal("~Table~.~Name~", sqlCharacters.EscapeSql("Table.Name"));
        }
        public void CurrentReturnsSpecifiedSqlCharactersIfSet()
        {
            var sqlCharacters = new TestSqlCharacters();

            SqlCharacters.Current = sqlCharacters;

            Assert.Same(sqlCharacters, SqlCharacters.Current);
        }
        public void GetParameterNameReturnsCorrectValue()
        {
            var sqlCharacters = new TestSqlCharacters();

            Assert.Equal("#p0", sqlCharacters.GetParameterName(0));
        }
        public void IsEscapedReturnsTrueIfEscapedWithCorrectDelimiters()
        {
            var sqlCharacters = new TestSqlCharacters();

            Assert.True(sqlCharacters.IsEscaped("~Name~"));
        }
        public void IsEscapedReturnsFalseIfNull()
        {
            var sqlCharacters = new TestSqlCharacters();

            Assert.False(sqlCharacters.IsEscaped(null));
        }
        public void IsEscapedReturnsTrueIfEscapedWithCorrectDelimiters()
        {
            var sqlCharacters = new TestSqlCharacters();

            Assert.True(sqlCharacters.IsEscaped("~Name~"));
        }
        public void EscapeSqlDoesNotExcapeValueIfAlreadyEscaped()
        {
            var sqlCharacters = new TestSqlCharacters();

            Assert.Equal("~Name~", sqlCharacters.EscapeSql("~Name~"));
        }
        public void EscapeSqlExcapesQualifiedValueIfNotAlreadyEscaped()
        {
            var sqlCharacters = new TestSqlCharacters();

            Assert.Equal("~Table~.~Name~", sqlCharacters.EscapeSql("Table.Name"));
        }
        public void EscapeSqlDoesNotExcapeValueIfAlreadyEscaped()
        {
            var sqlCharacters = new TestSqlCharacters();

            Assert.Equal("~Name~", sqlCharacters.EscapeSql("~Name~"));
        }
        public void IsEscapedReturnsFalseIfEmpty()
        {
            var sqlCharacters = new TestSqlCharacters();

            Assert.False(sqlCharacters.IsEscaped(string.Empty));
        }