Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

494 lines
13 KiB
C#

//
// PagedDataSourceTest.cs
//
// Authors:
// Duncan Mak (duncan@novell.com)
// Gonzalo Paniagua Javier (gonzalo@novell.com)
//
// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
//
// 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 NUnit.Framework;
using System;
using System.Data;
using System.Collections;
using System.Diagnostics;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace MonoTests.System.Web.UI.WebControls {
[TestFixture]
public class PagedDataSourceTest {
PagedDataSource ds;
[SetUp]
public void SetUp ()
{
ds = new PagedDataSource ();
}
public void SetUpTest ()
{
Assert.AreEqual (10, ds.PageSize);
Assert.IsFalse (ds.AllowPaging);
Assert.AreEqual (0, ds.CurrentPageIndex);
Assert.IsFalse (ds.AllowCustomPaging);
Assert.AreEqual (0, ds.VirtualCount);
}
public void Reset ()
{
ds.DataSource = null;
ds.PageSize = 10;
ds.AllowPaging = false;
ds.CurrentPageIndex = 0;
ds.AllowCustomPaging = false;
ds.VirtualCount = 0;
}
void SetSource (IEnumerable source)
{
Reset ();
ds.DataSource = source;
}
[Test]
public void GetItemProperties ()
{
PagedDataSource ds = new PagedDataSource ();
DataTable table = new DataTable ();
table.Columns.Add (new DataColumn ("one", typeof (string)));
table.Columns.Add (new DataColumn ("two", typeof (string)));
table.Columns.Add (new DataColumn ("three", typeof (string)));
ds.DataSource = new DataView (table);
PropertyDescriptorCollection props = ds.GetItemProperties (null);
Assert.AreEqual (props.Count, 3, "A1");
Assert.AreEqual (props [0].Name, "one", "A2");
Assert.AreEqual (props [1].Name, "two", "A3");
Assert.AreEqual (props [2].Name, "three", "A4");
ds.DataSource = new ArrayList ();
props = ds.GetItemProperties (null);
Assert.AreEqual (props, null, "A5");
}
[Test]
public void GetEnumeratorTest ()
{
// Found out that there are 3 possibilities
// for GetEnumerator () from this test.
// One for ICollection, one for IList and otherwise, it uses the DataSource directly
// Hashtable implements ICollection
SetSource (new Hashtable ());
//Console.WriteLine (ds.GetEnumerator ().GetType ().Name);
// IList implementations
SetSource (new int [] { 1, 2, 3, 4, 5 });
//Console.WriteLine (ds.GetEnumerator ().GetType ().Name);
SetSource (new ArrayList ().ToArray ());
//Console.WriteLine (ds.GetEnumerator ().GetType ().Name);
// Default case
SetSource (new MyEnumerable ());
}
public class MyEnumerable : IEnumerable, IEnumerator
{
IEnumerator IEnumerable.GetEnumerator () { return this; }
object IEnumerator.Current { get { return null; } }
bool IEnumerator.MoveNext () { return false; }
void IEnumerator.Reset () {}
}
[Test]
public void FirstIndexInPageTest ()
{
SetSource (null);
Assert.AreEqual (0, ds.FirstIndexInPage);
SetSource (new int [] { 1, 2, 3, 4, 5 });
ds.AllowPaging = false;
Assert.AreEqual (0, ds.FirstIndexInPage);
ds.AllowCustomPaging = false;
Assert.AreEqual (0, ds.FirstIndexInPage);
ds.AllowPaging = true;
ds.CurrentPageIndex = 10;
ds.PageSize = 5;
Assert.AreEqual (ds.CurrentPageIndex * ds.PageSize, ds.FirstIndexInPage);
}
[Test]
public void PageCountTest ()
{
SetSource (null);
Assert.AreEqual (0, ds.PageCount, "A1");
SetSource (new int [] {});
ds.AllowPaging = false;
Assert.AreEqual (1, ds.PageCount, "A2");
ds.PageSize = 0;
Assert.AreEqual (1, ds.PageCount, "A3");
SetSource (new int [] { 1, 2, 3, 4, 5 });
ds.AllowPaging = true;
ds.PageSize = 10;
Assert.AreEqual (1, ds.PageCount, "A4");
SetSource (new int [] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 });
ds.AllowPaging = true;
ds.PageSize = 10;
Assert.AreEqual (2, ds.PageCount, "A5");
SetSource (new int [] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 });
ds.PageSize = 5;
ds.AllowPaging = true;
Assert.AreEqual (3, ds.PageCount, "A6");
SetSource (new int [] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 });
ds.AllowPaging = true;
ds.PageSize = 3;
Assert.AreEqual (4, ds.PageCount, "A7");
}
[Test]
public void CountTest ()
{
SetSource (null);
Assert.AreEqual (0, ds.Count);
SetSource (new int [] { 1, 2, 3, 4, 5 });
ds.AllowPaging = true;
ds.AllowCustomPaging = true;
Assert.AreEqual (ds.PageSize, ds.Count);
// ds.AllowCustomPaging = false;
// ds.CurrentPageIndex = ds.PageCount;
// Assert.AreEqual (ds.FirstIndexInPage - ds.DataSourceCount, ds.Count);
// ds.AllowPaging = false;
// Assert.AreEqual (ds.DataSourceCount, ds.Count);
}
[Test]
public void IsFirstPageTest ()
{
ds.AllowPaging = false;
ds.CurrentPageIndex = 100;
Assert.IsTrue (ds.IsFirstPage);
ds.AllowPaging = true;
ds.CurrentPageIndex = 0;
Assert.IsTrue (ds.IsFirstPage);
ds.CurrentPageIndex = 10;
Assert.IsFalse (ds.IsFirstPage);
}
[Test]
public void IsLastPageTest ()
{
Reset ();
ds.AllowPaging = false;
Assert.IsTrue (ds.IsLastPage);
// When PageCount is 0, IsLastPage is false
ds.AllowPaging = true;
Assert.AreEqual (0, ds.PageCount);
Assert.IsFalse (ds.IsLastPage);
SetSource (new int [] { 1, 2, 3 });
Assert.IsTrue (ds.IsLastPage);
Assert.IsTrue (ds.IsLastPage == (ds.CurrentPageIndex == ds.PageCount - 1));
ds.CurrentPageIndex = 3;
// Assert.IsTrue (ds.IsLastPage);
}
// Need mucho grande more here
public void EnumeratorTester (IEnumerator e, string name)
{
int index = 20;
while (e.MoveNext ()) {
Assert.AreEqual (e.Current, index, name + "-A1-" + index);
index++;
}
Assert.AreEqual (30, index, name + "-A2");
}
public void EnumeratorTester_NoPaging (IEnumerator e, string name)
{
int index = 0;
while (e.MoveNext ()) {
Assert.AreEqual (e.Current, index, name + "-A1-" + index);
index++;
}
Assert.AreEqual (50, index, name + "-A2");
}
[Test]
public void TestEnumerators ()
{
PagedDataSource ds = new PagedDataSource ();
ds.AllowPaging = true;
ds.PageSize = 10;
ds.CurrentPageIndex = 2;
//
// Collection Enumerator
//
Queue q = new Queue ();
for (int i = 0; i < 50; i++)
q.Enqueue (i);
ds.DataSource = q;
EnumeratorTester (ds.GetEnumerator (), "collection");
//
// List Enumerator
//
ArrayList l = new ArrayList ();
for (int i = 0; i < 50; i++)
l.Add (i);
EnumeratorTester (ds.GetEnumerator (), "list");
}
[Test]
public void TestEnumerators_NoPaging ()
{
PagedDataSource ds = new PagedDataSource ();
ds.AllowPaging = false;
//
// Collection Enumerator
//
Queue q = new Queue ();
for (int i = 0; i < 50; i++)
q.Enqueue (i);
ds.DataSource = q;
EnumeratorTester_NoPaging (ds.GetEnumerator (), "collection");
//
// List Enumerator
//
ArrayList l = new ArrayList ();
for (int i = 0; i < 50; i++)
l.Add (i);
EnumeratorTester_NoPaging (ds.GetEnumerator (), "list");
}
[Test]
[ExpectedException (typeof (NullReferenceException))]
public void NullSource ()
{
PagedDataSource ds = new PagedDataSource ();
ds.DataSource = null;
IEnumerator data = ds.GetEnumerator ();
}
static void FillTable (DataTable table, int nelems)
{
table.Columns.Add (new DataColumn ("one", typeof (string)));
table.Columns.Add (new DataColumn ("two", typeof (string)));
for (int i = 0; i < nelems; i++) {
DataRow row = table.NewRow ();
row ["one"] = i % 2;
row ["two"] = i / 2;
table.Rows.Add (row);
}
}
[Test]
public void Paging1 ()
{
PagedDataSource paged = new PagedDataSource ();
paged.AllowPaging = true;
paged.PageSize = 5;
DataTable table = new DataTable ();
FillTable (table, 100);
paged.DataSource = new DataView (table);
Assert.IsTrue (paged.IsFirstPage, "first-1");
Assert.IsFalse (paged.IsLastPage, "last-1");
paged.CurrentPageIndex = 100; // no problem setting this.
Assert.AreEqual (100, paged.CurrentPageIndex, "current-1");
Assert.IsFalse (paged.IsFirstPage, "first-2");
Assert.IsFalse (paged.IsLastPage, "last-2");
IEnumerator rator = paged.GetEnumerator ();
Assert.IsFalse (rator.MoveNext (), "beyondtheend-1");
}
[Test]
[ExpectedException (typeof (IndexOutOfRangeException))]
public void Paging2 ()
{
PagedDataSource paged = new PagedDataSource ();
paged.AllowPaging = true;
paged.PageSize = 5;
DataTable table = new DataTable ();
FillTable (table, 100);
paged.DataSource = new DataView (table);
paged.CurrentPageIndex = -1;
Assert.AreEqual (-1, paged.CurrentPageIndex, "current");
Assert.IsFalse (paged.IsFirstPage, "first");
Assert.IsFalse (paged.IsLastPage, "last");
IEnumerator rator = paged.GetEnumerator ();
Assert.AreEqual (-1, paged.CurrentPageIndex, "current-2");
Assert.IsTrue (rator.MoveNext (), "beyondtheend");
DataRowView drv = (DataRowView) rator.Current; // Throws (out of range)
}
[Test]
[ExpectedException (typeof (IndexOutOfRangeException))]
public void Paging3 ()
{
PagedDataSource paged = new PagedDataSource ();
paged.AllowPaging = true;
paged.PageSize = 5;
DataTable table = new DataTable ();
FillTable (table, 100);
paged.DataSource = new DataView (table);
paged.CurrentPageIndex = -7;
Assert.AreEqual (-7, paged.CurrentPageIndex, "current");
Assert.IsFalse (paged.IsFirstPage, "first");
Assert.IsFalse (paged.IsLastPage, "last");
IEnumerator rator = paged.GetEnumerator ();
Assert.AreEqual (-7, paged.CurrentPageIndex, "current-2");
Assert.IsTrue (rator.MoveNext (), "beyondtheend");
DataRowView drv = (DataRowView) rator.Current; // Throws (out of range)
}
[Test]
public void Paging4 ()
{
PagedDataSource paged = new PagedDataSource ();
paged.AllowPaging = true;
paged.PageSize = 5;
DataTable table = new DataTable ();
FillTable (table, 100);
paged.DataSource = new DataView (table);
paged.CurrentPageIndex = 1;
IEnumerator rator = paged.GetEnumerator ();
Assert.IsTrue (rator.MoveNext (), "beginning-1");
DataRowView drv = (DataRowView) rator.Current;
int one = Int32.Parse ((string) drv ["one"]);
Assert.IsTrue (one == 0 || one == 1, "one-1");
int res = one + 2 * Int32.Parse ((string) drv ["two"]);
Assert.AreEqual (5, res, "five");
}
[Test]
public void Copy1 ()
{
PagedDataSource paged = new PagedDataSource ();
DataTable table = new DataTable ();
FillTable (table, 100);
paged.DataSource = new DataView (table);
object [] data = new object [100];
paged.CopyTo (data, 0);
Type t = typeof (DataRowView);
Assert.AreEqual (t, data [0].GetType ());
}
[Test]
[ExpectedException (typeof (NullReferenceException))]
public void Copy2 ()
{
PagedDataSource paged = new PagedDataSource ();
paged.DataSource = null;
object [] data = new object [100];
paged.CopyTo (data, 0);
}
[Test]
public void Copy3 ()
{
PagedDataSource paged = new PagedDataSource ();
paged.DataSource = new object [] {"1", "2"};
object [] data = new object [100];
paged.CopyTo (data, 0);
}
[Test]
public void VirtualPager1 ()
{
PagedDataSource paged = new PagedDataSource ();
paged.AllowPaging = true;
paged.PageSize = 20;
paged.VirtualCount = 100;
DataTable table = new DataTable ();
FillTable (table, 100);
paged.DataSource = new DataView (table);
int count = 0;
IEnumerator rator = paged.GetEnumerator ();
while (rator.MoveNext ())
count++;
Assert.AreEqual (20, count, "count");
Assert.AreEqual (true, paged.IsFirstPage, "first");
Assert.AreEqual (false, paged.IsLastPage, "last");
}
[Test]
public void VirtualPager2 ()
{
PagedDataSource paged = new PagedDataSource ();
paged.AllowPaging = true;
paged.PageSize = 100;
paged.VirtualCount = 50;
paged.AllowCustomPaging = true;
DataTable table = new DataTable ();
FillTable (table, 100);
paged.DataSource = new DataView (table);
int count = 0;
IEnumerator rator = paged.GetEnumerator ();
while (rator.MoveNext ())
count++;
Assert.AreEqual (100, count, "count");
Assert.AreEqual (true, paged.IsFirstPage, "first");
Assert.AreEqual (true, paged.IsLastPage, "last");
}
}
}