Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -245,3 +245,4 @@ ModelManifest.xml
# FAKE - F# Make
.fake/
*.bak
/Extras/ReportBuilder/.dotnet
Original file line number Diff line number Diff line change
@@ -1,99 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\MSTest.TestAdapter.2.1.1\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.2.1.1\build\net45\MSTest.TestAdapter.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{17CE85B1-B182-4BEA-90A8-F8D110B1CFCE}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<TargetFramework>net48</TargetFramework>
<IsTestProject>true</IsTestProject>
<IsPackable>false</IsPackable>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<RootNamespace>FastReport.ReportBuilder.UnitTest</RootNamespace>
<AssemblyName>FastReport.ReportBuilder.UnitTest</AssemblyName>
<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
<IsCodedUITest>False</IsCodedUITest>
<TestProjectType>UnitTest</TestProjectType>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>

<ItemGroup>
<Reference Include="Accessibility" />
<Reference Include="FastReport, Version=2021.1.0.0, Culture=neutral, PublicKeyToken=5ceb240df42bf6e8, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\FastReport.OpenSource.2021.1.0\lib\net40\FastReport.dll</HintPath>
</Reference>
<Reference Include="FastReport.Compat, Version=2020.4.2.0, Culture=neutral, PublicKeyToken=406e1f4c3c8ef97e, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\FastReport.Compat.2020.4.2\lib\net40\FastReport.Compat.dll</HintPath>
</Reference>
<Reference Include="FastReport.OpenSource.Export.PdfSimple, Version=2021.1.2.0, Culture=neutral, PublicKeyToken=b33a9a06fcc00c4c, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\FastReport.OpenSource.Export.PdfSimple.2021.1.2\lib\net40\FastReport.OpenSource.Export.PdfSimple.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\MSTest.TestFramework.2.1.1\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
<Reference Include="Microsoft.CSharp">
<Private>true</Private>
</Reference>
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\MSTest.TestFramework.2.1.1\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.Annotations, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\System.ComponentModel.Annotations.4.1.0\lib\net461\System.ComponentModel.Annotations.dll</HintPath>
</Reference>
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Core" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Drawing.Common, Version=4.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\System.Drawing.Common.4.5.1\lib\net461\System.Drawing.Common.dll</HintPath>
</Reference>
<Reference Include="System.Security" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Person.cs" />
<Compile Include="ReportTest.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>

<ItemGroup>
<None Include="packages.config" />
<PackageReference Include="FastReport.OpenSource" Version="2025.2.12" />
<PackageReference Include="FastReport.OpenSource.Export.PdfSimple" Version="2025.2.12" />
<PackageReference Include="MSTest.TestAdapter" Version="2.1.1" />
<PackageReference Include="MSTest.TestFramework" Version="2.1.1" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\FastReport.ReportBuilder\FastReport.ReportBuilder.csproj">
<Project>{abfbdac5-ac9e-44b4-9201-fe8bfbd5db0a}</Project>
<Name>FastReport.ReportBuilder</Name>
</ProjectReference>
<ProjectReference Include="..\FastReport.ReportBuilder\FastReport.ReportBuilder.csproj" />
</ItemGroup>
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.2.1.1\build\net45\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.2.1.1\build\net45\MSTest.TestAdapter.props'))" />
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.2.1.1\build\net45\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.2.1.1\build\net45\MSTest.TestAdapter.targets'))" />
<Error Condition="!Exists('..\..\..\packages\FastReport.Compat.2020.4.2\build\FastReport.Compat.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\FastReport.Compat.2020.4.2\build\FastReport.Compat.targets'))" />

<Target Name="CopyMicrosoftCSharp" AfterTargets="Build">
<Copy
SourceFiles="$(TargetFrameworkDirectory)Microsoft.CSharp.dll"
DestinationFolder="$(OutDir)"
SkipUnchangedFiles="true"
Condition="Exists('$(TargetFrameworkDirectory)Microsoft.CSharp.dll')" />
</Target>
<Import Project="..\packages\MSTest.TestAdapter.2.1.1\build\net45\MSTest.TestAdapter.targets" Condition="Exists('..\packages\MSTest.TestAdapter.2.1.1\build\net45\MSTest.TestAdapter.targets')" />
<Import Project="..\..\..\packages\FastReport.Compat.2020.4.2\build\FastReport.Compat.targets" Condition="Exists('..\..\..\packages\FastReport.Compat.2020.4.2\build\FastReport.Compat.targets')" />
</Project>

</Project>
152 changes: 147 additions & 5 deletions Extras/ReportBuilder/FastReport.ReportBuilder.UnitTest/ReportTest.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using FastReport.Export.PdfSimple;
using FastReport.Utils;
using System.Drawing;
using System.Collections.Generic;
using System.IO;

namespace FastReport.ReportBuilder.UnitTest
{
Expand Down Expand Up @@ -36,7 +38,7 @@ public void export_basic_report_pdf()
.Prepare();

PDFSimpleExport pdfExport = new PDFSimpleExport();
pdfExport.Export(report, "Employees.pdf");
pdfExport.Export(report, "basic_report.pdf");
}

[TestMethod]
Expand All @@ -58,7 +60,7 @@ public void export_report_resized_columns_by_percentage_pdf()
.Prepare();

PDFSimpleExport pdfExport = new PDFSimpleExport();
pdfExport.Export(report, "Employees.pdf");
pdfExport.Export(report, "report_resized_columns_by_percentage.pdf");
}

[TestMethod]
Expand All @@ -80,7 +82,7 @@ public void export_report_using_column_format_pdf()
.Prepare();

PDFSimpleExport pdfExport = new PDFSimpleExport();
pdfExport.Export(report, "Employees.pdf");
pdfExport.Export(report, "report_using_column_format.pdf");
}

[TestMethod]
Expand All @@ -102,7 +104,7 @@ public void export_report_using_expression_pdf()
.Prepare();

PDFSimpleExport pdfExport = new PDFSimpleExport();
pdfExport.Export(report, "Employees.pdf");
pdfExport.Export(report, "report_using_expression.pdf");
}

[TestMethod]
Expand Down Expand Up @@ -133,7 +135,147 @@ public void export_group_report_pdf()
.Prepare();

PDFSimpleExport pdfExport = new PDFSimpleExport();
pdfExport.Export(report, "Employees.pdf");
pdfExport.Export(report, "group_report.pdf");
}

[TestMethod]
public void prepare_report_with_page_configuration_and_extra_bands()
{
var report = builder.Report(list)
.ReportTitle(t => t
.Text("Employee List")
.HorzAlign(HorzAlign.Center)
)
.Landscape()
.PaperSize(210, 297)
.Margins(15, 20, 15, 20)
.PageHeader(header => header
.Text("Employees")
.HorzAlign(HorzAlign.Center)
.Height(0.7f))
.DataHeader(header => header
.TextColor(Color.DarkBlue)
.FillColor(Color.LightGray))
.PageFooter(footer => footer
.Text("Page [Page#] of [TotalPages#]")
.HorzAlign(HorzAlign.Right)
.Height(0.7f))
.ReportSummary(summary => summary
.Text("Report completed")
.Height(0.7f))
.Data(data =>
{
data.Column(col => col.FirstName);
data.Column(col => col.LastName);
})
.Prepare();

PDFSimpleExport pdfExport = new PDFSimpleExport();
pdfExport.Export(report, "report_with_page_configuration_and_extra_bands.pdf");

var page = (ReportPage)report.Pages[0];
var headerText = (TextObject)page.PageHeader.Objects[0];
var footerText = (TextObject)page.PageFooter.Objects[0];
var summaryText = (TextObject)page.ReportSummary.Objects[0];

Assert.IsTrue(page.Landscape);
Assert.AreEqual(210f, page.PaperWidth, 0.001f);
Assert.AreEqual(297f, page.PaperHeight, 0.001f);
Assert.AreEqual(15f, page.LeftMargin, 0.001f);
Assert.AreEqual(20f, page.TopMargin, 0.001f);
Assert.AreEqual(15f, page.RightMargin, 0.001f);
Assert.AreEqual(20f, page.BottomMargin, 0.001f);
Assert.AreEqual("Employees", headerText.Text);
Assert.AreEqual(HorzAlign.Center, headerText.HorzAlign);
Assert.AreEqual("Page [Page#] of [TotalPages#]", footerText.Text);
Assert.AreEqual(HorzAlign.Right, footerText.HorzAlign);
Assert.AreEqual("Report completed", summaryText.Text);
Assert.IsTrue(File.Exists("report_with_page_configuration_and_extra_bands.pdf"));
}

[TestMethod]
public void prepare_report_title_horz_align_is_applied()
{
var report = builder.Report(list)
.ReportTitle(t => t
.Text("Employee List")
.HorzAlign(HorzAlign.Right)
)
.Data(data =>
{
data.Column(col => col.FirstName);
data.Column(col => col.LastName);
})
.Prepare();

var page = (ReportPage)report.Pages[0];
var titleText = (TextObject)page.ReportTitle.Objects[0];

Assert.AreEqual(HorzAlign.Right, titleText.HorzAlign);
}

[TestMethod]
public void prepare_report_title_height_is_applied()
{
var report = builder.Report(list)
.ReportTitle(t => t
.Text("Employee List")
.Height(2.0f)
)
.Data(data =>
{
data.Column(col => col.FirstName);
data.Column(col => col.LastName);
})
.Prepare();

var page = (ReportPage)report.Pages[0];

Assert.AreEqual(Units.Centimeters * 2.0f, page.ReportTitle.Height, 0.001f);
}

[TestMethod]
public void prepare_data_header_fill_and_text_color_are_applied()
{
var report = builder.Report(list)
.DataHeader(header => header
.FillColor(Color.LightBlue)
.TextColor(Color.DarkRed)
)
.Data(data =>
{
data.Column(col => col.FirstName);
data.Column(col => col.LastName);
})
.Prepare();

var page = (ReportPage)report.Pages[0];
var dataBand = (DataBand)page.Bands[0];
var dataHeader = (DataHeaderBand)dataBand.Header;
var headerCell = (TextObject)dataHeader.Objects[0];

Assert.AreEqual(Color.LightBlue, headerCell.FillColor);
Assert.AreEqual(Color.DarkRed, headerCell.TextColor);
}

[TestMethod]
public void prepare_report_level_horz_align_propagates_to_data_header_cells()
{
var report = builder.Report(list)
.HorzAlign(HorzAlign.Center)
.Data(data =>
{
data.Column(col => col.FirstName);
data.Column(col => col.LastName);
})
.Prepare();

var page = (ReportPage)report.Pages[0];
var dataBand = (DataBand)page.Bands[0];
var dataHeader = (DataHeaderBand)dataBand.Header;
var headerCell = (TextObject)dataHeader.Objects[0];

Assert.AreEqual(HorzAlign.Center, headerCell.HorzAlign);
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
namespace FastReport.ReportBuilder
{
/// <summary>
/// Configures the page footer band.
/// </summary>
/// <typeparam name="T">The report row type.</typeparam>
public class PageFooterBuilder<T> : TextBandBuilderBase<PageFooterBuilder<T>, T>
{
/// <summary>
/// Initializes a page footer builder.
/// </summary>
/// <param name="report">The owning report builder.</param>
public PageFooterBuilder(ReportBuilder<T> report)
: base(report, report._pageFooter)
{
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
namespace FastReport.ReportBuilder
{
/// <summary>
/// Configures the page header band.
/// </summary>
/// <typeparam name="T">The report row type.</typeparam>
public class PageHeaderBuilder<T> : TextBandBuilderBase<PageHeaderBuilder<T>, T>
{
/// <summary>
/// Initializes a page header builder.
/// </summary>
/// <param name="report">The owning report builder.</param>
public PageHeaderBuilder(ReportBuilder<T> report)
: base(report, report._pageHeader)
{
}
}
}
Loading