From 9c2ab2bed045b9f1965d516cddcfe2cb5c9e3818 Mon Sep 17 00:00:00 2001 From: stanzhai Date: Thu, 11 Jul 2013 17:55:10 +0800 Subject: [PATCH] split project, fix some bugs --- .nuget/NuGet.Config | 6 + .nuget/NuGet.targets | 133 + Html2Article.nuspec | 22 + Html2Article.sln | 56 +- README.md | 4 +- packages/NUnit.2.6.2/NUnit.2.6.2.nupkg | Bin 0 -> 94702 bytes packages/NUnit.2.6.2/NUnit.2.6.2.nuspec | 27 + packages/NUnit.2.6.2/lib/nunit.framework.dll | Bin 0 -> 147456 bytes packages/NUnit.2.6.2/lib/nunit.framework.xml | 10899 ++++++++++++++++ packages/NUnit.2.6.2/license.txt | 15 + packages/repositories.config | 4 + .../Demo/Demo.csproj | 37 +- .../Demo}/FrmMain.Designer.cs | 58 +- {Html2Article => src/Demo}/FrmMain.cs | 7 +- {Html2Article => src/Demo}/FrmMain.resx | 0 {Html2Article => src/Demo}/Program.cs | 2 +- .../Demo}/Properties/AssemblyInfo.cs | 12 +- .../Properties/DataSources/Article.datasource | 0 .../Demo}/Properties/Resources.Designer.cs | 4 +- .../Demo}/Properties/Resources.resx | 0 .../Demo}/Properties/Settings.Designer.cs | 4 +- .../Demo}/Properties/Settings.settings | 0 {Html2Article => src/Demo}/app.config | 6 +- .../Html2Article.Test.csproj | 69 + .../Properties/AssemblyInfo.cs | 36 + src/Html2Article.Test/UrlUtilityTest.cs | 24 + src/Html2Article.Test/packages.config | 4 + .../Html2Article}/Html2Article.cs | 61 +- src/Html2Article/Html2Article.csproj | 57 + src/Html2Article/Html2Article.nuspec | 18 + src/Html2Article/Properties/AssemblyInfo.cs | 36 + src/Html2Article/UrlUtility.cs | 45 + 32 files changed, 11563 insertions(+), 83 deletions(-) create mode 100644 .nuget/NuGet.Config create mode 100644 .nuget/NuGet.targets create mode 100644 Html2Article.nuspec create mode 100644 packages/NUnit.2.6.2/NUnit.2.6.2.nupkg create mode 100644 packages/NUnit.2.6.2/NUnit.2.6.2.nuspec create mode 100644 packages/NUnit.2.6.2/lib/nunit.framework.dll create mode 100644 packages/NUnit.2.6.2/lib/nunit.framework.xml create mode 100644 packages/NUnit.2.6.2/license.txt create mode 100644 packages/repositories.config rename Html2Article/Html2Article.csproj => src/Demo/Demo.csproj (79%) rename {Html2Article => src/Demo}/FrmMain.Designer.cs (95%) rename {Html2Article => src/Demo}/FrmMain.cs (92%) rename {Html2Article => src/Demo}/FrmMain.resx (100%) rename {Html2Article => src/Demo}/Program.cs (95%) rename {Html2Article => src/Demo}/Properties/AssemblyInfo.cs (76%) rename {Html2Article => src/Demo}/Properties/DataSources/Article.datasource (100%) rename {Html2Article => src/Demo}/Properties/Resources.Designer.cs (94%) rename {Html2Article => src/Demo}/Properties/Resources.resx (100%) rename {Html2Article => src/Demo}/Properties/Settings.Designer.cs (96%) rename {Html2Article => src/Demo}/Properties/Settings.settings (100%) rename {Html2Article => src/Demo}/app.config (89%) create mode 100644 src/Html2Article.Test/Html2Article.Test.csproj create mode 100644 src/Html2Article.Test/Properties/AssemblyInfo.cs create mode 100644 src/Html2Article.Test/UrlUtilityTest.cs create mode 100644 src/Html2Article.Test/packages.config rename {Html2Article => src/Html2Article}/Html2Article.cs (81%) create mode 100644 src/Html2Article/Html2Article.csproj create mode 100644 src/Html2Article/Html2Article.nuspec create mode 100644 src/Html2Article/Properties/AssemblyInfo.cs create mode 100644 src/Html2Article/UrlUtility.cs diff --git a/.nuget/NuGet.Config b/.nuget/NuGet.Config new file mode 100644 index 0000000..67f8ea0 --- /dev/null +++ b/.nuget/NuGet.Config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.nuget/NuGet.targets b/.nuget/NuGet.targets new file mode 100644 index 0000000..46a1b6c --- /dev/null +++ b/.nuget/NuGet.targets @@ -0,0 +1,133 @@ + + + + $(MSBuildProjectDirectory)\..\ + + + false + + + false + + + true + + + false + + + + + + + + + + + $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) + $([System.IO.Path]::Combine($(ProjectDir), "packages.config")) + + + + + $(SolutionDir).nuget + packages.config + + + + + $(NuGetToolsPath)\NuGet.exe + @(PackageSource) + + "$(NuGetExePath)" + mono --runtime=v4.0.30319 $(NuGetExePath) + + $(TargetDir.Trim('\\')) + + -RequireConsent + -NonInteractive + + + $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir "$(SolutionDir) " + $(NuGetCommand) pack "$(ProjectPath)" -Properties Configuration=$(Configuration) $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols + + + + RestorePackages; + $(BuildDependsOn); + + + + + $(BuildDependsOn); + BuildPackage; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Html2Article.nuspec b/Html2Article.nuspec new file mode 100644 index 0000000..af8cd77 --- /dev/null +++ b/Html2Article.nuspec @@ -0,0 +1,22 @@ + + + + Html2Article + 1.17.0 + 翟士丹 + 翟士丹 + http://www.apache.org/licenses/LICENSE-2.0 + https://github.com/stanzhai/Html2Article + true + .NET平台下,一个高效的从Html中提取正文的工具。 +正文提取采用了基于文本密度的提取算法,支持从压缩的Html文档中提取正文,每个页面平均提取时间为30ms,正确率在95%以上。 + + Copyright StanZhai 2013 + Html Article 网页正文提取 + + + + + + + \ No newline at end of file diff --git a/Html2Article.sln b/Html2Article.sln index e2f0175..12107ed 100644 --- a/Html2Article.sln +++ b/Html2Article.sln @@ -1,24 +1,66 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Html2Article", "Html2Article\Html2Article.csproj", "{9CF36626-4608-4467-9ED6-7E9C91A0E121}" -EndProject +# Visual Studio 2010 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{2C4D51DA-94A5-4035-BB74-350CE83CD2DF}" ProjectSection(SolutionItems) = preProject + Html2Article.nuspec = Html2Article.nuspec License.md = License.md README.md = README.md EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Html2Article", "src\Html2Article\Html2Article.csproj", "{0EDCFCDB-08FC-43AE-B6BB-BAF8D6EDF61E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Demo", "src\Demo\Demo.csproj", "{7F199520-F681-4BB7-B64F-79F68B1DFA43}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Html2Article.Test", "src\Html2Article.Test\Html2Article.Test.csproj", "{AB667490-AB7D-46A7-A0AF-7BA1C49C1CCA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{FCAEC003-ADBD-4A36-8770-6699086484F4}" + ProjectSection(SolutionItems) = preProject + .nuget\NuGet.Config = .nuget\NuGet.Config + .nuget\NuGet.exe = .nuget\NuGet.exe + .nuget\NuGet.targets = .nuget\NuGet.targets + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {9CF36626-4608-4467-9ED6-7E9C91A0E121}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9CF36626-4608-4467-9ED6-7E9C91A0E121}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9CF36626-4608-4467-9ED6-7E9C91A0E121}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9CF36626-4608-4467-9ED6-7E9C91A0E121}.Release|Any CPU.Build.0 = Release|Any CPU + {0EDCFCDB-08FC-43AE-B6BB-BAF8D6EDF61E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0EDCFCDB-08FC-43AE-B6BB-BAF8D6EDF61E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0EDCFCDB-08FC-43AE-B6BB-BAF8D6EDF61E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {0EDCFCDB-08FC-43AE-B6BB-BAF8D6EDF61E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {0EDCFCDB-08FC-43AE-B6BB-BAF8D6EDF61E}.Debug|x86.ActiveCfg = Debug|Any CPU + {0EDCFCDB-08FC-43AE-B6BB-BAF8D6EDF61E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0EDCFCDB-08FC-43AE-B6BB-BAF8D6EDF61E}.Release|Any CPU.Build.0 = Release|Any CPU + {0EDCFCDB-08FC-43AE-B6BB-BAF8D6EDF61E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {0EDCFCDB-08FC-43AE-B6BB-BAF8D6EDF61E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {0EDCFCDB-08FC-43AE-B6BB-BAF8D6EDF61E}.Release|x86.ActiveCfg = Release|Any CPU + {7F199520-F681-4BB7-B64F-79F68B1DFA43}.Debug|Any CPU.ActiveCfg = Debug|x86 + {7F199520-F681-4BB7-B64F-79F68B1DFA43}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {7F199520-F681-4BB7-B64F-79F68B1DFA43}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {7F199520-F681-4BB7-B64F-79F68B1DFA43}.Debug|x86.ActiveCfg = Debug|x86 + {7F199520-F681-4BB7-B64F-79F68B1DFA43}.Debug|x86.Build.0 = Debug|x86 + {7F199520-F681-4BB7-B64F-79F68B1DFA43}.Release|Any CPU.ActiveCfg = Release|x86 + {7F199520-F681-4BB7-B64F-79F68B1DFA43}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {7F199520-F681-4BB7-B64F-79F68B1DFA43}.Release|Mixed Platforms.Build.0 = Release|x86 + {7F199520-F681-4BB7-B64F-79F68B1DFA43}.Release|x86.ActiveCfg = Release|x86 + {7F199520-F681-4BB7-B64F-79F68B1DFA43}.Release|x86.Build.0 = Release|x86 + {AB667490-AB7D-46A7-A0AF-7BA1C49C1CCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AB667490-AB7D-46A7-A0AF-7BA1C49C1CCA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AB667490-AB7D-46A7-A0AF-7BA1C49C1CCA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {AB667490-AB7D-46A7-A0AF-7BA1C49C1CCA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {AB667490-AB7D-46A7-A0AF-7BA1C49C1CCA}.Debug|x86.ActiveCfg = Debug|Any CPU + {AB667490-AB7D-46A7-A0AF-7BA1C49C1CCA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AB667490-AB7D-46A7-A0AF-7BA1C49C1CCA}.Release|Any CPU.Build.0 = Release|Any CPU + {AB667490-AB7D-46A7-A0AF-7BA1C49C1CCA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {AB667490-AB7D-46A7-A0AF-7BA1C49C1CCA}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {AB667490-AB7D-46A7-A0AF-7BA1C49C1CCA}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/README.md b/README.md index 2eb6341..fe6c8cc 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,8 @@ ## Ŀ֧Htmlȡ -- **ʵĿеHtml2Article.csƵĿС** -- **ռHtml2Article** +- **`PM> Install-Package Html2Article`** +- **ռ`using StanSoft;`** - **´룺** ```C# diff --git a/packages/NUnit.2.6.2/NUnit.2.6.2.nupkg b/packages/NUnit.2.6.2/NUnit.2.6.2.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..26f15bdc7f1075d97c4e8bdd2ee9bdaf7833fcb6 GIT binary patch literal 94702 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%0A3$?eQaoC`p1VEmOx~yGx zgFHYqUl}7JW?rqm4c|UQHyv-!I$CEgb5fzZp5&OMfM4hNws<_qxNB#g^fpX16M#Kb z(7mT@7$jm`i#@PAsY*d_+5e}>q0ud0nlIG}X#+9HZe>33MX#sMA4T0e)O+IzS9XtO zl+y((pU84}zKK3ZF&w0pa}297QnrQ zTUrDu3-8c}T}k00NM*NO6&*v-(+xj_6}ZNphVk;u&6dw$cGIT}zV3hgm%&Q*=lu2;jPH!CvfWfY`+ZdTS?VkrHbg1;yb-4#lwJwP>*AoXv!gQ%KKdK==x?+~e{(_4 zY7hQKe9}n_GNWgeCTLJ`)QcY*75VzVe@d$Rq-5t=ypzH9utWbxTN_Fc4wMoe>`N@Y z3yoVO$S=cal9BZ5yt=gnSXkU_P|Vt4KlSv{8MQri>YqI&PWGI1_w_z&N_^a{5l>TK z!GJF^=FG*!-P%bYeSv2|pNS62^P$E3)yGqy#V;^iD@;G+)d2@%Y%Bvd_bLT=D$A>3 z(Yw2w>>l)TwcI{klVvf^UgHl1A0>*!jh791={pFdk8Llt8blw9n&u6F#&3c9nQclF zp4PV}`$5%Hr=Sa!9=Q+7TrjV7ff9a?GKB9_|6g=Eg`8a(i>DC-HY6=>@6B6hpK6!p zt9v*lqecWCJyrSzmSdRkI=pYai99YhFIMX`iIUw?Q$yYV8ihsq19z+-Z=pP5qK8oi zF~PKvO6-89KS6SlHQQ`@0taPHOzwK;^m*P6xUX`GEY2sEc-~l;=9KDdPJ^3X{w2bV zLu_6@YTd<5aLk2-09A~I(R1Xa?x=Lg=n-PI&?E1>M*+F@m=UXmR+lo@mK!xm42%## z61hEkRm*t~%Tjv$%Q`e+yXr@3mwCQ5H@sWmu}7Co1NkE~$0Ym?AF^$r%|~pxI=zQi0ojX}%n|#j%=2MQhem zEUiEcjczPRToXcRJ&wykI*q;Sgu1iZTao)%5LZ_!)VJ3G0QV)?H_KAv?cSV zo@r|g2~F&&nPYe@ZO9JjXrba=;IwRTIvFR}zNj1R@beZPN?fjoRNEa0ZXl@NaM(xN zP5=)zu0&&vxy6d}?AvL9L;HiR*41NA3Fds(cH2v_!lfI7?@!RU%e5_Udyi;)yD{$V z?%^AiZqoE)ambm46*`|=%IM1YqnKqd%`x5qYqwewT@^w6Y{$Y!1HemauVfjKWX9aK4DXZa?D zywn__P0$T{=qxg=r*_CoVtmJ)dmUCB>P)qUpQ4J(*z|;w(nj(jVp8CZSV#OaLPInQ zSN@JYVmmYo*IvpEF6FLni~PQOm683J-tdg_gwRrvt-D}c#(f4{Y%T*sN>ZF+jvNlX zxIi?9c35|UbVD1WISiF=5J!qfs~^>-bYYF3ZJIL`*TvE8yO=dt*6v(=zN>F_6mD*A zEA54Y%i#vS4idy~A6T@hM4e%j$E-FJ1%E<)brh~)JWGj5X4{Z?vBVnL>?H>J>@o89 zVW|}R0bz8LUS3?9H8>$C+6eVY)Q#0X)5WlE)sZ8 zkn?rZJZxR7s?(iQ`xuv$2J*e~9$yCfv|*n%>|l$N%og6AMA(3lxL$ROZ3!F4j82?} z#rl%0T5g=4mnE0&;=SW16w-S>*?`K`EpWdhfw ziN4`VE@KX8%U686Ny%Z0!pxRud<70Tx3Q{W-2c04aSTAuKIBb9rnG4-=OQTXM^Iq2OfbDgr;(pS<$kB2K4H`>^Ox9%O6?idLInGLe zie}gxxFYx(H!S13h3-$$EzH`$1%F907FvRAvxbQS=oQi$aKRy*njW;fUKEi?!(M6G zX2psmqVYR&N)NKBg+ZJR4BROzfT$@l$f6`>1>uZShrxu1sj=~i6%lJ~2VclzR9Z(- zOio{1lcE!WN=V+fzjgVi{b=lg?LLf?gViWi$V==8g zDL|T%J36ssQhnotZU8i$eTr+4gtY_zt7phpF3&tV-GQF`rX!AYSaXEAjD9-s3WUQ@ zsz=ho(ua8#e85(SFxoqTyM*nPmx53pz3Oqz%0+O!!B%t-8WuuMrpj28OW^x-TdT`Z zY5F(6y(P;fKa2q8HLLC!zq9~Z%>}5LLrKnS(l}@!^A)w{(WrA}T#RwUlL$YgnVV6I zlA?Un&NdPjR836t#==#;nV=?RCuBPtO&bTg7Y=IRRZS>Cjg&XmpAZkPZ&~z})Yo|y zf1pFq;nFTV6?h#Hvqi3S-6kk6Yz^~ydE|rzf>&rfI7XymN#_g|yw~)#TOJz$GUtGNNTZ27oSkxCoAw4Fn zpzy+|KfhKB$r9%qt`ti9Y9j9;HFJuF#c0+|i0=Q76?s=|2Y=@e?ZdTm#Nnf2GljG% zf$eZv`B~aUhJZloI?vpMP~f$@D;Vnfxf9_ufL{koig);O zZN*LrS_i|kJ6v4u!1`0d^Co;e5FV+Cu96kIT!Ri4tw<0i32pO&;i4&7*ucy&-`A9Q z_+!2)W{HSf*x00^G|3<*WRAF4(blHK#wCmLES@DcO4{1Aypg6!IbW2lwEazqm#ZZD zI!lB^X&!wID%jqX__!$h82goo1nOWJZoR>pN9=LGJg&QUpEMup+mEXXzrvhOSWGZL zQdpgdCUCVGps2Q5@Nu8kS_q6xC@`aJ<6p~7Pz)ah{H@Oj7K_pp*&q)D{AoW-__;C0 z95Fk5pw9&UgyVY#ASK4Piv*H3AxJ{yPOu6_&YB_;aHV1ye5un8(7lBlb}td-c+!!< z4p}m?A+F^XDJ2%^mXD5Fnbs@3>64DiZ~!#O5zm~c8tkAqq~q{;;x5b_o=#*khnpYB z9h9)R2YU28BBLa-WeSlDR;n>0yIHo8TXZ%?*`k9I(cwuaW^sskfbGvQs?qV1M76nppU}r$&{@VgmIhzjQkbAXpn*gyk+Tap_$1Z&bXeK=WVVLj$WOi{VF4XS|*psh%gaS{Uq z!3X+{ljUYId>3(#$kcM_l??Sdlrn zgxrdjF(jmu4VnUT4&u??YG{Vq4Yf6ifZR$bFCYgKkXQKu;!%J2AmNBuJdSA8VHjL6 z8VEWWv1p)V3ZW>fPP|C$OC&E4dk93T_2po6EhoMrPZsBE%E6WEpr@ntsPTh%qPh2W z?Ywj(3x}JyllHHuUQ%=&-5ri*T2sKSoqA4feAVR4fYzy(5`qB)5ZM-$fGRele zBQylbLduf=#ZrwT5nx)Je%@qNvV!yF&Iea;Fw}4b9ur1L9jmGkraDXj9XOKP zk_sQ;v`Ml!xl3Y5M?x}1jfvi)Z1r-JRITd<&-MCx}MM*e*(B{|(w@aGOiF!EkY;xmF|+ z?_EutRTD1JnFwf@uU5HchKlGImwB}5QOr@%zOu{2*FQsN$n2X+WbQ%lun;>+JgQRa zQu+C1eLS=WDDxGx*2y{K=89?Z6-9iKap{p%GN%S31941I5(}kg!5-^i zq8N*oXb;r}e5?6=xpSXqEsT!-NJfjnii<7!MaekN&}yo-16$UKSfcH?Rjsl(-E13} z<9G!nRpo}{cEPCeMX-XFKVPu{Qr$t3|7p3&qTap6w>C~RI?4}pwGn9l%tS+*;qb4O z*VKLWtoKliQuIpQN|Y^9fedsYOu3yhN#>@EJxrktI5I0>b%Bw#ruETDNB_K`J|fEI z79^vO7cG7>Z?Qz`|N2W?V*in)Yra)5xaGFwPN>6)is~*z%M;Zn@$BsEw-zx#2vKe` zXCG=oB|B&W@op5W<3r}3Y5lY7rdE9so6Y?I16Z3o8^ zdONXj5^`@V{~V2929tq0e;i8?c4d%ZC^-%3ddkI%j&$jdk}J+h9U9kPd}d{y-f0!; zZO_0t4hyy?7DIBL=8Im)NeeiFXt}dvo-xRcT*`IF_d4UR&KMKvf19G0C}a;X4x_{z z#Pi^_0Y#nPaeyCQ7E2Dv@CQ?O(M#TWTKA@PV+pr}1^IuUz_e*rx7*X8o-q^kHM*WG zQ`LVsW&UdJ?Z{>uvhB|L+2-6yulu&L?r=HV^~i`l6-=`H;FC<5ZPm1A`nDx7B~aCQ|}dt!ltr zx?kqPHV(Ai(mHk2-bAi4uuUimH|P&TWc_Z#!&6|NC&w-)#4Ur8)e~|zAqT!U>qU)Y z-7a)W5k+EFk4vY7F6fOXu9kHHm(uW#2*0!tO3Rc`-68uC1V+Q22Rc@StP|y$ZR~)0 zGq@IlqnQ;_YRY)#kTm}3@lSPG&~uGX{#sI0I1I|iEYBWSSg~}4IRIHuKyC{zVj&r`#Y#u}i{D~EbFlX^X(=dmzbUleS zX;^3{7hASL?R!6i*W|v)RtU8e5j7WG+K}nS^ktT;*Q`=dc@7+p13kwbnd9cf8lD;2 zF~h+$(*|EWWo>~SDU5N6cB4t`$tS;gI)}Eg@J!T1KfdyObh5&~Ex|pBM;7T2SAR;9 z+|eEu31AQ8(Uh#KdF+8yX*~YK1$Z|u@?3Lb;(8x>Jwb;S&aYvp+8hLP=B9%kOO8dZ zY}szq^G>|J@nW?z{XM-W5{UZ=^E63uD8^>yIWXcv&}u*8TMZMk*3Gr@B7io!);xQi zA_EX%=S@QBs<+0KqT@}%3)RCo(R1Djao$uc;+bN2rZ|vxGx2B4fuOEC&@KXYz5sch z(u?Ullg*sTM&<@j|6^;4H#sXmyoL|i06Xgl)qOb^CM_ut*5L=_Vb|Uxl`r2VY$Nd z!32D85Xr(1l45W2&2>6T`3?{v#?{^Q1l%Jj_--UourKjhYkF!=&V!tUO`@jgvFsH| zXa4j2c9Q%yC`Wi67@G$MA{VItkZ<502KoN!HOg_R+gRz@Xp~kA=^5}O8E{+{@k}vi zo%43Jt{%U2s+A#&G`U%Zxk;8vG4hq3h7xb? zYcA5R4beT3r$`4J!C0Fg;)lf1%^bR!Q5e0+2XmEXM>gM{4@*oyv}Z=9L$f$O z7SsFK5(F0#GXVG}rrw+TnvK+JM{ZBvF|($e1b8wiAE4Cb2m%QNyTaXRvuAT(vyncn z$?M5EI>JvA#fM;n|B&2dU?9FL@|7{fWP}WRv$sbk1H3Cvb`D>Ndx5URhUKW50M={l>U)7;qnq-z(p z@oX{*n@mASPr6~SJgpaD7__&!JM_Ogc*)w2RXl5q!x|$I&y(v=r^_6i0N|E6bw$=# z<7o@jUYz4OWi(EifR>(mgChF4o`I)8ipCnxNaRlIAn@EWw%8rpPw*5dI2f`gcNYwV z{U>-YY;J6p;&ybef#;CXMeGR9gC{|?{s=xV*juQ`m1w=ls(=06!u89bjg#+l%GxM{ zuwYaZEGJ4o;zyh;3)NfHenZzzqlYyY-J&FM{~fg?{oMM|r!1YjGM;C&nKRm$tl)`1 z9PtOG)4%`Q!u5;S6(@OwoBNrquGqUVZk=)OZw8 zCuB+ZkgPT7qy)C#*SuR<@AYbH~RrieW-N0$R<1mZy1KNdGod=yif8P9go8x(# z@DQb3A}YJtF>4_(L%po6D?W z8nOni$-YvpY2L@+%KBU~G>a|%MJ`L0!F68U67TV|wt(SG^26Kkjv>}c4l_~iEI>4v zOWlTLP;x{ke8G~f!mLW760~bj<||bz12s0K#e|lxRBWm**AK?%bYkUHWBIrFyUCmT znWq`F|BU!E;m^d}EE5;kdOm%Ie0mT|!9?n#7j`Oonc+(O=-CA<8;?G5Ros;WJ;$8{ z$BoPro(pD`DB&R3^fjNJoL-GgTm0!c?$p%C7*(L23&tYYk;*|mLA@fGx-Qi7+)1gD z(F#O8AB;(|BUFldf_h~#b;+pbxsy{SqtuRiJ{XH+M=K)rB=zcK`f5_obtk1zMl37! zoG=#AF8N{A60FVNyh1tMqut!kY!%9W9`rnS5<(DU3$ z@Z9KJ;rU?J%H&u@L>fg;HyQo;B%(JSeP;S@syZTnEc~$;opC*@K0{VLh^sF7N8?)z z#)v+h-8fnJHu*79d_jLv)}XnLz8IkgixzFfJ$2lRm3-t;!a=2H86B9#W%qNX~DZvkaH zE$};9j}WnC!IYo)XRfF^a4_EB7H6mmN9vm7Irj88c0``?Tr@{68r1Tcq|t_F zh|?1*t}V_`5sucV!}ILv@$9Hv<@soid^8xzCu|hrS>p6Wi))KBREHxr8u46vdR#j) zUwKZNBPR_<^r>poJwu$HXmM?EjtX(C+IG*gr^mCSa+T+!Ir7n9B%iG7muHC66D+PR z&QKYS)-}xY?CJ6Bs9fdwXpVd|T&VbUzJkRyBgpZQSBs~^8jaPSky`A+&7OOo4fjsO zU!J4p$Wi@?{|jI5=*5Qs)DvffmXe?)7qn-qr>q#e@UG|8=fSIEag*nt+40XXq&{M) zp=X6zixSr^=ce{1EHd=mI%{qnkDojT&5nZxvvQ78Sm+sH)}q9<%eg7O$w~@6ug;oR z$Koc>KeOYX;VhgZl@WSYn6)Tz?Q(8vZ^8mX&#klO*75ksbI|NKXc%H2wP?^Y!>q-L zYnO9Vev_69dVZZXzmCaKo`+_~Lj#ffcqM|K6=p3?T)Ui|`kSse&~xjoxph2#@*Fff z4jP8oM=S{RtT1a~;@aihRNsW9fSy}t&8_3{ljoq>anL})-8q#1d8U}PSaI!gZc6Yd zg@2xJXU(@$aF*w#+40iB#hxFFw=jPG=#_s)6=+@r40gq#f3gg6$|c6GEzUtn_Ty>K z!_Se2$LBK7S2O3Up;=%q!wNl%%vnF}1(E@!GSk1(s!v+vB=cVq_hEH!JE8r)hs`b1059Wxg=u3gSl zUmj)1rDx!oGw|pv=9y~NOf@L|XEF-Y^T*7Ej%$}Q)tX0|j_Fx=<}5q`lXA7R(LdUhsx$4bhjMelEJaYyfoy9y;&6=qOrT;93Z+h;SxyW(ta;7@-DDyZy z1J9g+M`tn5RI_HPVPo2JsNwW{G6tVC7JO#f^T>ldJuAdXsSp-V$>^GejE; zvJEcIi62T;R`UI^Xaj(jIp>Ljqc*k_S;0!VLPReH(EiSfyak%~0=Yxa{*k5Y)=*kc z0b>A{pq}RD!8Ndblybm9sDXgvP_VKp7v?fyn&$UX-fifpl(%_Ni4D`^oaM@@;7nJ+ zTP$-U6r2i}4Da$JhUNGZ%QWE(d!JOdxOmK#2?v~S58lzi4!J0~-LVLkMZOB|Zq4l-x>3Ijk)~6MjBVIF29<|VSoE|H zP8TG7^xcRksSVL=x1gqf^@9MXBP|$I$e{(>#UlKAJ2s~aM~B88bCW*TQ?};e@Xl5Z z~H=)-+f3U>UEDjYwa#+Lo zi0ocI#ze4k1{(X!kW(9edOCVYNS=ij?*UQEpfbAyE=6&F{rbxfU%&qR-@__o;P;Bh zJY4YQYX{k9Cg!wIs0?w?Q7bCou zA_$KM`LWCskiaYcvSLBP<+9V~NTRJ05CPzIPau$?6>ru(xK}+is0c$bdwHCN7-M+M zlmEfQapEpYof+0H5L+h%En65kC$5jca(jOMBdAH+F-e`Lf_F=Fc+m&|s=~_WXwWQ` zD=e6Y{K^fE@_;muGFXy|W#et)=*3_1Wk235Ioc#TRr1^eakk%LKbDQ>M_P_%};qd5f-E~Kq}1yoe++V%j_-6@Q8H-bo~ba&1S0}M65 z(B0i2ARrym4N3@7f+!$JBOL-Ft)%{g?>X-|@4L=-*80Eo!P>Lfdq3B8-SynhW@=A7 zXywu{Tj%K)z<#ZQ7Bp*;##pxsQVq9`K&RUn2@Z{3BgET~t>$Kz#^11$RSnZN-Z^0r zq$S1dde>+WBZZ)wVVTP`faGAnWkj)+vGxmiQ-kR0 zy!WALOp5PR`&IgFygR{%kJ5f?Zg`zCTPyq_Nk+cOPna?4zCu+8DJ|frNw(Zf+Ds7S zs~SbjT^M8f7|>YE0d;{aWrssc>>)@4!G{E)_xsOaVLM}9=4&zh7uo`9Of^!G={={= z0OuGtv@8lDPZ~^b0#L>M?)Rbou^b|8y^p6q#i+<{rk(HVqae$T(R7Ao0xwiOOHPRV zAi%{}Xva|`sc(mLB=3<`-E35LRDM^@5;bQ1skYZnrsPzNn#8x|NaZYg2&wE&Og1TM zg3cJh;OL2cE7OFE&{RY9fxEG$Ky(?wD5I!iN+%DzE5cE^(^p)nWli8dqqMJ$2gonB zJqcU~&0>zmUP7yxj(ph?9XdYdi06t;RFMVHfvjr~y${hE(RgnMjHOC>blKv!{-x~4#(Wss2)X6!+EscnEh@sMIxfzXC#U*-~<~)S&91O;%5+}MfXmp z_d?Sro0Q9~90+?iN{-uNp`BFc;WDh0bEZy-uim7r;WCa|CKMa79P#16b%GYN^+zIA z3Jt2YZ67Lu>lB)~^Xf-byldAR0aa;RSyw<0g--0qu&?AiQMsTvs&dhhwS%4CSz8+# zTkkN+V5h;*%-(cT-^4<1I$7n>bTBlUJFHFSCGN+{beYvvbr*xz2Q-RQ?jhjo=!|bdaPP*Py6|P5o z{u+bvgO%b{h@Tie0E#DNR`Dry6sZ);AB6mgQwQ&5vN|YQ89@Bjbl1{ft8By_I=bjd zDUqRZC-H6b_;F?T7v}o`&3F>39TNby%0*sI%WpOiic?PLOff7~qc7}h*X19~OdHBY zZUS8Of}UYKJrsin%wQO8lJxHY-V`-hitp0hJn`;)Vfe@{-Y$^7qJc8WHAD+=vqLbg zViNludIk-dQTd9k@)dW%9YfxptzmR5P)kg7vTNv7M)#WV1dDy)$f47(NOb;G4#n6L z6^q?y_@HfC&2u}(2jo~7UoDzz#i*j!+Oi50STRs?UBb}@o{7~_q}a}yyAC6~jx}Y1 z6DBL4H)!`Mj0{OSu4=@k_CF7xTW><}ux^^Flax@@wBV9Tw!UGrb;buyDcws?cO^}8 z&1xmbaDAM|?)k01QgP<_fEUTNu-DQV6P%&jV=<(^Hu+W&#v923GH4Iu1uzyVmturVgA?s3}G5a zJofZ>u)gz44j4Wf7Jo4v9pjieZdbAo>i5`z#ljA2?0Qx%`LgEcL=E;F++;~wLi&+O z{dkuyRfI*8dWHdcS-g-vrF);PNR&=yOcT0PE4u5|D;U-k2h7AynE(C`cS1A)%oo-= z)NzXIx*^uiB)ODJ0oUCcP2FUjb96(=x8ADQb;_^Mr0B=KC(-(UmK>vEaQ~pD;P_cC@A3&cki)EuSIc z6C*x`nlHe`)6#GyVt+m17g@FACp`x;O7D?tF=?+{zxmyQGLLuA5U%*D-(I?jyweol z;{B^}9pdem*b8e~Co+4F-i1N)a{>ZWf}&Yx;x0|<&C~M*N@$^T%N2+QKuL6I&`&5Z}`Gu75}(a^pRxSG)^K|Qb7+d zZB$u&v+$7G%ywdmE6KIC)G89MvPq=kFrz#0@%8WlZ9ClQYc4U$H(+2%4*_obEj)t8s55|`!io`5VN;;;~t+C4ZD}o{%i$ zeWhU8!-1{gbr)^-iARcW0%G1KRfnepiaox}GuEM9cZW7h>dm9rn#X?if$0$ZQaoT| zO<7hzIWKq7_F?KOR3<9`RyfGNAVoJ`NFKyW*ydb7kKYEGyxep^7^zRZ2-07m>mv9bga^0DH4cQlnwMk z^D~*+>lI7F`@euorGD*x5tBFenv>M~nuIHeSuON2MIQOY?Rk18`}w7oG3|oK6`dwq z;?x>o3n(nfV^lGWDZQ!`w?~22S_md2bJ*xK?dYEYO+Pt&_a)zw+9ENqF0AeYP6tg9 ztpj72;igky>pt3)!QQ}^b9aTSoh*wutjL}#jkL1xrXX$?SX)qAq+&($4s+8UUdVFj zO`i;JX+xrVucf`m#beM7H754YR+8@8ARAModg~kUm^dvyS~*b#Y}}_*IZ+~33mfl+ z{q_&m+QJtJNGEUoUH4P`zCRJct$0xV;c?7C_*{v^mqMzv`!DYYMK)6>EpodcUVaep z#O+&~S({;gNmE5_CJB5o4Rg{Ln5z3I_T1RE^7hBR5G6Gwx=Cz+1L?QD;>WUspDCXb zL{7;TX--NK(GhVG+}Dfq7CrjlH{3Zi-}mVe@oP=?OdZ;yERPMZeA}J05^g^hhN)T12^)Ej z{A9iHHi{S}qfcJU_$ggrj+0zkqs03FHAmCRk;0{=BPvBUDL&pdX4bmc0I`N|`#->S z3}G>Am<3GI>I@|zZ?h?u(>UGntn&ksUNol3`_a|s0!G*gF9k+Zea?FXr+ z&8xxVs@dqW@;~<~8wp6Vu6?pfM0UqC{_uybRm{Lca1Nicci=az$m+Fe#GO+D%&`mh~t_Iz78NrnA3ikW*H zPyJBr3LB1!;gL2-p8wX6XR4HUyg3ejgg!PgZnm9s@Fs$ROCs!kmOheW=0ML-@V|zTW{x zQ%~x;sU!1;3kC$yr(+w( z4>qDe{FF5-xwND>i0QJUAx^vzzx9j6G~kRzEfd2asz=_?`doG~@}8${?2EY*s{8xY zyJ_L;AMXAI8k54yop{Jk72|0B4(%o&-Pkl1r}%Bvjmo3MY5{t%3#{iYU4-@x7O=hf z^{iczTT#b&RdkQegkTv)h`Z|anW7N9z_?AYFx2($S09~ z31A+%*Y*T3MHLkMVo(c;Ak(LU+bt=Vz!Q!~LK?qmRc|n^V8#MxErjyXiA&pik8g(6 zKp5a-pD%qcigSxYMTC@zinLa*H?ySD%i5y)LX7==Gs1|jpUBuL(Z2-!#HBEbfD_1& zD$%BPt{%^NCg~cXKpFLM zgh}9(<0nI2GSd|A;T0}!!9?xPwf)(G`qkhzXL9&pSm8pvOdIs$X)h!%>$!R|HEWuu z7DkT8-qw4lW!rY(Ot|(3;9E4$8h)r_RkGWRq`cz~eK#>Pz1!ZfflYImgjxD69ZS$& zPj(*P=|lGk)`IsyKb@KEd_Q)~RteAVA6IKY!e*r1X7I_{HA}?LB&v>C za)Q&Y@q1GEf{#nG;?EczQLja%BS7>%U(;oU2@~oKEdr18!EL@u{yZO-qo}PBIpJN) zF3x4YIthj>wim@4x`(s`$X!~HH}`FgrF|!#qZ)qODSzEEzal806S381JqMpvMZb|$i$VW&Qw!$6cI3t&z8}6KrKV8O0}sGWZ_M~|T~W}|n(UT%;TiaJoQG7f z+6$Wh{FU^BbS1n18)<^JiLg4u8)oz6bICIps-<0gvP9+MC37& z_A;w$2R+?Fxi!J4wyAzU)&NTR^^GRC&RLnzy&kh^g1U&u z@G)1Y523!92jLRCcHGSo&8<7ZxhlzuTIq(1dob(r>E{X^`)`}myrtgNF5t65(x1VJ zO8oXgujISzvJZZsZ`!wf|K-ws8;2>(!Ah71zRE2ojr0V+UgK6|Dk)x=`>q;=Uu<+S zlk7%8(kMV7bM@IO6w%b%Dce|9y*sE|7rX;I&JFuW`C1pOzhw1I_Z&}YV2kooS{>MJ z-}wDE)wD)0YOF(}G;n~@CHX)ePkTeMPt2e-RTO@xTo5M?hW3d4T<|VM`Q0&K{gpOBH zkF`-yAIv&>m9<}Rot=d1HaiowxA%nMc;8?H9tBg@jIBH6ri0R%N^)1?C00N0q3dxy zc^hTyDH&H-YkG6hYlcbYfiBZ&_@i4TXn#F+88kQ;BqP_jTJWTkpswvF)r(Z8+D>U} zTOGIbPyY9&U2!P_zkLzDTv&yG@x`~M3k9dD#lc)|=|3#@2ZzrFJsxGgsi%l9%bmTz zUeiVtR>xP1a2f4(f*UIy_10`D_>m;0!ZCzTegaWA+bHf``BPs%0v*y zc9GW6g1L}?M1zw_Po{TzqXMX@9WHs(u8>=ex)$R%bLe6sz4EZV=8znpx`in)_QL9u zg%QF$#?puGS`DOFz<&tqpS9Vm8sH-QX^BVki`|R@dri+t`RijHTc( znI?0XW$_a>L1UTN-lyF0K(70T-VD&IM{QPZln|$_M2_k>FRY&&tEBZj95PW|{04L@ z%+7Ig?(dJ^&Uvtf?vWpHe-!$1Tlkp{Qen%%YFI30E^OG9&Qn5I=3A~Yv-A7>J}l{> z_w~f$kK?CV6)C5<)>SgfPQKHSpf-v=G}~k;oEgtA`y@#qOu+n5Mo?IbFFzgwtFA*) z>&eCT^D?aru2#Eo0{}zxeJ0~j4zU*r<0kEg_!EJd+VcaAVFXp+V#`nXU$okBe02oX zGj+c9<6gc1+M08|V-LU+hKIdN}Rg^mDW_Kjkke49i^2Y3~1}%vRMwk-$sBcOP zyD)3KcIoq8mufA08kBX}t!DWTVgiuSu&ccJg$??u4z`>8vYLK!&07JJ?P`zvMuuVY zZkJSQxH0UKwE#zFK%Zf%C76S6^uf<>zbts_Wex&HD&B1OG#$C?a?)*&&d4r{o31}U zdnrhGu-;B+QzYl3nn~WDRlxBpYV0)Fr+LBO2A|NT{a)bPh&YM&%ef{8aP@5R3 z^sUsJB|0<822Ux=ouxfM#0`!}CM5l4G~RlY!vBftb+ggp1+G?8q1v&y^RJC`cj7QB zB?mvc>!8z-G9e2kax96cMh(lY2xCqyz(PFFW=@lapMxek2(LTV0_5!!3Hp97_$mct)v%kO% zKVaBM2OAT~E~RYQQ-*$}MfvJ- zyI&8|V=owSvPwu6Qo9fOfAP{|R7sNGIE&JPGaua63omns7aT<=@!>U zeggh-VpKQbjdpD>$rgR(k$wShrDqelC9cR1iL`*OuZnBG4!!ui)^vyy82vPaKZq6u zu6yAw;VW6L3Els`TCM^Hl4@Q*p^092_n0bl%J|oHACp8HUI)CgzdDo-@omSsUhtkO z!?gZM2-n!bv1@0W!lBtwaDMSiyU26eJsK7CnJux;j1eM?RiG$N5i=HL#GA|f3i3y8 zM+c+DcsFj$eV~YJM^M{p7F2SQgQP|8v#IiU_!-$&%6-{I5`Bf>ic202)M)klJFn73#V%}Z~Z;Nb^|Mx`i1d`?E3$sXW~6vAA;E;S*iF zK3hO>_(DFJYC~F)cd|OU94`PGnHYWixX@z&q2z5w+1y8P@QHX!XFx9;Po>-B2kCe~ zJC?1tu<8IRy(6-n=Oom$XbGfD07=pOZMMfDMt$~cdbFG!#9Bbv5$g&{H5he4r>*Md z&B$jJ9)w&B_>n(a`bz3gsz{Dt$4(Y$TzSn>Pz>9-Fab*}r3sy$9kGzm3TP?*$Kfu) zr4*a(PLxp$?*U8G)>E6O4bbT;+{|b}WC=zAWVhG^1PrFB%SA1HPq_!%+(!@@=xSQ~ zE_y+N?VIu&A?21c!3c0jnZ1;o@Xr^N)s#*)AA=dBWx=SykI0P z*g&mh;Nn$(J$u#H@!0S^={TLK`4qMj%kE3#o7MfHf|Y9l<r-mxb^SY|mz(@_x z+0))9&EvQ6m$*{=4cT#rfKE8m%jT0tKJyaeY&h=V_TaNrj6VO?#n!gQ1=e_&S?XGk zL-3^F@eP+5?jgi7^|~_6Lsy%ZN2F)5QL6JwJC#{fb94K#(z&EVTyOEo6zmh5mGP-y zG_i<76X$DJ1}!Ffb`Ny%S;wi z$wVypz6nxil8);%aLXNhs5DTjp;N5J?27tyoJ1ul|Fg1uy=}SUcjM#jr;!dPPsM!hd07UBZY*@{fWQWlPx16HymcjGUg-2JaTiaNa}bB2XJ?Ka|*iM)~^!(3ZJP}9i@kq9SW zW>BR$>_{g`%~Y|P3-3oGrO*9b%r1?q>Mvg_c}Yik3y#9NByG}qs;^h8mnaI+tygAq z+$O=<8M<8XPpzvtk29-E)pD47f;zsxX4;^HSgf@Ah8IZKNU6Rz2|^6ao_u}x1A3gh z=h^K-Aw0?%xlI_idk`{9N;9KSXFAk<&(QI~B7We^&PsohGsesFXI?LR=KTpxtOnE% zdJXr#yw<4Ycvn}RX)867zq$Zzy-}w#YqtX#n_md>|Jr`+Ae_E$g4MRiI85@ZY!tld zB=DjN-`cm1q2vsA0%K4nx{^fB@)978!`fu4Qy2v`@%rUMi;QGQ za0O)jN@9`Wm|l4d`OJz6<>>SBXR8pZxps+e!r~>>*hrmzQn1m1c)7Tqic1eu`-&#GJ<6KON#xpQA$|K$NBvbBJl23g1CZ#AH0+16{ zoC_fmm7VZ?(|#Ftc!HB_Bq)$L_KGS;-#`eb{u)#E%+$Ptf;nCSBRS^Pur>7QvzcjEwYUT<^(`N(Q(u`&Cl1bjuI8Mr zRm-QXn$>4{bju`tMcOt)=og75RCaW@HDbr?5gk2$9lA7p`5K5O#3sT^y|35TR$m38 zW7^VxMe}_!Z1n318~q8@GkuChBYK0Spc5+}ZS1H}92A1MY7&&_o*!#0lI&x@95*T< zlh0efIF=k#1xoEW%pY)VMlYh4$?K2Q%kOtjd_KILzIz8m$d+Z`i-vxZgPpeCG`^#Z zj?x3p7W^VEj>*rP!;A%$VQ2}Z)%<=i^c6_oc-%+gLh;7&`k4&OkL@2J3Zx_ZAv;HB zlyj`R%BZh}ofhZlAIL|fb|mW4E7Ok&GmThNa_6Y` zaQ+lj9gd4PU^U~Si!Z7U)ZIY7$n~wC=zB^Ox;Le4l$6<^IAET8g;#|t61qW)De;J6 zHfq#}16O4`J~OK?VkK{;thd(^#tT%>N>85+2ETp4IGxT5bd_P zΜM&X+u=@)Lb&h#~8H@wfMw4dUNWhW5<&Laru`bYPQIQ%8zd8#&$B1elxF3ukyT zpQ5_HJ#GEW92{$%N`$}eP}%TypfGSEQ#x-^%AGsc2C!qr%$LpFuY|u)U6Jf(Tr9~j zT2;WF`;JaFl9O1!AV*4AdpxLOwx|X79#lkow>{`-673rz!;CIi$s10ch;y5K=8oOT z>M!33goZf<)YD}ZA2uB52kUmRi_fvixOpFFvc3{scId=y7O8QhKT_JL(Tn_G;h@y5 zS<~T15+1#5LswSZZM4VtVwc8*z{sP9NuLKcZ&{_PA+uW*AeZAjbXpA%l$qI9!ql*& zh&0+KqDZdtH@M%Lh%&fb$_|D96gP9c9W}+XvmDlym~n08Ky)93N~VN$l?_{w_3_unn8&_77y=b5!?ei)UCzitu!B&t|Y^I%x0 zN22qTs29gmV)I~p0%6z7O-tx@!tHr3oSiQ-ds#1B`Bz~V(wbX&ZiR1W{ zW-S@zHXQHp=O}KJ;zxZJ$AkK>`?FSKHj-6=wURE0-Mr0RO&vKHD(r?+t!+m|PrrO5 z9EJLkKb8?OF^L4D#j2L=ysK}1)u2ovee6N;S^-zwvSp<5`C-#583XLwuM`;dkkFnR zg?GnvkA4WqMX!xyANA|qJXv(JXWq!|;FG(JBfk#5g;DdYuKdE(Rztgo1GxKfsWFtL zNb6{rM*{%vHXQ&Rz!d~>1ld9P5Kwn77zB#obB20=Y(O3$J_y_$%H!$|cZIrpz>p{S zp5{1PtyX$tb|f&j^INK;Sko7duHtPY+ujF-B=Ai92!aKed5Kj0-~C1|rF5 z@8RJp&d2BK>F&e}cemrSf$%|{pw3Vi4+Nh8uK*w8pJP3s?#_t+2>5;G&yhX|*q@`k zy}fz8g?74L8sZ z>Vo_e0tC6(06pxXaCcvz2NdCf#3K*D5I|2Pmn>+Qp(%}Yz+@U}ak`U+t z2SR0%erx{Ty(5DnW!>R+NVlDlC504(J0a=y?;!t32oUB1aq>h469{*4x-%7u zbOsqEZ@9bT@Ax@`oqTzLCU8%nH_XWi=mJG@A`Smt0?7S8o#xg3BO-qid%8G55eT3! z5_#vbC*sZm(4D>RHavI1@cl;+d4K2j-}8BwUziQjUzjZn>i$Q1e-HY%gA)IkHd4qS z@d`@t{d4yY>jZMK^F&T$DX0sNf!=TApNAwIp}t7xY!Fg+0s5Ws-=VRw`8UV^T0cl1 z?~23K$X_?~e)p|2-igf7rz1ac2{97Ain(L7q+?K*c|*|E@V9OAf&Z{D<*( zT9S+)S63$(1avnA`Mg|g{xOV literal 0 HcmV?d00001 diff --git a/packages/NUnit.2.6.2/NUnit.2.6.2.nuspec b/packages/NUnit.2.6.2/NUnit.2.6.2.nuspec new file mode 100644 index 0000000..1632087 --- /dev/null +++ b/packages/NUnit.2.6.2/NUnit.2.6.2.nuspec @@ -0,0 +1,27 @@ + + + + NUnit + 2.6.2 + NUnit + Charlie Poole + Charlie Poole + http://nunit.org/nuget/license.html + http://nunit.org/ + http://nunit.org/nuget/nunit_32x32.png + false + NUnit features a fluent assert syntax, parameterized, generic and theory tests and is user-extensible. A number of runners, both from the NUnit project and by third parties, are able to execute NUnit tests. + +Version 2.6 is the seventh major release of this well-known and well-tested programming tool. + +This package includes only the framework assembly. You will need to install the NUnit.Runners package unless you are using a third-party runner. + NUnit is a unit-testing framework for all .Net languages with a strong TDD focus. + Version 2.6 is the seventh major release of NUnit. + +Unlike earlier versions, this package includes only the framework assembly. You will need to install the NUnit.Runners package unless you are using a third-party runner. + +The nunit.mocks assembly is now provided by the NUnit.Mocks package. The pnunit.framework assembly is provided by the pNUnit package. + en-US + test testing tdd framework fluent assert theory plugin addin + + \ No newline at end of file diff --git a/packages/NUnit.2.6.2/lib/nunit.framework.dll b/packages/NUnit.2.6.2/lib/nunit.framework.dll new file mode 100644 index 0000000000000000000000000000000000000000..3e24ba1ca6260d7d0499624d13d2c5a2cd75b52a GIT binary patch literal 147456 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 W^f}PyK%WDB4)i(D=fM9-4*U=F(vzP6 literal 0 HcmV?d00001 diff --git a/packages/NUnit.2.6.2/lib/nunit.framework.xml b/packages/NUnit.2.6.2/lib/nunit.framework.xml new file mode 100644 index 0000000..c0bd9cb --- /dev/null +++ b/packages/NUnit.2.6.2/lib/nunit.framework.xml @@ -0,0 +1,10899 @@ + + + + nunit.framework + + + +

+ Attribute used to apply a category to a test + + + + + The name of the category + + + + + Construct attribute for a given category based on + a name. The name may not contain the characters ',', + '+', '-' or '!'. However, this is not checked in the + constructor since it would cause an error to arise at + as the test was loaded without giving a clear indication + of where the problem is located. The error is handled + in NUnitFramework.cs by marking the test as not + runnable. + + The name of the category + + + + Protected constructor uses the Type name as the name + of the category. + + + + + The name of the category + + + + + Used to mark a field for use as a datapoint when executing a theory + within the same fixture that requires an argument of the field's Type. + + + + + Used to mark an array as containing a set of datapoints to be used + executing a theory within the same fixture that requires an argument + of the Type of the array elements. + + + + + Attribute used to provide descriptive text about a + test case or fixture. + + + + + Construct the attribute + + Text describing the test + + + + Gets the test description + + + + + Enumeration indicating how the expected message parameter is to be used + + + + Expect an exact match + + + Expect a message containing the parameter string + + + Match the regular expression provided as a parameter + + + Expect a message that starts with the parameter string + + + + ExpectedExceptionAttribute + + + + + + Constructor for a non-specific exception + + + + + Constructor for a given type of exception + + The type of the expected exception + + + + Constructor for a given exception name + + The full name of the expected exception + + + + Gets or sets the expected exception type + + + + + Gets or sets the full Type name of the expected exception + + + + + Gets or sets the expected message text + + + + + Gets or sets the user message displayed in case of failure + + + + + Gets or sets the type of match to be performed on the expected message + + + + + Gets the name of a method to be used as an exception handler + + + + + ExplicitAttribute marks a test or test fixture so that it will + only be run if explicitly executed from the gui or command line + or if it is included by use of a filter. The test will not be + run simply because an enclosing suite is run. + + + + + Default constructor + + + + + Constructor with a reason + + The reason test is marked explicit + + + + The reason test is marked explicit + + + + + Attribute used to mark a test that is to be ignored. + Ignored tests result in a warning message when the + tests are run. + + + + + Constructs the attribute without giving a reason + for ignoring the test. + + + + + Constructs the attribute giving a reason for ignoring the test + + The reason for ignoring the test + + + + The reason for ignoring a test + + + + + Abstract base for Attributes that are used to include tests + in the test run based on environmental settings. + + + + + Constructor with no included items specified, for use + with named property syntax. + + + + + Constructor taking one or more included items + + Comma-delimited list of included items + + + + Name of the item that is needed in order for + a test to run. Multiple itemss may be given, + separated by a comma. + + + + + Name of the item to be excluded. Multiple items + may be given, separated by a comma. + + + + + The reason for including or excluding the test + + + + + PlatformAttribute is used to mark a test fixture or an + individual method as applying to a particular platform only. + + + + + Constructor with no platforms specified, for use + with named property syntax. + + + + + Constructor taking one or more platforms + + Comma-deliminted list of platforms + + + + CultureAttribute is used to mark a test fixture or an + individual method as applying to a particular Culture only. + + + + + Constructor with no cultures specified, for use + with named property syntax. + + + + + Constructor taking one or more cultures + + Comma-deliminted list of cultures + + + + Marks a test to use a combinatorial join of any argument data + provided. NUnit will create a test case for every combination of + the arguments provided. This can result in a large number of test + cases and so should be used judiciously. This is the default join + type, so the attribute need not be used except as documentation. + + + + + PropertyAttribute is used to attach information to a test as a name/value pair.. + + + + + Construct a PropertyAttribute with a name and string value + + The name of the property + The property value + + + + Construct a PropertyAttribute with a name and int value + + The name of the property + The property value + + + + Construct a PropertyAttribute with a name and double value + + The name of the property + The property value + + + + Constructor for derived classes that set the + property dictionary directly. + + + + + Constructor for use by derived classes that use the + name of the type as the property name. Derived classes + must ensure that the Type of the property value is + a standard type supported by the BCL. Any custom + types will cause a serialization Exception when + in the client. + + + + + Gets the property dictionary for this attribute + + + + + Default constructor + + + + + Marks a test to use pairwise join of any argument data provided. + NUnit will attempt too excercise every pair of argument values at + least once, using as small a number of test cases as it can. With + only two arguments, this is the same as a combinatorial join. + + + + + Default constructor + + + + + Marks a test to use a sequential join of any argument data + provided. NUnit will use arguements for each parameter in + sequence, generating test cases up to the largest number + of argument values provided and using null for any arguments + for which it runs out of values. Normally, this should be + used with the same number of arguments for each parameter. + + + + + Default constructor + + + + + Summary description for MaxTimeAttribute. + + + + + Construct a MaxTimeAttribute, given a time in milliseconds. + + The maximum elapsed time in milliseconds + + + + RandomAttribute is used to supply a set of random values + to a single parameter of a parameterized test. + + + + + ValuesAttribute is used to provide literal arguments for + an individual parameter of a test. + + + + + Abstract base class for attributes that apply to parameters + and supply data for the parameter. + + + + + Gets the data to be provided to the specified parameter + + + + + The collection of data to be returned. Must + be set by any derived attribute classes. + We use an object[] so that the individual + elements may have their type changed in GetData + if necessary. + + + + + Construct with one argument + + + + + + Construct with two arguments + + + + + + + Construct with three arguments + + + + + + + + Construct with an array of arguments + + + + + + Get the collection of values to be used as arguments + + + + + Construct a set of doubles from 0.0 to 1.0, + specifying only the count. + + + + + + Construct a set of doubles from min to max + + + + + + + + Construct a set of ints from min to max + + + + + + + + Get the collection of values to be used as arguments + + + + + RangeAttribute is used to supply a range of values to an + individual parameter of a parameterized test. + + + + + Construct a range of ints using default step of 1 + + + + + + + Construct a range of ints specifying the step size + + + + + + + + Construct a range of longs + + + + + + + + Construct a range of doubles + + + + + + + + Construct a range of floats + + + + + + + + RepeatAttribute may be applied to test case in order + to run it multiple times. + + + + + Construct a RepeatAttribute + + The number of times to run the test + + + + RequiredAddinAttribute may be used to indicate the names of any addins + that must be present in order to run some or all of the tests in an + assembly. If the addin is not loaded, the entire assembly is marked + as NotRunnable. + + + + + Initializes a new instance of the class. + + The required addin. + + + + Gets the name of required addin. + + The required addin name. + + + + Summary description for SetCultureAttribute. + + + + + Construct given the name of a culture + + + + + + Summary description for SetUICultureAttribute. + + + + + Construct given the name of a culture + + + + + + SetUpAttribute is used in a TestFixture to identify a method + that is called immediately before each test is run. It is + also used in a SetUpFixture to identify the method that is + called once, before any of the subordinate tests are run. + + + + + Attribute used to mark a class that contains one-time SetUp + and/or TearDown methods that apply to all the tests in a + namespace or an assembly. + + + + + Attribute used to mark a static (shared in VB) property + that returns a list of tests. + + + + + Attribute used in a TestFixture to identify a method that is + called immediately after each test is run. It is also used + in a SetUpFixture to identify the method that is called once, + after all subordinate tests have run. In either case, the method + is guaranteed to be called, even if an exception is thrown. + + + + + Provide actions to execute before and after tests. + + + + + When implemented by an attribute, this interface implemented to provide actions to execute before and after tests. + + + + + Executed before each test is run + + Provides details about the test that is going to be run. + + + + Executed after each test is run + + Provides details about the test that has just been run. + + + + Provides the target for the action attribute + + The target for the action attribute + + + + Adding this attribute to a method within a + class makes the method callable from the NUnit test runner. There is a property + called Description which is optional which you can provide a more detailed test + description. This class cannot be inherited. + + + + [TestFixture] + public class Fixture + { + [Test] + public void MethodToTest() + {} + + [Test(Description = "more detailed description")] + publc void TestDescriptionMethod() + {} + } + + + + + + Descriptive text for this test + + + + + TestCaseAttribute is used to mark parameterized test cases + and provide them with their arguments. + + + + + The ITestCaseData interface is implemented by a class + that is able to return complete testcases for use by + a parameterized test method. + + NOTE: This interface is used in both the framework + and the core, even though that results in two different + types. However, sharing the source code guarantees that + the various implementations will be compatible and that + the core is able to reflect successfully over the + framework implementations of ITestCaseData. + + + + + Gets the argument list to be provided to the test + + + + + Gets the expected result + + + + + Indicates whether a result has been specified. + This is necessary because the result may be + null, so it's value cannot be checked. + + + + + Gets the expected exception Type + + + + + Gets the FullName of the expected exception + + + + + Gets the name to be used for the test + + + + + Gets the description of the test + + + + + Gets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets a value indicating whether this is explicit. + + true if explicit; otherwise, false. + + + + Gets the ignore reason. + + The ignore reason. + + + + Construct a TestCaseAttribute with a list of arguments. + This constructor is not CLS-Compliant + + + + + + Construct a TestCaseAttribute with a single argument + + + + + + Construct a TestCaseAttribute with a two arguments + + + + + + + Construct a TestCaseAttribute with a three arguments + + + + + + + + Gets the list of arguments to a test case + + + + + Gets or sets the expected result. Use + ExpectedResult by preference. + + The result. + + + + Gets or sets the expected result. + + The result. + + + + Gets a flag indicating whether an expected + result has been set. + + + + + Gets a list of categories associated with this test; + + + + + Gets or sets the category associated with this test. + May be a single category or a comma-separated list. + + + + + Gets or sets the expected exception. + + The expected exception. + + + + Gets or sets the name the expected exception. + + The expected name of the exception. + + + + Gets or sets the expected message of the expected exception + + The expected message of the exception. + + + + Gets or sets the type of match to be performed on the expected message + + + + + Gets or sets the description. + + The description. + + + + Gets or sets the name of the test. + + The name of the test. + + + + Gets or sets the ignored status of the test + + + + + Gets or sets the ignored status of the test + + + + + Gets or sets the explicit status of the test + + + + + Gets or sets the reason for not running the test + + + + + Gets or sets the reason for not running the test. + Set has the side effect of marking the test as ignored. + + The ignore reason. + + + + FactoryAttribute indicates the source to be used to + provide test cases for a test method. + + + + + Construct with the name of the data source, which must + be a property, field or method of the test class itself. + + An array of the names of the factories that will provide data + + + + Construct with a Type, which must implement IEnumerable + + The Type that will provide data + + + + Construct with a Type and name. + that don't support params arrays. + + The Type that will provide data + The name of the method, property or field that will provide data + + + + The name of a the method, property or fiend to be used as a source + + + + + A Type to be used as a source + + + + + Gets or sets the category associated with this test. + May be a single category or a comma-separated list. + + + + + [TestFixture] + public class ExampleClass + {} + + + + + Default constructor + + + + + Construct with a object[] representing a set of arguments. + In .NET 2.0, the arguments may later be separated into + type arguments and constructor arguments. + + + + + + Descriptive text for this fixture + + + + + Gets and sets the category for this fixture. + May be a comma-separated list of categories. + + + + + Gets a list of categories for this fixture + + + + + The arguments originally provided to the attribute + + + + + Gets or sets a value indicating whether this should be ignored. + + true if ignore; otherwise, false. + + + + Gets or sets the ignore reason. May set Ignored as a side effect. + + The ignore reason. + + + + Get or set the type arguments. If not set + explicitly, any leading arguments that are + Types are taken as type arguments. + + + + + Attribute used to identify a method that is + called before any tests in a fixture are run. + + + + + Attribute used to identify a method that is called after + all the tests in a fixture have run. The method is + guaranteed to be called, even if an exception is thrown. + + + + + Adding this attribute to a method within a + class makes the method callable from the NUnit test runner. There is a property + called Description which is optional which you can provide a more detailed test + description. This class cannot be inherited. + + + + [TestFixture] + public class Fixture + { + [Test] + public void MethodToTest() + {} + + [Test(Description = "more detailed description")] + publc void TestDescriptionMethod() + {} + } + + + + + + Used on a method, marks the test with a timeout value in milliseconds. + The test will be run in a separate thread and is cancelled if the timeout + is exceeded. Used on a method or assembly, sets the default timeout + for all contained test methods. + + + + + Construct a TimeoutAttribute given a time in milliseconds + + The timeout value in milliseconds + + + + Marks a test that must run in the STA, causing it + to run in a separate thread if necessary. + + On methods, you may also use STAThreadAttribute + to serve the same purpose. + + + + + Construct a RequiresSTAAttribute + + + + + Marks a test that must run in the MTA, causing it + to run in a separate thread if necessary. + + On methods, you may also use MTAThreadAttribute + to serve the same purpose. + + + + + Construct a RequiresMTAAttribute + + + + + Marks a test that must run on a separate thread. + + + + + Construct a RequiresThreadAttribute + + + + + Construct a RequiresThreadAttribute, specifying the apartment + + + + + ValueSourceAttribute indicates the source to be used to + provide data for one parameter of a test method. + + + + + Construct with the name of the factory - for use with languages + that don't support params arrays. + + The name of the data source to be used + + + + Construct with a Type and name - for use with languages + that don't support params arrays. + + The Type that will provide data + The name of the method, property or field that will provide data + + + + The name of a the method, property or fiend to be used as a source + + + + + A Type to be used as a source + + + + + AttributeExistsConstraint tests for the presence of a + specified attribute on a Type. + + + + + The Constraint class is the base of all built-in constraints + within NUnit. It provides the operator overloads used to combine + constraints. + + + + + The IConstraintExpression interface is implemented by all + complete and resolvable constraints and expressions. + + + + + Return the top-level constraint for this expression + + + + + + Static UnsetObject used to detect derived constraints + failing to set the actual value. + + + + + The actual value being tested against a constraint + + + + + The display name of this Constraint for use by ToString() + + + + + Argument fields used by ToString(); + + + + + The builder holding this constraint + + + + + Construct a constraint with no arguments + + + + + Construct a constraint with one argument + + + + + Construct a constraint with two arguments + + + + + Sets the ConstraintBuilder holding this constraint + + + + + Write the failure message to the MessageWriter provided + as an argument. The default implementation simply passes + the constraint and the actual value to the writer, which + then displays the constraint description and the value. + + Constraints that need to provide additional details, + such as where the error occured can override this. + + The MessageWriter on which to display the message + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Test whether the constraint is satisfied by an + ActualValueDelegate that returns the value to be tested. + The default implementation simply evaluates the delegate + but derived classes may override it to provide for delayed + processing. + + An ActualValueDelegate + True for success, false for failure + + + + Test whether the constraint is satisfied by a given reference. + The default implementation simply dereferences the value but + derived classes may override it to provide for delayed processing. + + A reference to the value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Default override of ToString returns the constraint DisplayName + followed by any arguments within angle brackets. + + + + + + Returns the string representation of this constraint + + + + + This operator creates a constraint that is satisfied only if both + argument constraints are satisfied. + + + + + This operator creates a constraint that is satisfied if either + of the argument constraints is satisfied. + + + + + This operator creates a constraint that is satisfied if the + argument constraint is not satisfied. + + + + + Returns a DelayedConstraint with the specified delay time. + + The delay in milliseconds. + + + + + Returns a DelayedConstraint with the specified delay time + and polling interval. + + The delay in milliseconds. + The interval at which to test the constraint. + + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + Returns a ConstraintExpression by appending And + to the current constraint. + + + + + Returns a ConstraintExpression by appending And + to the current constraint. + + + + + Returns a ConstraintExpression by appending Or + to the current constraint. + + + + + Class used to detect any derived constraints + that fail to set the actual value in their + Matches override. + + + + + Constructs an AttributeExistsConstraint for a specific attribute Type + + + + + + Tests whether the object provides the expected attribute. + + A Type, MethodInfo, or other ICustomAttributeProvider + True if the expected attribute is present, otherwise false + + + + Writes the description of the constraint to the specified writer + + + + + AttributeConstraint tests that a specified attribute is present + on a Type or other provider and that the value of the attribute + satisfies some other constraint. + + + + + Abstract base class used for prefixes + + + + + The base constraint + + + + + Construct given a base constraint + + + + + + Constructs an AttributeConstraint for a specified attriute + Type and base constraint. + + + + + + + Determines whether the Type or other provider has the + expected attribute and if its value matches the + additional constraint specified. + + + + + Writes a description of the attribute to the specified writer. + + + + + Writes the actual value supplied to the specified writer. + + + + + Returns a string representation of the constraint. + + + + + BasicConstraint is the abstract base for constraints that + perform a simple comparison to a constant value. + + + + + Initializes a new instance of the class. + + The expected. + The description. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + NullConstraint tests that the actual value is null + + + + + Initializes a new instance of the class. + + + + + TrueConstraint tests that the actual value is true + + + + + Initializes a new instance of the class. + + + + + FalseConstraint tests that the actual value is false + + + + + Initializes a new instance of the class. + + + + + NaNConstraint tests that the actual value is a double or float NaN + + + + + Test that the actual value is an NaN + + + + + + + Write the constraint description to a specified writer + + + + + + BinaryConstraint is the abstract base of all constraints + that combine two other constraints in some fashion. + + + + + The first constraint being combined + + + + + The second constraint being combined + + + + + Construct a BinaryConstraint from two other constraints + + The first constraint + The second constraint + + + + AndConstraint succeeds only if both members succeed. + + + + + Create an AndConstraint from two other constraints + + The first constraint + The second constraint + + + + Apply both member constraints to an actual value, succeeding + succeeding only if both of them succeed. + + The actual value + True if the constraints both succeeded + + + + Write a description for this contraint to a MessageWriter + + The MessageWriter to receive the description + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + OrConstraint succeeds if either member succeeds + + + + + Create an OrConstraint from two other constraints + + The first constraint + The second constraint + + + + Apply the member constraints to an actual value, succeeding + succeeding as soon as one of them succeeds. + + The actual value + True if either constraint succeeded + + + + Write a description for this contraint to a MessageWriter + + The MessageWriter to receive the description + + + + CollectionConstraint is the abstract base class for + constraints that operate on collections. + + + + + Construct an empty CollectionConstraint + + + + + Construct a CollectionConstraint + + + + + + Determines whether the specified enumerable is empty. + + The enumerable. + + true if the specified enumerable is empty; otherwise, false. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Protected method to be implemented by derived classes + + + + + + + CollectionItemsEqualConstraint is the abstract base class for all + collection constraints that apply some notion of item equality + as a part of their operation. + + + + + Construct an empty CollectionConstraint + + + + + Construct a CollectionConstraint + + + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Compares two collection members for equality + + + + + Return a new CollectionTally for use in making tests + + The collection to be included in the tally + + + + Flag the constraint to ignore case and return self. + + + + + EmptyCollectionConstraint tests whether a collection is empty. + + + + + Check that the collection is empty + + + + + + + Write the constraint description to a MessageWriter + + + + + + UniqueItemsConstraint tests whether all the items in a + collection are unique. + + + + + Check that all items are unique. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionContainsConstraint is used to test whether a collection + contains an expected object as a member. + + + + + Construct a CollectionContainsConstraint + + + + + + Test whether the expected item is contained in the collection + + + + + + + Write a descripton of the constraint to a MessageWriter + + + + + + CollectionEquivalentCOnstraint is used to determine whether two + collections are equivalent. + + + + + Construct a CollectionEquivalentConstraint + + + + + + Test whether two collections are equivalent + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionSubsetConstraint is used to determine whether + one collection is a subset of another + + + + + Construct a CollectionSubsetConstraint + + The collection that the actual value is expected to be a subset of + + + + Test whether the actual collection is a subset of + the expected collection provided. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionOrderedConstraint is used to test whether a collection is ordered. + + + + + Construct a CollectionOrderedConstraint + + + + + Modifies the constraint to use an IComparer and returns self. + + + + + Modifies the constraint to use an IComparer<T> and returns self. + + + + + Modifies the constraint to use a Comparison<T> and returns self. + + + + + Modifies the constraint to test ordering by the value of + a specified property and returns self. + + + + + Test whether the collection is ordered + + + + + + + Write a description of the constraint to a MessageWriter + + + + + + Returns the string representation of the constraint. + + + + + + If used performs a reverse comparison + + + + + CollectionTally counts (tallies) the number of + occurences of each object in one or more enumerations. + + + + + Construct a CollectionTally object from a comparer and a collection + + + + + Try to remove an object from the tally + + The object to remove + True if successful, false if the object was not found + + + + Try to remove a set of objects from the tally + + The objects to remove + True if successful, false if any object was not found + + + + The number of objects remaining in the tally + + + + + ComparisonAdapter class centralizes all comparisons of + values in NUnit, adapting to the use of any provided + IComparer, IComparer<T> or Comparison<T> + + + + + Returns a ComparisonAdapter that wraps an IComparer + + + + + Returns a ComparisonAdapter that wraps an IComparer<T> + + + + + Returns a ComparisonAdapter that wraps a Comparison<T> + + + + + Compares two objects + + + + + Gets the default ComparisonAdapter, which wraps an + NUnitComparer object. + + + + + Construct a ComparisonAdapter for an IComparer + + + + + Compares two objects + + + + + + + + Construct a default ComparisonAdapter + + + + + ComparisonAdapter<T> extends ComparisonAdapter and + allows use of an IComparer<T> or Comparison<T> + to actually perform the comparison. + + + + + Construct a ComparisonAdapter for an IComparer<T> + + + + + Compare a Type T to an object + + + + + Construct a ComparisonAdapter for a Comparison<T> + + + + + Compare a Type T to an object + + + + + Abstract base class for constraints that compare values to + determine if one is greater than, equal to or less than + the other. This class supplies the Using modifiers. + + + + + ComparisonAdapter to be used in making the comparison + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Modifies the constraint to use an IComparer and returns self + + + + + Modifies the constraint to use an IComparer<T> and returns self + + + + + Modifies the constraint to use a Comparison<T> and returns self + + + + + Delegate used to delay evaluation of the actual value + to be used in evaluating a constraint + + + + + ConstraintBuilder maintains the stacks that are used in + processing a ConstraintExpression. An OperatorStack + is used to hold operators that are waiting for their + operands to be reognized. a ConstraintStack holds + input constraints as well as the results of each + operator applied. + + + + + Initializes a new instance of the class. + + + + + Appends the specified operator to the expression by first + reducing the operator stack and then pushing the new + operator on the stack. + + The operator to push. + + + + Appends the specified constraint to the expresson by pushing + it on the constraint stack. + + The constraint to push. + + + + Sets the top operator right context. + + The right context. + + + + Reduces the operator stack until the topmost item + precedence is greater than or equal to the target precedence. + + The target precedence. + + + + Resolves this instance, returning a Constraint. If the builder + is not currently in a resolvable state, an exception is thrown. + + The resolved constraint + + + + Gets a value indicating whether this instance is resolvable. + + + true if this instance is resolvable; otherwise, false. + + + + + OperatorStack is a type-safe stack for holding ConstraintOperators + + + + + Initializes a new instance of the class. + + The builder. + + + + Pushes the specified operator onto the stack. + + The op. + + + + Pops the topmost operator from the stack. + + + + + + Gets a value indicating whether this is empty. + + true if empty; otherwise, false. + + + + Gets the topmost operator without modifying the stack. + + The top. + + + + ConstraintStack is a type-safe stack for holding Constraints + + + + + Initializes a new instance of the class. + + The builder. + + + + Pushes the specified constraint. As a side effect, + the constraint's builder field is set to the + ConstraintBuilder owning this stack. + + The constraint. + + + + Pops this topmost constrait from the stack. + As a side effect, the constraint's builder + field is set to null. + + + + + + Gets a value indicating whether this is empty. + + true if empty; otherwise, false. + + + + Gets the topmost constraint without modifying the stack. + + The topmost constraint + + + + ConstraintExpression represents a compound constraint in the + process of being constructed from a series of syntactic elements. + + Individual elements are appended to the expression as they are + reognized. Once an actual Constraint is appended, the expression + returns a resolvable Constraint. + + + + + ConstraintExpressionBase is the abstract base class for the + ConstraintExpression class, which represents a + compound constraint in the process of being constructed + from a series of syntactic elements. + + NOTE: ConstraintExpressionBase is separate because the + ConstraintExpression class was generated in earlier + versions of NUnit. The two classes may be combined + in a future version. + + + + + The ConstraintBuilder holding the elements recognized so far + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class passing in a ConstraintBuilder, which may be pre-populated. + + The builder. + + + + Returns a string representation of the expression as it + currently stands. This should only be used for testing, + since it has the side-effect of resolving the expression. + + + + + + Appends an operator to the expression and returns the + resulting expression itself. + + + + + Appends a self-resolving operator to the expression and + returns a new ResolvableConstraintExpression. + + + + + Appends a constraint to the expression and returns that + constraint, which is associated with the current state + of the expression being built. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class passing in a ConstraintBuilder, which may be pre-populated. + + The builder. + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding only if a specified number of them succeed. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns the constraint provided as an argument - used to allow custom + custom constraints to easily participate in the syntax. + + + + + Returns the constraint provided as an argument - used to allow custom + custom constraints to easily participate in the syntax. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new ContainsConstraint. This constraint + will, in turn, make use of the appropriate second-level + constraint, depending on the type of the actual argument. + This overload is only used if the item sought is a string, + since any other type implies that we are looking for a + collection member. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + With is currently a NOP - reserved for future use. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for a positive value + + + + + Returns a constraint that tests for a negative value + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding only if a specified number of them succeed. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new ContainsConstraint. This constraint + will, in turn, make use of the appropriate second-level + constraint, depending on the type of the actual argument. + This overload is only used if the item sought is a string, + since any other type implies that we are looking for a + collection member. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that fails if the actual + value matches the pattern supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for a positive value + + + + + Returns a constraint that tests for a negative value + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + The ConstraintOperator class is used internally by a + ConstraintBuilder to represent an operator that + modifies or combines constraints. + + Constraint operators use left and right precedence + values to determine whether the top operator on the + stack should be reduced before pushing a new operator. + + + + + The precedence value used when the operator + is about to be pushed to the stack. + + + + + The precedence value used when the operator + is on the top of the stack. + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + The syntax element preceding this operator + + + + + The syntax element folowing this operator + + + + + The precedence value used when the operator + is about to be pushed to the stack. + + + + + The precedence value used when the operator + is on the top of the stack. + + + + + PrefixOperator takes a single constraint and modifies + it's action in some way. + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Returns the constraint created by applying this + prefix to another constraint. + + + + + + + Negates the test of the constraint it wraps. + + + + + Constructs a new NotOperator + + + + + Returns a NotConstraint applied to its argument. + + + + + Abstract base for operators that indicate how to + apply a constraint to items in a collection. + + + + + Constructs a CollectionOperator + + + + + Represents a constraint that succeeds if all the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + they all succeed. + + + + + Represents a constraint that succeeds if any of the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + any of them succeed. + + + + + Represents a constraint that succeeds if none of the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + none of them succeed. + + + + + Represents a constraint that succeeds if the specified + count of members of a collection match a base constraint. + + + + + Construct an ExactCountOperator for a specified count + + The expected count + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + none of them succeed. + + + + + Represents a constraint that simply wraps the + constraint provided as an argument, without any + further functionality, but which modifes the + order of evaluation because of its precedence. + + + + + Constructor for the WithOperator + + + + + Returns a constraint that wraps its argument + + + + + Abstract base class for operators that are able to reduce to a + constraint whether or not another syntactic element follows. + + + + + Operator used to test for the presence of a named Property + on an object and optionally apply further tests to the + value of that property. + + + + + Constructs a PropOperator for a particular named property + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Gets the name of the property to which the operator applies + + + + + Operator that tests for the presence of a particular attribute + on a type and optionally applies further tests to the attribute. + + + + + Construct an AttributeOperator for a particular Type + + The Type of attribute tested + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + Operator that tests that an exception is thrown and + optionally applies further tests to the exception. + + + + + Construct a ThrowsOperator + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + Abstract base class for all binary operators + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Abstract method that produces a constraint by applying + the operator to its left and right constraint arguments. + + + + + Gets the left precedence of the operator + + + + + Gets the right precedence of the operator + + + + + Operator that requires both it's arguments to succeed + + + + + Construct an AndOperator + + + + + Apply the operator to produce an AndConstraint + + + + + Operator that requires at least one of it's arguments to succeed + + + + + Construct an OrOperator + + + + + Apply the operator to produce an OrConstraint + + + + + ContainsConstraint tests a whether a string contains a substring + or a collection contains an object. It postpones the decision of + which test to use until the type of the actual argument is known. + This allows testing whether a string is contained in a collection + or as a substring of another string using the same syntax. + + + + + Initializes a new instance of the class. + + The expected. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to ignore case and return self. + + + + + Applies a delay to the match so that a match can be evaluated in the future. + + + + + Creates a new DelayedConstraint + + The inner constraint two decorate + The time interval after which the match is performed + If the value of is less than 0 + + + + Creates a new DelayedConstraint + + The inner constraint two decorate + The time interval after which the match is performed + The time interval used for polling + If the value of is less than 0 + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for if the base constraint fails, false if it succeeds + + + + Test whether the constraint is satisfied by a delegate + + The delegate whose value is to be tested + True for if the base constraint fails, false if it succeeds + + + + Test whether the constraint is satisfied by a given reference. + Overridden to wait for the specified delay period before + calling the base constraint with the dereferenced value. + + A reference to the value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a MessageWriter. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + + EmptyDirectoryConstraint is used to test that a directory is empty + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + EmptyConstraint tests a whether a string or collection is empty, + postponing the decision about which test is applied until the + type of the actual argument is known. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + EqualConstraint is able to compare an actual value with the + expected value provided in its constructor. Two objects are + considered equal if both are null, or if both have the same + value. NUnit has special semantics for some object types. + + + + + If true, strings in error messages will be clipped + + + + + NUnitEqualityComparer used to test equality. + + + + + Initializes a new instance of the class. + + The expected value. + + + + Flag the constraint to use a tolerance when determining equality. + + Tolerance value to be used + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write a failure message. Overridden to provide custom + failure messages for EqualConstraint. + + The MessageWriter to write to + + + + Write description of this constraint + + The MessageWriter to write to + + + + Display the failure information for two collections that did not match. + + The MessageWriter on which to display + The expected collection. + The actual collection + The depth of this failure in a set of nested collections + + + + Displays a single line showing the types and sizes of the expected + and actual enumerations, collections or arrays. If both are identical, + the value is only shown once. + + The MessageWriter on which to display + The expected collection or array + The actual collection or array + The indentation level for the message line + + + + Displays a single line showing the point in the expected and actual + arrays at which the comparison failed. If the arrays have different + structures or dimensions, both values are shown. + + The MessageWriter on which to display + The expected array + The actual array + Index of the failure point in the underlying collections + The indentation level for the message line + + + + Display the failure information for two IEnumerables that did not match. + + The MessageWriter on which to display + The expected enumeration. + The actual enumeration + The depth of this failure in a set of nested collections + + + + Flag the constraint to ignore case and return self. + + + + + Flag the constraint to suppress string clipping + and return self. + + + + + Flag the constraint to compare arrays as collections + and return self. + + + + + Switches the .Within() modifier to interpret its tolerance as + a distance in representable values (see remarks). + + Self. + + Ulp stands for "unit in the last place" and describes the minimum + amount a given value can change. For any integers, an ulp is 1 whole + digit. For floating point values, the accuracy of which is better + for smaller numbers and worse for larger numbers, an ulp depends + on the size of the number. Using ulps for comparison of floating + point results instead of fixed tolerances is safer because it will + automatically compensate for the added inaccuracy of larger numbers. + + + + + Switches the .Within() modifier to interpret its tolerance as + a percentage that the actual values is allowed to deviate from + the expected value. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in days. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in hours. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in minutes. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in seconds. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in milliseconds. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in clock ticks. + + Self + + + + EqualityAdapter class handles all equality comparisons + that use an IEqualityComparer, IEqualityComparer<T> + or a ComparisonAdapter. + + + + + Compares two objects, returning true if they are equal + + + + + Returns true if the two objects can be compared by this adapter. + The base adapter cannot handle IEnumerables except for strings. + + + + + Returns an EqualityAdapter that wraps an IComparer. + + + + + Returns an EqualityAdapter that wraps an IEqualityComparer. + + + + + Returns an EqualityAdapter that wraps an IEqualityComparer<T>. + + + + + Returns an EqualityAdapter that wraps an IComparer<T>. + + + + + Returns an EqualityAdapter that wraps a Comparison<T>. + + + + + EqualityAdapter that wraps an IComparer. + + + + + Returns true if the two objects can be compared by this adapter. + Generic adapter requires objects of the specified type. + + + + + EqualityAdapter that wraps an IComparer. + + + + Helper routines for working with floating point numbers + + + The floating point comparison code is based on this excellent article: + http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm + + + "ULP" means Unit in the Last Place and in the context of this library refers to + the distance between two adjacent floating point numbers. IEEE floating point + numbers can only represent a finite subset of natural numbers, with greater + accuracy for smaller numbers and lower accuracy for very large numbers. + + + If a comparison is allowed "2 ulps" of deviation, that means the values are + allowed to deviate by up to 2 adjacent floating point values, which might be + as low as 0.0000001 for small numbers or as high as 10.0 for large numbers. + + + + + Compares two floating point values for equality + First floating point value to be compared + Second floating point value t be compared + + Maximum number of representable floating point values that are allowed to + be between the left and the right floating point values + + True if both numbers are equal or close to being equal + + + Floating point values can only represent a finite subset of natural numbers. + For example, the values 2.00000000 and 2.00000024 can be stored in a float, + but nothing inbetween them. + + + This comparison will count how many possible floating point values are between + the left and the right number. If the number of possible values between both + numbers is less than or equal to maxUlps, then the numbers are considered as + being equal. + + + Implementation partially follows the code outlined here: + http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ + + + + + Compares two double precision floating point values for equality + First double precision floating point value to be compared + Second double precision floating point value t be compared + + Maximum number of representable double precision floating point values that are + allowed to be between the left and the right double precision floating point values + + True if both numbers are equal or close to being equal + + + Double precision floating point values can only represent a limited series of + natural numbers. For example, the values 2.0000000000000000 and 2.0000000000000004 + can be stored in a double, but nothing inbetween them. + + + This comparison will count how many possible double precision floating point + values are between the left and the right number. If the number of possible + values between both numbers is less than or equal to maxUlps, then the numbers + are considered as being equal. + + + Implementation partially follows the code outlined here: + http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ + + + + + + Reinterprets the memory contents of a floating point value as an integer value + + + Floating point value whose memory contents to reinterpret + + + The memory contents of the floating point value interpreted as an integer + + + + + Reinterprets the memory contents of a double precision floating point + value as an integer value + + + Double precision floating point value whose memory contents to reinterpret + + + The memory contents of the double precision floating point value + interpreted as an integer + + + + + Reinterprets the memory contents of an integer as a floating point value + + Integer value whose memory contents to reinterpret + + The memory contents of the integer value interpreted as a floating point value + + + + + Reinterprets the memory contents of an integer value as a double precision + floating point value + + Integer whose memory contents to reinterpret + + The memory contents of the integer interpreted as a double precision + floating point value + + + + Union of a floating point variable and an integer + + + The union's value as a floating point variable + + + The union's value as an integer + + + The union's value as an unsigned integer + + + Union of a double precision floating point variable and a long + + + The union's value as a double precision floating point variable + + + The union's value as a long + + + The union's value as an unsigned long + + + + Tests whether a value is greater than the value supplied to its constructor + + + + + The value against which a comparison is to be made + + + + + Initializes a new instance of the class. + + The expected value. + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Tests whether a value is greater than or equal to the value supplied to its constructor + + + + + The value against which a comparison is to be made + + + + + Initializes a new instance of the class. + + The expected value. + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Tests whether a value is less than the value supplied to its constructor + + + + + The value against which a comparison is to be made + + + + + Initializes a new instance of the class. + + The expected value. + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Tests whether a value is less than or equal to the value supplied to its constructor + + + + + The value against which a comparison is to be made + + + + + Initializes a new instance of the class. + + The expected value. + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + MessageWriter is the abstract base for classes that write + constraint descriptions and messages in some form. The + class has separate methods for writing various components + of a message, allowing implementations to tailor the + presentation as needed. + + + + + Construct a MessageWriter given a culture + + + + + Method to write single line message with optional args, usually + written to precede the general failure message. + + The message to be written + Any arguments used in formatting the message + + + + Method to write single line message with optional args, usually + written to precede the general failure message, at a givel + indentation level. + + The indentation level of the message + The message to be written + Any arguments used in formatting the message + + + + Display Expected and Actual lines for a constraint. This + is called by MessageWriter's default implementation of + WriteMessageTo and provides the generic two-line display. + + The constraint that failed + + + + Display Expected and Actual lines for given values. This + method may be called by constraints that need more control over + the display of actual and expected values than is provided + by the default implementation. + + The expected value + The actual value causing the failure + + + + Display Expected and Actual lines for given values, including + a tolerance value on the Expected line. + + The expected value + The actual value causing the failure + The tolerance within which the test was made + + + + Display the expected and actual string values on separate lines. + If the mismatch parameter is >=0, an additional line is displayed + line containing a caret that points to the mismatch point. + + The expected string value + The actual string value + The point at which the strings don't match or -1 + If true, case is ignored in locating the point where the strings differ + If true, the strings should be clipped to fit the line + + + + Writes the text for a connector. + + The connector. + + + + Writes the text for a predicate. + + The predicate. + + + + Writes the text for an expected value. + + The expected value. + + + + Writes the text for a modifier + + The modifier. + + + + Writes the text for an actual value. + + The actual value. + + + + Writes the text for a generalized value. + + The value. + + + + Writes the text for a collection value, + starting at a particular point, to a max length + + The collection containing elements to write. + The starting point of the elements to write + The maximum number of elements to write + + + + Abstract method to get the max line length + + + + + Static methods used in creating messages + + + + + Static string used when strings are clipped + + + + + Returns the representation of a type as used in NUnitLite. + This is the same as Type.ToString() except for arrays, + which are displayed with their declared sizes. + + + + + + + Converts any control characters in a string + to their escaped representation. + + The string to be converted + The converted string + + + + Return the a string representation for a set of indices into an array + + Array of indices for which a string is needed + + + + Get an array of indices representing the point in a enumerable, + collection or array corresponding to a single int index into the + collection. + + The collection to which the indices apply + Index in the collection + Array of indices + + + + Clip a string to a given length, starting at a particular offset, returning the clipped + string with ellipses representing the removed parts + + The string to be clipped + The maximum permitted length of the result string + The point at which to start clipping + The clipped string + + + + Clip the expected and actual strings in a coordinated fashion, + so that they may be displayed together. + + + + + + + + + Shows the position two strings start to differ. Comparison + starts at the start index. + + The expected string + The actual string + The index in the strings at which comparison should start + Boolean indicating whether case should be ignored + -1 if no mismatch found, or the index where mismatch found + + + + The Numerics class contains common operations on numeric values. + + + + + Checks the type of the object, returning true if + the object is a numeric type. + + The object to check + true if the object is a numeric type + + + + Checks the type of the object, returning true if + the object is a floating point numeric type. + + The object to check + true if the object is a floating point numeric type + + + + Checks the type of the object, returning true if + the object is a fixed point numeric type. + + The object to check + true if the object is a fixed point numeric type + + + + Test two numeric values for equality, performing the usual numeric + conversions and using a provided or default tolerance. If the tolerance + provided is Empty, this method may set it to a default tolerance. + + The expected value + The actual value + A reference to the tolerance in effect + True if the values are equal + + + + Compare two numeric values, performing the usual numeric conversions. + + The expected value + The actual value + The relationship of the values to each other + + + + NUnitComparer encapsulates NUnit's default behavior + in comparing two objects. + + + + + Compares two objects + + + + + + + + Returns the default NUnitComparer. + + + + + Generic version of NUnitComparer + + + + + + Compare two objects of the same type + + + + + NUnitEqualityComparer encapsulates NUnit's handling of + equality tests between objects. + + + + + + + + + + Compares two objects for equality within a tolerance + + The first object to compare + The second object to compare + The tolerance to use in the comparison + + + + + If true, all string comparisons will ignore case + + + + + If true, arrays will be treated as collections, allowing + those of different dimensions to be compared + + + + + Comparison objects used in comparisons for some constraints. + + + + + Compares two objects for equality within a tolerance. + + + + + Helper method to compare two arrays + + + + + Method to compare two DirectoryInfo objects + + first directory to compare + second directory to compare + true if equivalent, false if not + + + + Returns the default NUnitEqualityComparer + + + + + Gets and sets a flag indicating whether case should + be ignored in determining equality. + + + + + Gets and sets a flag indicating that arrays should be + compared as collections, without regard to their shape. + + + + + Gets and sets an external comparer to be used to + test for equality. It is applied to members of + collections, in place of NUnit's own logic. + + + + + Gets the list of failure points for the last Match performed. + + + + + FailurePoint class represents one point of failure + in an equality test. + + + + + The location of the failure + + + + + The expected value + + + + + The actual value + + + + + Indicates whether the expected value is valid + + + + + Indicates whether the actual value is valid + + + + + PathConstraint serves as the abstract base of constraints + that operate on paths and provides several helper methods. + + + + + The expected path used in the constraint + + + + + The actual path being tested + + + + + Flag indicating whether a caseInsensitive comparison should be made + + + + + Construct a PathConstraint for a give expected path + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Returns true if the expected path and actual path match + + + + + Returns the string representation of this constraint + + + + + Canonicalize the provided path + + + The path in standardized form + + + + Test whether two paths are the same + + The first path + The second path + Indicates whether case should be ignored + + + + + Test whether one path is under another path + + The first path - supposed to be the parent path + The second path - supposed to be the child path + Indicates whether case should be ignored + + + + + Test whether one path is the same as or under another path + + The first path - supposed to be the parent path + The second path - supposed to be the child path + + + + + Modifies the current instance to be case-insensitve + and returns it. + + + + + Modifies the current instance to be case-sensitve + and returns it. + + + + + Summary description for SamePathConstraint. + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The expected path + The actual path + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SubPathConstraint tests that the actual path is under the expected path + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The expected path + The actual path + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SamePathOrUnderConstraint tests that one path is under another + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The expected path + The actual path + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Predicate constraint wraps a Predicate in a constraint, + returning success if the predicate is true. + + + + + Construct a PredicateConstraint from a predicate + + + + + Determines whether the predicate succeeds when applied + to the actual value. + + + + + Writes the description to a MessageWriter + + + + + NotConstraint negates the effect of some other constraint + + + + + Initializes a new instance of the class. + + The base constraint to be negated. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for if the base constraint fails, false if it succeeds + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a MessageWriter. + + The writer on which the actual value is displayed + + + + AllItemsConstraint applies another constraint to each + item in a collection, succeeding if they all succeed. + + + + + Construct an AllItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + failing if any item fails. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + SomeItemsConstraint applies another constraint to each + item in a collection, succeeding if any of them succeeds. + + + + + Construct a SomeItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + succeeding if any item succeeds. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + NoItemConstraint applies another constraint to each + item in a collection, failing if any of them succeeds. + + + + + Construct a NoItemConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + failing if any item fails. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + ExactCoutConstraint applies another constraint to each + item in a collection, succeeding only if a specified + number of items succeed. + + + + + Construct an ExactCountConstraint on top of an existing constraint + + + + + + + Apply the item constraint to each item in the collection, + succeeding only if the expected number of items pass. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + PropertyExistsConstraint tests that a named property + exists on the object provided through Match. + + Originally, PropertyConstraint provided this feature + in addition to making optional tests on the vaue + of the property. The two constraints are now separate. + + + + + Initializes a new instance of the class. + + The name of the property. + + + + Test whether the property exists for a given object + + The object to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + + + PropertyConstraint extracts a named property and uses + its value as the actual value for a chained constraint. + + + + + Initializes a new instance of the class. + + The name. + The constraint to apply to the property. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + + + RangeConstraint tests whethe two values are within a + specified range. + + + + + Initializes a new instance of the class. + + From. + To. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + ResolvableConstraintExpression is used to represent a compound + constraint being constructed at a point where the last operator + may either terminate the expression or may have additional + qualifying constraints added to it. + + It is used, for example, for a Property element or for + an Exception element, either of which may be optionally + followed by constraints that apply to the property or + exception. + + + + + Create a new instance of ResolvableConstraintExpression + + + + + Create a new instance of ResolvableConstraintExpression, + passing in a pre-populated ConstraintBuilder. + + + + + Resolve the current expression to a Constraint + + + + + This operator creates a constraint that is satisfied only if both + argument constraints are satisfied. + + + + + This operator creates a constraint that is satisfied only if both + argument constraints are satisfied. + + + + + This operator creates a constraint that is satisfied only if both + argument constraints are satisfied. + + + + + This operator creates a constraint that is satisfied if either + of the argument constraints is satisfied. + + + + + This operator creates a constraint that is satisfied if either + of the argument constraints is satisfied. + + + + + This operator creates a constraint that is satisfied if either + of the argument constraints is satisfied. + + + + + This operator creates a constraint that is satisfied if the + argument constraint is not satisfied. + + + + + Appends an And Operator to the expression + + + + + Appends an Or operator to the expression. + + + + + ReusableConstraint wraps a resolved constraint so that it + may be saved and reused as needed. + + + + + Construct a ReusableConstraint + + The constraint or expression to be reused + + + + Conversion operator from a normal constraint to a ReusableConstraint. + + The original constraint to be wrapped as a ReusableConstraint + + + + + Returns the string representation of the constraint. + + A string representing the constraint + + + + Resolves the ReusableConstraint by returning the constraint + that it originally wrapped. + + A resolved constraint + + + + SameAsConstraint tests whether an object is identical to + the object passed to its constructor + + + + + Initializes a new instance of the class. + + The expected object. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + BinarySerializableConstraint tests whether + an object is serializable in binary format. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation + + + + + BinarySerializableConstraint tests whether + an object is serializable in binary format. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of this constraint + + + + + StringConstraint is the abstract base for constraints + that operate on strings. It supports the IgnoreCase + modifier for string operations. + + + + + The expected value + + + + + Indicates whether tests should be case-insensitive + + + + + Constructs a StringConstraint given an expected value + + The expected value + + + + Modify the constraint to ignore case in matching. + + + + + EmptyStringConstraint tests whether a string is empty. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + NullEmptyStringConstraint tests whether a string is either null or empty. + + + + + Constructs a new NullOrEmptyStringConstraint + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SubstringConstraint can test whether a string contains + the expected substring. + + + + + Initializes a new instance of the class. + + The expected. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + StartsWithConstraint can test whether a string starts + with an expected substring. + + + + + Initializes a new instance of the class. + + The expected string + + + + Test whether the constraint is matched by the actual value. + This is a template method, which calls the IsMatch method + of the derived class. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + EndsWithConstraint can test whether a string ends + with an expected substring. + + + + + Initializes a new instance of the class. + + The expected string + + + + Test whether the constraint is matched by the actual value. + This is a template method, which calls the IsMatch method + of the derived class. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + RegexConstraint can test whether a string matches + the pattern provided. + + + + + Initializes a new instance of the class. + + The pattern. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + ThrowsConstraint is used to test the exception thrown by + a delegate by applying a constraint to it. + + + + + Initializes a new instance of the class, + using a constraint to be applied to the exception. + + A constraint to apply to the caught exception. + + + + Executes the code of the delegate and captures any exception. + If a non-null base constraint was provided, it applies that + constraint to the exception. + + A delegate representing the code to be tested + True if an exception is thrown and the constraint succeeds, otherwise false + + + + Converts an ActualValueDelegate to a TestDelegate + before calling the primary overload. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of this constraint + + + + + Get the actual exception thrown - used by Assert.Throws. + + + + + ThrowsNothingConstraint tests that a delegate does not + throw an exception. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True if no exception is thrown, otherwise false + + + + Converts an ActualValueDelegate to a TestDelegate + before calling the primary overload. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Modes in which the tolerance value for a comparison can + be interpreted. + + + + + The tolerance was created with a value, without specifying + how the value would be used. This is used to prevent setting + the mode more than once and is generally changed to Linear + upon execution of the test. + + + + + The tolerance is used as a numeric range within which + two compared values are considered to be equal. + + + + + Interprets the tolerance as the percentage by which + the two compared values my deviate from each other. + + + + + Compares two values based in their distance in + representable numbers. + + + + + The Tolerance class generalizes the notion of a tolerance + within which an equality test succeeds. Normally, it is + used with numeric types, but it can be used with any + type that supports taking a difference between two + objects and comparing that difference to a value. + + + + + Constructs a linear tolerance of a specdified amount + + + + + Constructs a tolerance given an amount and ToleranceMode + + + + + Tests that the current Tolerance is linear with a + numeric value, throwing an exception if it is not. + + + + + Returns an empty Tolerance object, equivalent to + specifying no tolerance. In most cases, it results + in an exact match but for floats and doubles a + default tolerance may be used. + + + + + Returns a zero Tolerance object, equivalent to + specifying an exact match. + + + + + Gets the ToleranceMode for the current Tolerance + + + + + Gets the value of the current Tolerance instance. + + + + + Returns a new tolerance, using the current amount as a percentage. + + + + + Returns a new tolerance, using the current amount in Ulps. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of days. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of hours. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of minutes. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of seconds. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of milliseconds. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of clock ticks. + + + + + Returns true if the current tolerance is empty. + + + + + TypeConstraint is the abstract base for constraints + that take a Type as their expected value. + + + + + The expected Type used by the constraint + + + + + Construct a TypeConstraint for a given Type + + + + + + Write the actual value for a failing constraint test to a + MessageWriter. TypeConstraints override this method to write + the name of the type. + + The writer on which the actual value is displayed + + + + ExactTypeConstraint is used to test that an object + is of the exact type provided in the constructor + + + + + Construct an ExactTypeConstraint for a given Type + + The expected Type. + + + + Test that an object is of the exact type specified + + The actual value. + True if the tested object is of the exact type provided, otherwise false. + + + + Write the description of this constraint to a MessageWriter + + The MessageWriter to use + + + + ExceptionTypeConstraint is a special version of ExactTypeConstraint + used to provided detailed info about the exception thrown in + an error message. + + + + + Constructs an ExceptionTypeConstraint + + + + + Write the actual value for a failing constraint test to a + MessageWriter. Overriden to write additional information + in the case of an Exception. + + The MessageWriter to use + + + + InstanceOfTypeConstraint is used to test that an object + is of the same type provided or derived from it. + + + + + Construct an InstanceOfTypeConstraint for the type provided + + The expected Type + + + + Test whether an object is of the specified type or a derived type + + The object to be tested + True if the object is of the provided type or derives from it, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + AssignableFromConstraint is used to test that an object + can be assigned from a given Type. + + + + + Construct an AssignableFromConstraint for the type provided + + + + + + Test whether an object can be assigned from the specified type + + The object to be tested + True if the object can be assigned a value of the expected Type, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + AssignableToConstraint is used to test that an object + can be assigned to a given Type. + + + + + Construct an AssignableToConstraint for the type provided + + + + + + Test whether an object can be assigned to the specified type + + The object to be tested + True if the object can be assigned a value of the expected Type, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + Thrown when an assertion failed. + + + + + The error message that explains + the reason for the exception + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Thrown when an assertion failed. + + + + + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Thrown when a test executes inconclusively. + + + + + The error message that explains + the reason for the exception + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Thrown when an assertion failed. + + + + + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + + + + + + + Compares two objects of a given Type for equality within a tolerance + + The first object to compare + The second object to compare + The tolerance to use in the comparison + + + + + The different targets a test action attribute can be applied to + + + + + Default target, which is determined by where the action attribute is attached + + + + + Target a individual test case + + + + + Target a suite of test cases + + + + + Delegate used by tests that execute code and + capture any thrown exception. + + + + + The Assert class contains a collection of static methods that + implement the most common assertions used in NUnit. + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Helper for Assert.AreEqual(double expected, double actual, ...) + allowing code generation to work consistently. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + The message to initialize the with. + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + + + + Throws an with the message and arguments + that are passed in. This is used by the other Assert functions. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This is used by the other Assert functions. + + The message to initialize the with. + + + + Throws an . + This is used by the other Assert functions. + + + + + Throws an with the message and arguments + that are passed in. This causes the test to be reported as ignored. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This causes the test to be reported as ignored. + + The message to initialize the with. + + + + Throws an . + This causes the test to be reported as ignored. + + + + + Throws an with the message and arguments + that are passed in. This causes the test to be reported as inconclusive. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This causes the test to be reported as inconclusive. + + The message to initialize the with. + + + + Throws an . + This causes the test to be reported as Inconclusive. + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + Used as a synonym for That in rare cases where a private setter + causes a Visual Basic compilation error. + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + Used as a synonym for That in rare cases where a private setter + causes a Visual Basic compilation error. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + Used as a synonym for That in rare cases where a private setter + causes a Visual Basic compilation error. + + + This method is provided for use by VB developers needing to test + the value of properties with private setters. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestSnippet delegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestSnippet delegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestSnippet delegate + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestSnippet delegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestSnippet delegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestSnippet delegate + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestSnippet delegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestSnippet delegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestSnippet delegate + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + + + + Verifies that a delegate does not throw an exception + + A TestSnippet delegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate does not throw an exception. + + A TestSnippet delegate + The message that will be displayed on failure + + + + Verifies that a delegate does not throw an exception. + + A TestSnippet delegate + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + + + + Assert that a string is not null or empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is not null or empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is not null or empty + + The string to be tested + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + The message to display in case of failure + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + + + + Gets the number of assertions executed so far and + resets the counter to zero. + + + + + AssertionHelper is an optional base class for user tests, + allowing the use of shorter names for constraints and + asserts and avoiding conflict with the definition of + , from which it inherits much of its + behavior, in certain mock object frameworks. + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to Assert.That + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to Assert.That. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to Assert.That + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to Assert.That. + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to Assert.That. + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically Assert.That. + + The evaluated condition + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + Returns a ListMapper based on a collection. + + The original collection + + + + + Provides static methods to express the assumptions + that must be met for a test to give a meaningful + result. If an assumption is not met, the test + should produce an inconclusive result. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the + method throws an . + + The evaluated condition + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + A set of Assert methods operationg on one or more collections + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + The message that will be displayed on failure + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable containing objects to be considered + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable containing objects to be considered + The message that will be displayed on failure + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + The message that will be displayed on failure + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + The message that will be displayed on failure + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that superset is not a subject of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + + + + Asserts that superset is not a subject of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + + + + Asserts that superset is not a subject of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that superset is a subset of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + + + + Asserts that superset is a subset of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + + + + Asserts that superset is a subset of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + The message to be displayed on failure + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + + + + Static helper class used in the constraint-based syntax + + + + + Creates a new SubstringConstraint + + The value of the substring + A SubstringConstraint + + + + Creates a new CollectionContainsConstraint. + + The item that should be found. + A new CollectionContainsConstraint + + + + Summary description for DirectoryAssert + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are not equal + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are equal + Arguments to be used in formatting the message + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are equal + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Summary description for FileAssert. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + The message to display if objects are not equal + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if objects are not equal + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if objects are not equal + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + The message to be displayed when the two Stream are the same. + Arguments to be used in formatting the message + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + The message to be displayed when the Streams are the same. + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if objects are not equal + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if objects are not equal + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + + + + GlobalSettings is a place for setting default values used + by the framework in performing asserts. + + + + + Default tolerance for floating point equality + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding only if a specified number of them succeed. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + Interface implemented by a user fixture in order to + validate any expected exceptions. It is only called + for test methods marked with the ExpectedException + attribute. + + + + + Method to handle an expected exception + + The exception to be handled + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for a positive value + + + + + Returns a constraint that tests for a negative value + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + The Iz class is a synonym for Is intended for use in VB, + which regards Is as a keyword. + + + + + The List class is a helper class with properties and methods + that supply a number of constraints used with lists and collections. + + + + + List.Map returns a ListMapper, which can be used to map + the original collection to another collection. + + + + + + + ListMapper is used to transform a collection used as an actual argument + producing another collection to be used in the assertion. + + + + + Construct a ListMapper based on a collection + + The collection to be transformed + + + + Produces a collection containing all the values of a property + + The collection of property values + + + + + Randomizer returns a set of random values in a repeatable + way, to allow re-running of tests if necessary. + + + + + Get a randomizer for a particular member, returning + one that has already been created if it exists. + This ensures that the same values are generated + each time the tests are reloaded. + + + + + Get a randomizer for a particular parameter, returning + one that has already been created if it exists. + This ensures that the same values are generated + each time the tests are reloaded. + + + + + Construct a randomizer using a random seed + + + + + Construct a randomizer using a specified seed + + + + + Return an array of random doubles between 0.0 and 1.0. + + + + + + + Return an array of random doubles with values in a specified range. + + + + + Return an array of random ints with values in a specified range. + + + + + Get a random seed for use in creating a randomizer. + + + + + The SpecialValue enum is used to represent TestCase arguments + that cannot be used as arguments to an Attribute. + + + + + Null represents a null value, which cannot be used as an + argument to an attriute under .NET 1.x + + + + + Basic Asserts on strings. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + + + + Asserts that a string is not found within another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + + + + Asserts that two strings are not equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that two strings are Notequal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + + + + Asserts that two strings are not equal, without regard to case. + + The expected string + The actual string + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + The message to display in case of failure + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + The message to display in case of failure + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + + + + The TestCaseData class represents a set of arguments + and other parameter info to be used for a parameterized + test case. It provides a number of instance modifiers + for use in initializing the test case. + + Note: Instance modifiers are getters that return + the same instance after modifying it's state. + + + + + The argument list to be provided to the test + + + + + The expected result to be returned + + + + + Set to true if this has an expected result + + + + + The expected exception Type + + + + + The FullName of the expected exception + + + + + The name to be used for the test + + + + + The description of the test + + + + + A dictionary of properties, used to add information + to tests without requiring the class to change. + + + + + If true, indicates that the test case is to be ignored + + + + + If true, indicates that the test case is marked explicit + + + + + The reason for ignoring a test case + + + + + Initializes a new instance of the class. + + The arguments. + + + + Initializes a new instance of the class. + + The argument. + + + + Initializes a new instance of the class. + + The first argument. + The second argument. + + + + Initializes a new instance of the class. + + The first argument. + The second argument. + The third argument. + + + + Sets the expected result for the test + + The expected result + A modified TestCaseData + + + + Sets the expected exception type for the test + + Type of the expected exception. + The modified TestCaseData instance + + + + Sets the expected exception type for the test + + FullName of the expected exception. + The modified TestCaseData instance + + + + Sets the name of the test case + + The modified TestCaseData instance + + + + Sets the description for the test case + being constructed. + + The description. + The modified TestCaseData instance. + + + + Applies a category to the test + + + + + + + Applies a named property to the test + + + + + + + + Applies a named property to the test + + + + + + + + Applies a named property to the test + + + + + + + + Ignores this TestCase. + + + + + + Ignores this TestCase, specifying the reason. + + The reason. + + + + + Marks this TestCase as Explicit + + + + + + Marks this TestCase as Explicit, specifying the reason. + + The reason. + + + + + Gets the argument list to be provided to the test + + + + + Gets the expected result + + + + + Returns true if the result has been set + + + + + Gets the expected exception Type + + + + + Gets the FullName of the expected exception + + + + + Gets the name to be used for the test + + + + + Gets the description of the test + + + + + Gets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets a value indicating whether this is explicit. + + true if explicit; otherwise, false. + + + + Gets the ignore reason. + + The ignore reason. + + + + Gets a list of categories associated with this test. + + + + + Gets the property dictionary for this test + + + + + Provide the context information of the current test + + + + + Constructs a TestContext using the provided context dictionary + + A context dictionary + + + + Get the current test context. This is created + as needed. The user may save the context for + use within a test, but it should not be used + outside the test for which it is created. + + + + + Gets a TestAdapter representing the currently executing test in this context. + + + + + Gets a ResultAdapter representing the current result for the test + executing in this context. + + + + + Gets the directory containing the current test assembly. + + + + + Gets the directory to be used for outputing files created + by this test run. + + + + + TestAdapter adapts a Test for consumption by + the user test code. + + + + + Constructs a TestAdapter for this context + + The context dictionary + + + + The name of the test. + + + + + The FullName of the test + + + + + The properties of the test. + + + + + ResultAdapter adapts a TestResult for consumption by + the user test code. + + + + + Construct a ResultAdapter for a context + + The context holding the result + + + + The TestState of current test. This maps to the ResultState + used in nunit.core and is subject to change in the future. + + + + + The TestStatus of current test. This enum will be used + in future versions of NUnit and so is to be preferred + to the TestState value. + + + + + Provides details about a test + + + + + Creates an instance of TestDetails + + The fixture that the test is a member of, if available. + The method that implements the test, if available. + The full name of the test. + A string representing the type of test, e.g. "Test Case". + Indicates if the test represents a suite of tests. + + + + The fixture that the test is a member of, if available. + + + + + The method that implements the test, if available. + + + + + The full name of the test. + + + + + A string representing the type of test, e.g. "Test Case". + + + + + Indicates if the test represents a suite of tests. + + + + + The ResultState enum indicates the result of running a test + + + + + The result is inconclusive + + + + + The test was not runnable. + + + + + The test has been skipped. + + + + + The test has been ignored. + + + + + The test succeeded + + + + + The test failed + + + + + The test encountered an unexpected exception + + + + + The test was cancelled by the user + + + + + The TestStatus enum indicates the result of running a test + + + + + The test was inconclusive + + + + + The test has skipped + + + + + The test succeeded + + + + + The test failed + + + + + Helper class with static methods used to supply constraints + that operate on strings. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that fails if the actual + value matches the pattern supplied as an argument. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + TextMessageWriter writes constraint descriptions and messages + in displayable form as a text stream. It tailors the display + of individual message components to form the standard message + format of NUnit assertion failure messages. + + + + + Prefix used for the expected value line of a message + + + + + Prefix used for the actual value line of a message + + + + + Length of a message prefix + + + + + Construct a TextMessageWriter + + + + + Construct a TextMessageWriter, specifying a user message + and optional formatting arguments. + + + + + + + Method to write single line message with optional args, usually + written to precede the general failure message, at a givel + indentation level. + + The indentation level of the message + The message to be written + Any arguments used in formatting the message + + + + Display Expected and Actual lines for a constraint. This + is called by MessageWriter's default implementation of + WriteMessageTo and provides the generic two-line display. + + The constraint that failed + + + + Display Expected and Actual lines for given values. This + method may be called by constraints that need more control over + the display of actual and expected values than is provided + by the default implementation. + + The expected value + The actual value causing the failure + + + + Display Expected and Actual lines for given values, including + a tolerance value on the expected line. + + The expected value + The actual value causing the failure + The tolerance within which the test was made + + + + Display the expected and actual string values on separate lines. + If the mismatch parameter is >=0, an additional line is displayed + line containing a caret that points to the mismatch point. + + The expected string value + The actual string value + The point at which the strings don't match or -1 + If true, case is ignored in string comparisons + If true, clip the strings to fit the max line length + + + + Writes the text for a connector. + + The connector. + + + + Writes the text for a predicate. + + The predicate. + + + + Write the text for a modifier. + + The modifier. + + + + Writes the text for an expected value. + + The expected value. + + + + Writes the text for an actual value. + + The actual value. + + + + Writes the text for a generalized value. + + The value. + + + + Writes the text for a collection value, + starting at a particular point, to a max length + + The collection containing elements to write. + The starting point of the elements to write + The maximum number of elements to write + + + + Write the generic 'Expected' line for a constraint + + The constraint that failed + + + + Write the generic 'Expected' line for a given value + + The expected value + + + + Write the generic 'Expected' line for a given value + and tolerance. + + The expected value + The tolerance within which the test was made + + + + Write the generic 'Actual' line for a constraint + + The constraint for which the actual value is to be written + + + + Write the generic 'Actual' line for a given value + + The actual value causing a failure + + + + Gets or sets the maximum line length for this writer + + + + + Helper class with properties and methods that supply + constraints that operate on exceptions. + + + + + Creates a constraint specifying the exact type of exception expected + + + + + Creates a constraint specifying the exact type of exception expected + + + + + Creates a constraint specifying the type of exception expected + + + + + Creates a constraint specifying the type of exception expected + + + + + Creates a constraint specifying an expected exception + + + + + Creates a constraint specifying an exception with a given InnerException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying that no exception is thrown + + + + diff --git a/packages/NUnit.2.6.2/license.txt b/packages/NUnit.2.6.2/license.txt new file mode 100644 index 0000000..530a6e0 --- /dev/null +++ b/packages/NUnit.2.6.2/license.txt @@ -0,0 +1,15 @@ +Copyright 2002-2012 Charlie Poole +Copyright 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov +Copyright 2000-2002 Philip A. Craig + +This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment (see the following) in the product documentation is required. + +Portions Copyright 2002-2012 Charlie Poole or Copyright 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright 2000-2002 Philip A. Craig + +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source distribution. diff --git a/packages/repositories.config b/packages/repositories.config new file mode 100644 index 0000000..73afcfd --- /dev/null +++ b/packages/repositories.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Html2Article/Html2Article.csproj b/src/Demo/Demo.csproj similarity index 79% rename from Html2Article/Html2Article.csproj rename to src/Demo/Demo.csproj index 7c448cf..31597e2 100644 --- a/Html2Article/Html2Article.csproj +++ b/src/Demo/Demo.csproj @@ -1,42 +1,43 @@  - Debug - AnyCPU - {9CF36626-4608-4467-9ED6-7E9C91A0E121} + x86 + 8.0.30703 + 2.0 + {7F199520-F681-4BB7-B64F-79F68B1DFA43} WinExe Properties - Html2Article - Html2Article + Demo + Demo v4.0 + + 512 - Client - - AnyCPU + + x86 true full false - bin\Debug\ + ..\..\bin\Debug\ DEBUG;TRACE prompt 4 - false - - AnyCPU + + x86 pdbonly true - bin\Release\ + ..\..\bin\Release\ TRACE prompt 4 - false + @@ -53,7 +54,6 @@ FrmMain.cs - @@ -83,7 +83,12 @@ True - + + + {0EDCFCDB-08FC-43AE-B6BB-BAF8D6EDF61E} + Html2Article + + + \ No newline at end of file diff --git a/src/Html2Article.Test/Properties/AssemblyInfo.cs b/src/Html2Article.Test/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..59bbb7b --- /dev/null +++ b/src/Html2Article.Test/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的常规信息通过以下 +// 特性集控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("Html2Article.Test")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Html2Article.Test")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 使此程序集中的类型 +// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型, +// 则将该类型上的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("9ab7f042-d342-43a4-a59d-3bcb4bdf96e6")] + +// 程序集的版本信息由下面四个值组成: +// +// 主版本 +// 次版本 +// 内部版本号 +// 修订号 +// +// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/Html2Article.Test/UrlUtilityTest.cs b/src/Html2Article.Test/UrlUtilityTest.cs new file mode 100644 index 0000000..28f1188 --- /dev/null +++ b/src/Html2Article.Test/UrlUtilityTest.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using StanSoft; +using NUnit.Framework; + +namespace Html2Article.Test +{ + [TestFixture] + public class UrlUtilityTest + { + [Test] + public void FixUrl() + { + string baseUrl = "http://www.stan.com"; + string html = "\r\ninfo"; + string result = UrlUtility.FixUrl(baseUrl, html); + + Assert.AreEqual("\r\ninfo", + result); + } + } +} diff --git a/src/Html2Article.Test/packages.config b/src/Html2Article.Test/packages.config new file mode 100644 index 0000000..5c3ca54 --- /dev/null +++ b/src/Html2Article.Test/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Html2Article/Html2Article.cs b/src/Html2Article/Html2Article.cs similarity index 81% rename from Html2Article/Html2Article.cs rename to src/Html2Article/Html2Article.cs index 2a2504e..771f750 100644 --- a/Html2Article/Html2Article.cs +++ b/src/Html2Article/Html2Article.cs @@ -5,7 +5,7 @@ using System.Text; using System.Text.RegularExpressions; -namespace Html2Article +namespace StanSoft { /// /// 文章正文数据模型 @@ -27,17 +27,18 @@ public class Article /// /// 解析Html页面的文章正文内容,基于文本密度的HTML正文提取类 /// Date: 2012/12/30 + /// Update: + /// 2013/7/10 优化文章头部分析算法,优化 + /// /// public class Html2Article { #region 参数设置 // 正则表达式过滤:正则表达式,要替换成的文本 - // 首先剔除script和style无用标签,暂时保留其他标签是为了保存带标签的正文;分析过程中还是会剔除所有标签的 private static readonly string[][] _filters = new string[][]{ new string[] { @"(?is).*?", "" }, new string[] { @"(?is).*?", "" }, - new string[] { @"&.{2,8};|&#.{2,8};", "" }, // 针对链接密集型的网站的处理,主要是门户类的网站,降低链接干扰 new string[] { @"(?is)", "\n"} }; @@ -53,9 +54,9 @@ public static bool AppendMode set { _appendMode = value; } } - private static int _depth = 5; + private static int _depth = 6; /// - /// 按行分析的深度,默认为5 + /// 按行分析的深度,默认为6 /// public static int Depth { @@ -74,6 +75,11 @@ public static int LimitCount set { _limitCount = value; } } + // 确定文章正文头部时,向上查找,连续的空行到达_headEmptyLines,则停止查找 + private static int _headEmptyLines = 2; + // 用于确定文章结束的字符数 + private static int _endLimitCharCount = 20; + #endregion /// @@ -184,10 +190,11 @@ private static string GetTitle(string html) /// private static DateTime GetPublishDate(string html) { + // 过滤html标签,防止标签对日期提取产生影响 string text = Regex.Replace(html, "(?is)<.*?>", ""); Match match = Regex.Match( text, - @"((\d{4}|\d{2})(\-|\/)\d{1,2}\3\d{1,2})(\s?\d{2}:\d{2})?|(\d{4}年\d{1,2}月\d{1,2}日)(\s?\d{2}:\d{2})?", + @"((\d{4}|\d{2})(\-|\/)\d{1,2}\3\d{1,2})(\s?\d{2}:\d{2})?|(\d{4}年\d{1,2}月\d{1,2}日)(\s?\d{2}:\d{2})?", RegexOptions.IgnoreCase); DateTime result = new DateTime(1900, 1, 1); @@ -226,8 +233,8 @@ private static DateTime GetPublishDate(string html) } result = Convert.ToDateTime(dateStr); } - catch(Exception) - {} + catch (Exception) + { } if (result.Year < 1900) { result = new DateTime(1900, 1, 1); @@ -248,7 +255,7 @@ private static void GetContent(string bodyText, out string content, out string c string[] lines = null; // 保存干净的文本内容,不包含标签 orgLines = bodyText.Split('\n'); - lines = new string[orgLines.Length]; + lines = new string[orgLines.Length]; // 去除每行的空白字符,剔除标签 for (int i = 0; i < orgLines.Length; i++) { @@ -275,14 +282,41 @@ private static void GetContent(string bodyText, out string content, out string c { if (preTextLen > _limitCount && len > 0) // 如果上次查找的文本数量超过了限定字数,且当前行数字符数不为0,则认为是开始位置 { - startPos = i - 1; - sb.Append(lines[startPos]); - orgSb.Append(orgLines[startPos]); + // 查找文章起始位置, 如果向上查找,发现2行连续的空行则认为是头部 + int emptyCount = 0; + for (int j = i - 1; j > 0; j--) + { + if (String.IsNullOrEmpty(lines[j])) + { + emptyCount++; + } + else + { + emptyCount = 0; + } + if (emptyCount == _headEmptyLines) + { + startPos = j + _headEmptyLines; + break; + } + } + // 如果没有定位到文章头,则以当前查找位置作为文章头 + if (startPos == -1) + { + startPos = i; + } + // 填充发现的文章起始部分 + for (int j = startPos; j <= i; j++) + { + sb.Append(lines[j]); + orgSb.Append(orgLines[j]); + } } } else { - if (len == 0 && preTextLen == 0) // 当前长度为0,且上一个长度也为0,则认为已经结束 + //if (len == 0 && preTextLen == 0) // 当前长度为0,且上一个长度也为0,则认为已经结束 + if (len <= _endLimitCharCount && preTextLen < _endLimitCharCount) // 当前长度为0,且上一个长度也为0,则认为已经结束 { if (!_appendMode) { @@ -299,6 +333,7 @@ private static void GetContent(string bodyText, out string content, out string c string result = sb.ToString(); // 处理回车符,更好的将文本格式化输出 content = result.Replace("[crlf]", Environment.NewLine); + content = System.Web.HttpUtility.HtmlDecode(content); // 输出带标签文本 contentWithTags = orgSb.ToString(); } diff --git a/src/Html2Article/Html2Article.csproj b/src/Html2Article/Html2Article.csproj new file mode 100644 index 0000000..1594ff0 --- /dev/null +++ b/src/Html2Article/Html2Article.csproj @@ -0,0 +1,57 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {0EDCFCDB-08FC-43AE-B6BB-BAF8D6EDF61E} + Library + Properties + Html2Article + Html2Article + v4.0 + 512 + + + true + full + false + ..\..\bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\bin\Release\ + TRACE + prompt + 4 + ..\..\bin\Release\Html2Article.XML + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Html2Article/Html2Article.nuspec b/src/Html2Article/Html2Article.nuspec new file mode 100644 index 0000000..127f672 --- /dev/null +++ b/src/Html2Article/Html2Article.nuspec @@ -0,0 +1,18 @@ + + + + $id$ + $version$ + $title$ + $author$ + $author$ + http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE + http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE + http://ICON_URL_HERE_OR_DELETE_THIS_LINE + false + $description$ + Summary of changes made in this release of the package. + Copyright 2013 + Tag1 Tag2 + + \ No newline at end of file diff --git a/src/Html2Article/Properties/AssemblyInfo.cs b/src/Html2Article/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..a468969 --- /dev/null +++ b/src/Html2Article/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的常规信息通过以下 +// 特性集控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("Html2Article")] +[assembly: AssemblyDescription("Extract article info from html")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Html2Article")] +[assembly: AssemblyCopyright("Copyright © StanZhai 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 使此程序集中的类型 +// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型, +// 则将该类型上的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("bf101a0d-b649-4e0c-9b25-1c8396db3792")] + +// 程序集的版本信息由下面四个值组成: +// +// 主版本 +// 次版本 +// 内部版本号 +// 修订号 +// +// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.13.0.5")] +[assembly: AssemblyFileVersion("1.13.0.5")] diff --git a/src/Html2Article/UrlUtility.cs b/src/Html2Article/UrlUtility.cs new file mode 100644 index 0000000..ca8a017 --- /dev/null +++ b/src/Html2Article/UrlUtility.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; + +namespace StanSoft +{ + /// + /// Url处理辅助类 + /// + public class UrlUtility + { + /// + /// 基于baseUrl,补全html代码中的链接 + /// + /// + /// + public static string FixUrl(string baseUrl, string html) + { + html = Regex.Replace(html, "(?is)(href|src)=(\"|\')([^(\"|\')]+)(\"|\')", (match) => + { + string org = match.Value; + string link = match.Groups[3].Value; + if (link.StartsWith("http")) + { + return org; + } + + try + { + Uri uri = new Uri(baseUrl); + Uri thisUri = new Uri(uri, link); + string fullUrl = String.Format("{0}=\"{1}\"", match.Groups[1].Value, thisUri.AbsoluteUri); + return fullUrl; + } + catch (Exception) + { + return org; + } + }); + return html; + } + } +}