Browse Source

Add more UnitTest's for Grouping, set 'InternalVisible' Attribute in Reporting.Core for better testing

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/reports@6026 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Peter Forstmeier 15 years ago
parent
commit
c6cba5cc50
  1. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Configuration/AssemblyInfo.cs
  2. 173
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/Comparer/GroupSeparator.cs
  3. 21
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListHandling/IndexList.cs
  4. 98
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/BaseListStrategy.cs
  5. 37
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs
  6. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/GroupTableFixture.cs
  7. 76
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/Strategy/TableStrategyFixture.cs
  8. 5
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/TableDataManagerFixture.cs
  9. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ICSharpCode.Reports.Core.Test.csproj

3
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Configuration/AssemblyInfo.cs

@ -6,13 +6,14 @@ @@ -6,13 +6,14 @@
// </file>
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following
// attributes.
//
// change them to the information which is associated with the assembly
// you compile.
[assembly:InternalsVisibleTo("ICSharpCode.Reports.Core.Test")]
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]

173
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/Comparer/GroupSeparator.cs

@ -6,9 +6,7 @@ @@ -6,9 +6,7 @@
// </file>
using System;
using System.ComponentModel;
using System.Globalization;
using System.Text;
using System.Collections.ObjectModel;
/// <summary>
///
@ -18,171 +16,16 @@ using System.Text; @@ -18,171 +16,16 @@ using System.Text;
/// created on - 28.11.2005 13:43:22
/// </remarks>
namespace ICSharpCode.Reports.Core {
/*
public class GroupSeparator : BaseComparer,IHierarchyData {
private string typeName = "GroupSeperator";
namespace ICSharpCode.Reports.Core
{
public class GroupComparer :SortComparer
{
int groupLevel;
IndexList childs ;
public GroupSeparator(SortColumnCollection owner, int listIndex, object[] values,int groupLevel):
base(owner,listIndex,values) {
this.groupLevel = groupLevel;
}
public int GroupLevel {
get {
return groupLevel;
}
}
public IndexList GetChildren {
get {
if (this.childs == null) {
this.childs = new IndexList("ChildList");
}
return childs;
}
}
#region Comparer
internal int CompareTo(BaseComparer value)
public GroupComparer (Collection<AbstractColumn> owner, int listIndex, object[] values):base(owner,listIndex,values)
{
// we shouldn't get to this point
if (value == null)
throw new ArgumentNullException("value");
if (value.ObjectArray.Length != base.ObjectArray.Length){
string s = String.Format(CultureInfo.CurrentCulture,
"{0} {1} {2}",
this.GetType().ToString(),
value.ObjectArray.Length,
base.ObjectArray.Length);
throw new ReportException(s);
}
int compare = 0;
for (int index = 0; index < base.ObjectArray.Length; index++)
{
object leftValue = base.ObjectArray[index];
object rightValue = value.ObjectArray[index];
// Indizes sind hier deckungsgleich
GroupColumn groupColumn = (GroupColumn)base.ColumnCollection[index];
bool descending = (groupColumn.SortDirection == ListSortDirection.Descending);
// null means equl
if (leftValue == null || leftValue == System.DBNull.Value)
{
if (rightValue != null && rightValue != System.DBNull.Value)
{
return (descending) ? 1 : -1;
}
// Beide Null
continue;
}
if (rightValue == null || rightValue == System.DBNull.Value)
{
return (descending) ? -1 : 1;
}
if (leftValue.GetType() != rightValue.GetType()){
string s = String.Format(CultureInfo.CurrentCulture,
"{0} {1} {2}",this.GetType().ToString(),
leftValue.GetType().ToString(),
rightValue.GetType().ToString());
throw new ReportException(s);
}
if (leftValue.GetType() == typeof(string))
{
compare = String.Compare((string)leftValue, (string)rightValue,
!groupColumn.CaseSensitive, base.ColumnCollection.Culture);
}
else
{
compare = ((IComparable)leftValue).CompareTo(rightValue);
}
// Sind ungleich, tauschen je nach Richtung
if (compare != 0)
{
return (descending) ? -compare : compare;
}
}
// Gleich Werte, dann Index bercksichtigen
return this.ListIndex.CompareTo(value.ListIndex);
}
public override int CompareTo(object obj) {
base.CompareTo(obj);
return this.CompareTo((BaseComparer)obj);
IndexList = new IndexList();
}
#endregion
#region SharpReportCore.IHierarchyData interface implementation
public virtual bool HasChildren {
get {
return (this.childs.Count > 0);
}
}
public object Item {
get {
return this;
}
}
public string Path {
get {
StringBuilder sb = new StringBuilder();
foreach (object o in base.ObjectArray) {
sb.Append(o.ToString() + ";");
}
sb.Remove(sb.Length -1,1);
return sb.ToString();
}
}
public string Type {
get {
return this.typeName;
}
}
// public IHierarchicalEnumerable GetChildren() {
// return this.childs;
// }
//
// public IHierarchyData GetParent() {
// return null;
// }
#endregion
// public override string ToString (){
// return this.typeName;
// }
public IndexList IndexList {get;set;}
}
*/
}

21
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListHandling/IndexList.cs

@ -33,25 +33,7 @@ namespace ICSharpCode.Reports.Core @@ -33,25 +33,7 @@ namespace ICSharpCode.Reports.Core
this.name = name;
}
#region IEnumerable implementation
/*
IEnumerator<BaseComparer> IEnumerable<BaseComparer>.GetEnumerator()
{
//return new MyEnumerator(this);
for (int i =0;i < this.Count;i++){
yield return this[i];
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return ((IEnumerable<BaseComparer>)this).GetEnumerator();
}
*/
#endregion
#region properties
@ -126,7 +108,6 @@ namespace ICSharpCode.Reports.Core @@ -126,7 +108,6 @@ namespace ICSharpCode.Reports.Core
public void RemoveAt(int index)
{
// T item = list[index];
list.RemoveAt(index);
}

98
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/BaseListStrategy.cs

@ -52,7 +52,7 @@ namespace ICSharpCode.Reports.Core { @@ -52,7 +52,7 @@ namespace ICSharpCode.Reports.Core {
//Index to plain Datat
private IndexList indexList;
private ReportSettings reportSettings;
// private ReportSettings reportSettings;
private AvailableFieldsCollection availableFields;
@ -64,7 +64,7 @@ namespace ICSharpCode.Reports.Core { @@ -64,7 +64,7 @@ namespace ICSharpCode.Reports.Core {
if (reportSettings == null) {
throw new ArgumentNullException("reportSettings");
}
this.reportSettings = reportSettings;
this.ReportSettings = reportSettings;
this.indexList = new IndexList("IndexList");
}
@ -109,76 +109,8 @@ namespace ICSharpCode.Reports.Core { @@ -109,76 +109,8 @@ namespace ICSharpCode.Reports.Core {
}
public ReportSettings ReportSettings
{
get {
return reportSettings;
}
}
#region Building Groups
/*
private static void WriteToIndexFile (IndexList destination,
BaseComparer comparer)
{
destination.Add(comparer);
}
*/
/*
private static GroupSeparator BuildGroupSeperator (BaseComparer newGroup,int groupLevel)
{
GroupSeparator seperator = new GroupSeparator (newGroup.ColumnCollection,
newGroup.ListIndex,
newGroup.ObjectArray,
groupLevel);
return seperator;
}
protected void CreateGroupedIndexList (IndexList sourceList)
{
if (sourceList == null) {
throw new ArgumentNullException("sourceList");
}
int level = 0;
this.indexList.Clear();
SortComparer compareComparer = null;
GroupSeparator parent = null;
for (int i = 0;i < sourceList.Count ;i++ ) {
SortComparer currentComparer = (SortComparer)sourceList[i];
if (compareComparer != null) {
string str1,str2;
str1 = currentComparer.ObjectArray[0].ToString();
str2 = compareComparer.ObjectArray[0].ToString();
int compareVal = str1.CompareTo(str2);
if (compareVal != 0) {
BaseListStrategy.WriteToIndexFile(parent.GetChildren,compareComparer);
parent = BaseListStrategy.BuildGroupSeperator (currentComparer,level);
this.indexList.Add(parent);
BaseListStrategy.WriteToIndexFile(parent.GetChildren,currentComparer);
} else {
BaseListStrategy.WriteToIndexFile(parent.GetChildren,compareComparer);
}
}
else {
parent = BaseListStrategy.BuildGroupSeperator (currentComparer,level);
this.indexList.Add(parent);
}
compareComparer = (SortComparer)sourceList[i];
}
BaseListStrategy.WriteToIndexFile(parent.GetChildren,compareComparer);
}
*/
#endregion
protected ReportSettings ReportSettings {get;private set;}
#region Sorting delegates
@ -202,11 +134,23 @@ namespace ICSharpCode.Reports.Core { @@ -202,11 +134,23 @@ namespace ICSharpCode.Reports.Core {
protected void ShowIndexList (IndexList list)
{
System.Diagnostics.Trace.WriteLine("Ch listeckIndexList ");
foreach (SortComparer element in list) {
string v = element.ObjectArray[0].ToString();
System.Diagnostics.Trace.WriteLine(v);
System.Console.WriteLine(v);
System.Diagnostics.Trace.WriteLine("CheckIndexList ");
foreach (BaseComparer element in list) {
string s = String.Format("{0} ",element.ObjectArray[0]);
GroupComparer gc = element as GroupComparer;
if ( gc != null) {
s = s + "GroupHeader";
if (gc.IndexList != null) {
s = s + String.Format(" <{0}> Childs",gc.IndexList.Count);
}
System.Console.WriteLine(s);
foreach (BaseComparer c in gc.IndexList) {
Console.WriteLine("---- {0}",c.ObjectArray[0]);
}
}
//
}
}

37
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/ListStrategy/TableStrategy.cs

@ -111,12 +111,12 @@ namespace ICSharpCode.Reports.Core @@ -111,12 +111,12 @@ namespace ICSharpCode.Reports.Core
{
base.Group();
IndexList gl = new IndexList("group");
gl = this.BuildSortIndex (base.CreateSortCollection(ReportSettings.GroupColumnsCollection));
base.ShowIndexList(gl);
BuildGroup(gl);
}
#endregion
@ -160,38 +160,43 @@ namespace ICSharpCode.Reports.Core @@ -160,38 +160,43 @@ namespace ICSharpCode.Reports.Core
{
string compVal = String.Empty;
base.IndexList.Clear();
foreach (SortComparer element in list)
IndexList childList = null;
BaseComparer checkElem = list[0];
foreach (BaseComparer element in list)
{
string v = element.ObjectArray[0].ToString();
if (compVal != v) {
// Console.WriteLine("Header {0}",v);
GHeader(element);
GChild(element);
childList = new IndexList();
GroupComparer gc = GHeader(element);
gc.IndexList = childList;
GChild(childList,element);
} else {
// Console.WriteLine("\t {0}",v);
GChild(element);
GChild(childList,element);
}
compVal = v;
}
Console.WriteLine("-------------------------");
Console.WriteLine("-------------------------");
ShowIndexList(base.IndexList);
}
private void GHeader (SortComparer sc)
private GroupComparer GHeader (BaseComparer sc)
{
string v = sc.ObjectArray[0].ToString();
Console.WriteLine("");
Console.WriteLine("Header {0}",v);
Console.WriteLine("-----");
base.IndexList.Add(sc);
// Console.WriteLine("");
// Console.WriteLine("Header {0}",v);
// Console.WriteLine("-----");
GroupComparer gc = new GroupComparer(sc.ColumnCollection,sc.ListIndex,sc.ObjectArray);
base.IndexList.Add(gc);
return gc;
}
private void GChild(SortComparer sc)
private void GChild(IndexList list,BaseComparer sc)
{
string v = sc.ObjectArray[0].ToString();
Console.WriteLine("child {0}",v);
// Console.WriteLine("child {0}",v);
list.Add(sc);
}

1
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/GroupTableFixture.cs

@ -27,6 +27,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager @@ -27,6 +27,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
{
IDataManager dm = ICSharpCode.Reports.Core.DataManager.CreateInstance(this.table,new ReportSettings());
DataNavigator dataNav = dm.GetNavigator;
Assert.That(dataNav.IsGrouped == false);
}

76
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/Strategy/TableStrategyFixture.cs

@ -0,0 +1,76 @@ @@ -0,0 +1,76 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 03.07.2010
* Time: 18:03
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.ComponentModel;
using System.Data;
using NUnit.Framework;
using ICSharpCode.Reports.Core.Test.TestHelpers;
namespace ICSharpCode.Reports.Core.Test.DataManager.Strategy
{
[TestFixture]
public class TableStrategyFixture
{
DataTable table;
[Test]
public void TableStrategy_CanInit()
{
TableStrategy ts = new TableStrategy(this.table,new ReportSettings());
Assert.That(ts != null);
}
[Test]
public void TableStrategy_Set_IsSorted()
{
SortColumn sc = new SortColumn("Last",System.ComponentModel.ListSortDirection.Ascending);
ReportSettings rs = new ReportSettings();
rs.SortColumnCollection.Add(sc);
TableStrategy ts = new TableStrategy(table,rs);
ts.Bind();
Assert.That(ts.IsSorted == true);
}
[Test]
public void CanSort_String_Ascending()
{
SortColumn sc = new SortColumn("Last",System.ComponentModel.ListSortDirection.Ascending);
ReportSettings rs = new ReportSettings();
rs.SortColumnCollection.Add(sc);
TableStrategy ts = new TableStrategy(table,rs);
ts.Bind();
string v1 = String.Empty;
foreach (BaseComparer element in ts.IndexList) {
string v2 = element.ObjectArray[0].ToString();
Assert.LessOrEqual(v1,v2);
v1 = v2;
}
}
[TestFixtureSetUp]
public void Init()
{
ContributorsList contributorsList = new ContributorsList();
this.table = contributorsList.ContributorTable;
}
[TestFixtureTearDown]
public void Dispose()
{
// TODO: Add tear down code.
}
}
}

5
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/TableDataManagerFixture.cs

@ -116,7 +116,8 @@ namespace ICSharpCode.Reports.Core.Test.DataManager @@ -116,7 +116,8 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
#region Sorting
//Tests moved to \Strategy
/*
[Test]
public void SortAscendingByOneColumn()
{
@ -134,7 +135,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager @@ -134,7 +135,7 @@ namespace ICSharpCode.Reports.Core.Test.DataManager
}
Assert.IsTrue(dataNav.IsSorted);
}
*/
/*
[Test]
[Ignore("Sort of integer not working")]

2
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ICSharpCode.Reports.Core.Test.csproj

@ -75,6 +75,7 @@ @@ -75,6 +75,7 @@
<Compile Include="DataManager\IConnectionDataManagerFixture.cs" />
<Compile Include="DataManager\IListDataManagerFixture.cs" />
<Compile Include="DataManager\MockDataAccess.cs" />
<Compile Include="DataManager\Strategy\TableStrategyFixture.cs" />
<Compile Include="DataManager\TableDataManagerFixture.cs" />
<Compile Include="Exporter\AbstractExportListBuilder.cs" />
<Compile Include="Exporter\Converter\ItemsConverterFixture.cs" />
@ -121,6 +122,7 @@ @@ -121,6 +122,7 @@
<Name>ICSharpCode.Reports.Core</Name>
</ProjectReference>
<Folder Include="BaseItems" />
<Folder Include="DataManager\Strategy" />
<Folder Include="Exporter\Converter" />
<Folder Include="Layout" />
<Folder Include="DataManager" />

Loading…
Cancel
Save