Repository navigation
v3.0.0
What's Changed
- fix: do not throw when the subject of
IsEquatableToisnullby @vbreuss in #1047 - fix: fail
HasValueon anullenum subject by @vbreuss in #1046 - feat: add a
GuaranteesNotNullattribute for expectations by @vbreuss in #1048 - fix: restore in
Debugbefore running the mutation tests by @vbreuss in #1049 - feat: recognise expectations that guarantee a not-null subject by attribute by @vbreuss in #1050
- fix: fail instead of silently succeeding when equivalency finds no members by @vbreuss in #1051
- test: record the
nullsubject behaviour of every expectation by @vbreuss in #1057 - feat: register the generated test framework adapter via a module initializer by @vbreuss in #1054
- fix: display the difference towards
MinValuein number failure messages by @vbreuss in #1059 - fix!: fail the property and type expectations for a
nullsubject by @vbreuss in #1058 - fix: prevent the mutation tests from exceeding the runner lifetime by @vbreuss in #1060
- feat: activate the test framework adapter registration by @vbreuss in #1062
- fix!: fail the negated string expectations for a null subject by @vbreuss in #1063
- refactor!: run extension initialization from a module initializer by @vbreuss in #1064
- feat: add property expectations for Version by @fskalkan in #1061
- test: update the public API snapshots for
ThatVersionby @vbreuss in #1067 - fix!: fail the negated boolean, number, enum and type expectations for a
nullsubject by @vbreuss in #1065 - fix!: treat
IsSameAsas a comparison for anullsubject by @vbreuss in #1068 - fix!: reject a
nullor emptyexpectedinContains,StartsWithandEndsWithby @vbreuss in #1069 - chore: slice the mutation tests over parallel jobs by @vbreuss in #1071
- fix: resolve the packed README without relying on the solution directory by @vbreuss in #1072
- refactor!: format
KeyValuePairentries without reflection by @vbreuss in #1070 - fix!: fail the collection inspections for a
nullsubject by @vbreuss in #1073 - chore: verify the mutation dashboard upload and drop the concurrency override by @vbreuss in #1074
- fix!: reject a
nullor empty needle in the dictionary key and value expectations by @vbreuss in #1075 - fix!: reject an empty needle in the
paramsoverloads ofStartsWithandEndsWithby @vbreuss in #1076 - test: close the null-subject sweep's blind spot by @vbreuss in #1078
- refactor!: discover the test framework adapter only from the registry by @vbreuss in #1066
- feat: mark the expectations that a null subject now fails with
GuaranteesNotNullby @vbreuss in #1079 - fix: apply an expectation that is typed at the narrowed subject type by @vbreuss in #1080
- feat!: provide equivalency members from a registry instead of reflection by @vbreuss in #1081
- fix: keep the expectations combined with
And/Orinside aForMembercontinuation by @vbreuss in #1083 - chore: bump aweXpect.Core to 3.0.0-pre.4 and restore the default build scope by @vbreuss in #1084
- chore: Bump the nunit group with 1 update by @dependabot[bot] in #1087
- chore: Bump the xunit group with 2 updates by @dependabot[bot] in #1089
- chore: Bump Microsoft.NET.Test.Sdk from 18.9.0 to 18.10.0 by @dependabot[bot] in #1090
- feat: add comparison expectations for Version by @vbreuss in #1085
- chore: Bump TUnit and TUnit.Assertions by @dependabot[bot] in #1088
- fix!: reject a null list and a null subject in
IsContainedInby @vbreuss in #1091 - feat!: mark
IsNotBetweenasGuaranteesNotNullby @vbreuss in #1092 - fix!: fail a null subject for the negated form of an expectation by @vbreuss in #1094
- docs: state the null rule that extension authors must follow by @vbreuss in #1100
- refactor!: accept a null subject on the non-generic collection expectations by @vbreuss in #1096
- fix: keep a runaway mutant from taking down the mutation runner by @vbreuss in #1093
- refactor: drop the GuaranteesNotNull markings that can never suppress anything by @vbreuss in #1097
- feat!: generate the type metadata registrations for equivalency from the marked call sites by @vbreuss in #1086
- refactor!: name the collection result types after what they do by @vbreuss in #1121
- refactor!: remove the parameterless Exactly() match type by @vbreuss in #1123
- refactor: name every expectation receiver
subjectby @vbreuss in #1122 - refactor!: unify member navigation on
Whoseby @vbreuss in #1124 - refactor!: render tolerance as
± xeverywhere by @vbreuss in #1125 - refactor!: rename
ThrowsException()toThrows()by @vbreuss in #1126 - refactor!: replace Approximately(expected, tolerance) with ExecutesIn(expected).Within(tolerance) by @vbreuss in #1128
- refactor!: unify numeric comparison vocabulary across result types by @vbreuss in #1127
- refactor!: replace the exception message and param name vocabularies with a string property continuation by @vbreuss in #1129
- chore: Stabilise the mutation tests, and measure
aweXpect.Coreonmainby @vbreuss in #1102 - feat: add the prefix and suffix vocabulary to the string property continuation by @vbreuss in #1130
- chore: bump aweXpect.Core to v3.0.0-pre.5 by @vbreuss in #1131
- chore: suppress the sonar findings that reflect deliberate design decisions by @vbreuss in #1133
- refactor!: remove
DoesNotHaveCountin favour ofHasCount().NotEqualTo()by @vbreuss in #1132 - fix: let the dashboard pass a run that produced no mutation report by @vbreuss in #1137
- refactor!: replace
AreAllUniquewithElements.AreUnique()/AreNotUnique()by @vbreuss in #1136 - feat!: give every scalar
Has…both shapes by @vbreuss in #1135 - chore: replace PublicApiGenerator with Microsoft.CodeAnalysis.PublicApiAnalyzers by @vbreuss in #1139
- feat: add a positional
DoesNotHaveItemby @vbreuss in #1138 - build: apply the Debug downgrade of RS0016 and RS0017 without an explicit configuration by @vbreuss in #1142
- feat: support
WithinonDoesNotSatisfyby @vbreuss in #1141 - feat: add a positional
DidNotTrigger(eventName)by @vbreuss in #1140 - test: keep the API acceptance build from hanging and from packing by @vbreuss in #1143
- feat!: add
KeysandValuesnavigation for dictionaries and remove the dictionary-specificAreAllUniqueby @vbreuss in #1134 - chore: bump aweXpect to v3.0.0-pre.2 by @vbreuss in #1147
- feat: add
IsOneOf/IsNotOneOfforGuidby @vbreuss in #1145 - fix!: let
Withinwait out the timeout for an event expectation with an upper bound by @vbreuss in #1144 - feat: add analyzer rule
aweXpect0003for theWith…/Has…exception pairing by @vbreuss in #1146 - feat: expose the remaining
charpredicates by @vbreuss in #1151 - feat: render objects and boxed key-value pairs from the metadata registry by @vbreuss in #1149
- feat: register the events of a recorded subject through the source generator by @vbreuss in #1148
- feat!: add a parameterless
WithHResult()and let the structPropertyResultcontinuations carry their grammars by @vbreuss in #1150 - test: resolve the Sonar findings in the delegate tests by @vbreuss in #1152
- chore: bump aweXpect.Core to v3.0.0-pre.6 by @vbreuss in #1153
- chore: bump aweXpect to v3.0.0-pre.3 by @vbreuss in #1154
- test: add smoke tests that run expectations published with Native AOT by @vbreuss in #1155
- feat!: declare the libraries trimmable and AOT compatible by @vbreuss in #1156
- chore: bump aweXpect.Core to v3.0.0-pre.7 by @vbreuss in #1157
- chore: bump aweXpect to v3.0.0-pre.4 and fail the smoke tests on trim warnings by @vbreuss in #1158
- fix: let the reflective recorder release static handlers and name unbindable handlers by @vbreuss in #1159
- docs: add the "What's new in v3" page by @vbreuss in #1160
- fix: mark
IsNot<T>()andIsNotExactly<T>()with[GuaranteesNotNull]by @vbreuss in #1163 - fix: render collection equality as "is equal to collection" instead of "matches collection" by @vbreuss in #1164
- fix: render every equivalency member difference as a
differed:block by @vbreuss in #1169 - fix: render a negated scalar property as "does not have " by @vbreuss in #1162
- refactor!: align the Core option types with the result vocabulary by @vbreuss in #1165
- feat: format exceptions as type name and message by @vbreuss in #1168
- fix: unify the text for a cancelled verification by @vbreuss in #1166
- fix: drop the leading dot from member paths in failure messages by @vbreuss in #1161
- docs: escape
<null>in the v3 changelog so MDX compiles by @vbreuss in #1171 - fix: render every unexpected exception as type plus indented message by @vbreuss in #1172
- fix!: let member navigations fail a null subject also under
DoesNotComplyWithby @vbreuss in #1167 - fix: render only the actual type in a failed type check by @vbreuss in #1175
- fix: render negated signaler and quantifier texts as readable English by @vbreuss in #1170
- fix: drop the
whichconnector before a nestedwhoseby @vbreuss in #1173 - refactor!: settle the naming and parameter outliers before v3 by @vbreuss in #1174
- fix: name the number of remaining items when a known-size collection is truncated by @vbreuss in #1176
- fix: correct four grammar slips in collection failure messages by @vbreuss in #1177
- fix: name the actual value in incomplete failure results by @vbreuss in #1179
- fix: correct Core failure message slips by @vbreuss in #1178
- docs: condense the v3 changelog to the overall picture by @vbreuss in #1185
- fix: negate the validation of an async member mapping like a sync one by @vbreuss in #1180
- fix: avoid a double negation when negating
NotEqualToon a struct property by @vbreuss in #1181 - fix: evaluate each nested collection instead of the first cached one by @vbreuss in #1184
- fix: render cast, identity, null-conditional and parenthesised
Whoseselectors readably by @vbreuss in #1182 - fix: render the equivalency failure prefix once when chaining
IsEquivalentToby @vbreuss in #1186 - fix!: reject empty member expectations with an ArgumentException by @vbreuss in #1183
- fix: use
whichas the connector for inner exception expectations by @vbreuss in #1187 - fix: fail a negated
HasSingleon a null collection withit was <null>by @vbreuss in #1188 - docs: fix broken samples and document null handling of
IsEquatableToand nullableIsTrue/IsFalseby @vbreuss in #1191 - fix!: throw an
ArgumentNullExceptionforHasFlag(null)andDoesNotHaveFlag(null)by @vbreuss in #1189 - fix!: let async quantifier continuations fail a null subject also under
DoesNotComplyWithby @vbreuss in #1190 - fix: state the missing keys and values in dictionary expectation results by @vbreuss in #1192
- fix: render an expected null as
<null>inAreEquivalentTofor collection items by @vbreuss in #1194 - chore: bump aweXpect.Core to v3.0.0-pre.8 by @vbreuss in #1193
- fix: report the waited time in signaler and event recording results by @vbreuss in #1196
- fix: render
which differs bywhen the difference overflows the numeric type by @vbreuss in #1197 - fix: render a negated quantified
ComplyWithas a negated quantifier by @vbreuss in #1195 - chore: bump aweXpect to v3.0.0-pre.5 by @vbreuss in #1200
- fix: render a negated quantifier as
for not all itemsby @vbreuss in #1198 - fix: render every quantifier result as
N of Mby @vbreuss in #1201 - chore: silence the Sonar findings on recently touched code by @vbreuss in #1202
- feat: add missing collection overloads for non-generic
IEnumerableandImmutableArray<T>by @vbreuss in #1199 - fix: report the full value count for
ContainsKeys(…).WhoseValuesby @vbreuss in #1203 - fix: list the values of ContainsKeys(…).WhoseValues together with their keys by @vbreuss in #1204
- fix: reject NaN bounds in
IsBetweenand compare infinite numbers correctly by @vbreuss in #1206 - fix: omit the Actual and Expected sections when the message shows the value completely by @vbreuss in #1207
- feat: await
TaskandValueTaskmembers inWhoseby @vbreuss in #1205 - fix: drop the stale Actual and Expected sections from the Core test expectations by @vbreuss in #1211
- fix: compare an instance that is referenced twice against each counterpart by @vbreuss in #1210
- fix: index abandoned partial matches by their own position by @vbreuss in #1209
- feat: report a throwing member in
Whoseas a failed expectation by @vbreuss in #1208 - fix: count the matches of a regex or wildcard pattern instead of fixed-length windows by @vbreuss in #1212
- fix: limit the recursion depth of the equivalency comparison by @vbreuss in #1213
- fix: match an ignored member name against whole path segments by @vbreuss in #1214
- fix: reject a NaN tolerance with its own message by @vbreuss in #1215
- fix: match an open generic type against the whole type hierarchy of the subject by @vbreuss in #1216
- fix: drop the deviations of an abandoned partial match once the collection match completes by @vbreuss in #1218
- fix: compare differences instead of shifted values in time comparisons with a tolerance by @vbreuss in #1219
- fix: short-circuit
Oronce a branch was met by @vbreuss in #1220 - fix: fail the stream length and position expectations when the property cannot be read by @vbreuss in #1222
- fix: apply the duration of a time-boxed delegate expectation as timeout by @vbreuss in #1217
- fix: skip an event the reflective recording cannot attach to by @vbreuss in #1221
- fix: await the async
Becausereason only when a failure message is built by @vbreuss in #1224 - fix: let the
?wildcard match a newline like any other character by @vbreuss in #1225 - fix: reject permutations in the in-order
IsContainedInby @vbreuss in #1227 - fix: compare reflection handles by value in equivalency by @vbreuss in #1228
- test: give the successful
ExecutesIn(…).Within(…)test the same margin as its siblings by @vbreuss in #1229 - fix: never consider a non-finite number within tolerance of a different value by @vbreuss in #1226
- fix!: fail the timing expectations of a delegate that throws by @vbreuss in #1231
- fix: treat a
TimeOnlyas a clock face for equality and ranges, but as a linear value for ordering by @vbreuss in #1230 - feat: expose
Tracing.WriteExceptionso extensions can trace exceptions by @vbreuss in #1232 - fix!: fail a further expectation on a stopped event recording by @vbreuss in #1235
- fix!: never satisfy an expectation on all recursive inner exceptions with an exception that has none by @vbreuss in #1234
- fix!: reject a NaN expected value in the number ordering expectations by @vbreuss in #1236
- fix: say "contiguous" when
Contains(subset)requires the items without other items in between by @vbreuss in #1238 - fix!: reject a date/time range whose maximum precedes its minimum by @vbreuss in #1237
- fix: reject a non-property expression in
TriggeredPropertyChangedForby @vbreuss in #1239 - fix!: report a member that does not exist on the actual object as missing by @vbreuss in #1240
- fix!: bind string patterns to the whole subject instead of to a single line by @vbreuss in #1233
- fix: compare time span equality without computing the difference by @vbreuss in #1242
- fix!: match a field against a property of the same name in an equivalency comparison by @vbreuss in #1243
- test: pin the negated collection type and equality checks and the nullable
DateTimeOffsettolerance by @vbreuss in #1244 - test: cancel lingering delays and loosen wall-clock upper bounds in timing tests by @vbreuss in #1246
- fix!: treat a null or empty property name as a change of every property by @vbreuss in #1241
- test: fix copy-paste tests and cover untested
IsOneOfandIgnoringIndentationoverloads by @vbreuss in #1248 - fix!: let the predicate decide about a
nullsubject inSatisfiesby @vbreuss in #1247 - fix!: bind a collection expectation to the collection instead of to the struct or the predicate by @vbreuss in #1249
- fix!: ignore the casing of a wildcard or regex pattern independent of the current culture by @vbreuss in #1250
- fix!: negate the count after
DidNotTriggerby @vbreuss in #1251 - fix!: reject a null wildcard or regex pattern and an empty regex pattern by @vbreuss in #1253
- fix!: reject a
DateOnlytolerance that is not a whole number of days by @vbreuss in #1254 - fix!: read the underlying enum value through a type that cannot overflow by @vbreuss in #1252
- fix!: compare every type by its members instead of trusting a
truefromEqualsby @vbreuss in #1256 - fix: compare the items of a non-generic
IEnumerablewhose type differs from the expected item type by @vbreuss in #1257 - fix!: reject an empty prefix or suffix expectation by @vbreuss in #1258
- fix!: compare the items of an untyped
IEnumerableinstead of the instances by @vbreuss in #1255 - test: make the remaining timing tests robust against a loaded test agent by @vbreuss in #1260
- fix: never consider a non-finite collection element within tolerance of a different value by @vbreuss in #1259
- fix: name the runtime type when the found and the expected value look the same by @vbreuss in #1264
- fix!: apply the
DateTime.Kindcheck to every comparison, not only toIsEqualToby @vbreuss in #1261 - fix!: treat a dictionary as a keyed lookup instead of a sequence of pairs by @vbreuss in #1263
- fix!: fail
DateTimeordering checks for incompatible kinds by @vbreuss in #1262 - fix!: fail a negated string match type for a
nullsubject by @vbreuss in #1266 - fix!: reject an empty
IsOneOflist even when the subject is null by @vbreuss in #1265 - fix: match unordered collection elements by equivalency instead of sorting them by @vbreuss in #1267
- fix!: remove the misleading
DoesNotExecuteWithinby @vbreuss in #1268 - fix: pair leftover elements by the fewest differences by @vbreuss in #1269
- feat: add an opt-in
AllowingExceptions()toExecutesInby @vbreuss in #1270 - fix!: expose
ContainsKeys(…).WhoseValuesas a collection subject by @vbreuss in #1272 - fix!: rename the inner exception expectations to
HasInner/WithInnerby @vbreuss in #1273 - fix: name the member of a nested
Whosein a collection expectation by @vbreuss in #1274 - fix!: keep the subject type in
IsExactly/IsNotExactlyby @vbreuss in #1271 - fix!: require the in-order
IsContainedInto be contiguous by @vbreuss in #1277 - fix!: rename
AndWhoseResulttoWhoseResultby @vbreuss in #1275 - fix!: stop offering equality options on element type checks by @vbreuss in #1276
- fix: render the whole expectation of a
Whichin a manual evaluation by @vbreuss in #1278 - fix!: rename
SignalTimeoutResulttoDidNotSignalResultby @vbreuss in #1279 - fix!: name every
IsNotContainedInparameterunexpectedby @vbreuss in #1280 - fix!: observe a
TaskorValueTasksubject instead of the task object by @vbreuss in #1281 - fix!: stop offering equality options on the element ComplyWith by @vbreuss in #1282
- fix: do not repeat
whoseafter a connector that already introduced the subject by @vbreuss in #1283 - fix!: stop offering equality options on the async element ComplyWith by @vbreuss in #1284
- chore: Bump the mstest group with 2 updates by @dependabot[bot] in #1285
- chore: Bump Microsoft.NET.Test.Sdk from 18.10.0 to 18.10.1 by @dependabot[bot] in #1291
- chore: Bump Microsoft.Testing.Extensions.CodeCoverage from 18.11.0 to 18.11.2 by @dependabot[bot] in #1292
- chore: Bump FluentAssertions from 8.10.0 to 8.11.0 by @dependabot[bot] in #1288
- fix: detach the handlers of a recording that failed to be constructed by @vbreuss in #1287
- feat: offer a fluent
LimitingRecursionDepthfor equivalency by @vbreuss in #1289 - fix!: bind a collection argument of the untyped
StartsWithas the expected sequence by @vbreuss in #1296 - fix!: reject a
nulllist of expected values inIsOneOfby @vbreuss in #1290 - fix: distinguish a missing inner exception from a null subject and name the property in string property failures by @vbreuss in #1298
- fix!: reject conflicting string equality options by @vbreuss in #1297
- fix!: compare a set and a dictionary by content instead of by enumeration order by @vbreuss in #1295
- chore: Bump Microsoft.Testing.Extensions.CodeCoverage and 4 others by @dependabot[bot] in #1286
- chore: Bump Microsoft.Testing.Extensions.TrxReport and 3 others by @dependabot[bot] in #1300
- fix: apply the upper bound of
ExecutesInas timeout by @vbreuss in #1293 - fix: report the first real deviation of an in-order collection match by @vbreuss in #1299
- fix!: reject a duplicated key in the expected entries of a dictionary by @vbreuss in #1294
- fix!: serve both dictionary interfaces from one declaring type by @vbreuss in #1303
- fix!: reject invalid range, count and tolerance arguments consistently by @vbreuss in #1304
- fix: render an anonymous object through the value formatters by @vbreuss in #1306
- fix: follow the expectation instead of scanning the statement in
aweXpect0001by @vbreuss in #1301 - fix: keep a dictionary key from forming a member path segment by @vbreuss in #1307
- fix: Make per-call equivalency options keep the customized default, and let
For<T>match a derived type by @vbreuss in #1308 - fix!: phrase equivalency where each expectation needs it by @vbreuss in #1305
- feat: reject an object expectation on a delegate subject by @vbreuss in #1302
- chore: record the Core 3.0.0-pre.9 release and build the main package next by @vbreuss in #1309
- chore: restore the default build scope after the 3.0.0-pre.6 release by @vbreuss in #1310
- fix: keep the interfaces that select the set and the dictionary comparison by @vbreuss in #1311
- fix: say the same thing the same way in every failure message by @vbreuss in #1312
- fix: make the collection matcher say what it found by @vbreuss in #1313
- fix: let a string match type agree with its subject and show the casing option by @vbreuss in #1315
- fix: make quantified collection results say what the reader sees by @vbreuss in #1316
- feat: generate collection overloads by @vbreuss in #1314
- feat: generate the number overloads of the target frameworks without generic math by @vbreuss in #1317
- feat: generate the IsOneOf overloads by @vbreuss in #1318
- feat: generate the sign and classification overloads of the target frameworks without generic math by @vbreuss in #1319
- fix: make every expectation text mirror its method name by @vbreuss in #1320
- fix: show the value at hand and agree the verb with plural members by @vbreuss in #1321
- ci: wait for the AOT smoke tests before publishing test results by @vbreuss in #1322
- chore: bump aweXpect.Core to v3.0.0-pre.10 by @vbreuss in #1323
- chore: bump aweXpect to v3.0.0-pre.7 by @vbreuss in #1325
- chore: address Sonar findings by @vbreuss in #1324
- fix!: drop the unused grammars parameter from quantifier factories and reject vacuous success on non-generic collections by @vbreuss in #1327
- fix: warn about expectations in async void methods and local functions by @vbreuss in #1326
- test: pin failure messages and make the remaining timing tests meaningful under load by @vbreuss in #1330
- feat: close the ImmutableArray and time tolerance gaps in the collection expectations by @vbreuss in #1333
- fix!: require at least one recursive inner exception instead of rejecting vacuous success by @vbreuss in #1332
- fix!: bind string and untyped collection arguments of the untyped collection expectations by meaning by @vbreuss in #1328
- feat: add
IsNotPositiveandIsNotNegativefor numbers by @vbreuss in #1329 - feat: add
IncludingUncasedLetters()to the string casing expectations by @vbreuss in #1331 - perf!: stop writing an
AsyncLocalon every awaited expectation by @vbreuss in #1334 - fix: compare in-order equality position by position instead of restarting the match by @vbreuss in #1335
- fix: report inserted and removed items in in-order equality failures by @vbreuss in #1336
- fix: show the difference in time failures and keep tolerances next to the expected values by @vbreuss in #1337
- fix: name the caller's parameter when a string pattern is rejected by @vbreuss in #1338
- fix: do not throw for timeouts beyond the range of the timers by @vbreuss in #1339
- fix: pass the plain grammars to the inner exception constraint of
WithInner<T>(expectations)andWithInner(Type)by @vbreuss in #1340 - fix: keep the negation and skip the member expectations for an inner exception of another type in
WithInnerandHasInnerby @vbreuss in #1341 - docs: correct XML docs that were wrong or copied from another member by @vbreuss in #1343
- docs: describe the current behaviour and make the samples compile by @vbreuss in #1342
- fix: prefer the
Taskdelegate overloads ofExpect.Thatfor lambdas that also fitValueTaskby @vbreuss in #1344 - docs: add remarks for behaviour that the summaries do not reveal by @vbreuss in #1345
- docs: make the XML docs follow one consistent style by @vbreuss in #1346
- fix!: fail ordering and range expectations against a
nullvalue or bound in both forms by @vbreuss in #1347 - docs: state where the default time comparison tolerance applies by @vbreuss in #1348
- fix: format only public instance fields and properties of an object by @vbreuss in #1349
- fix!: compare by value in equivalency when either side is compared by value by @vbreuss in #1352
- fix!: keep
IsGreaterThan/IsLessThanof numbers strict when a tolerance is set by @vbreuss in #1350 - fix: compare dictionary values with the object equality of collection
Containsby @vbreuss in #1351 - fix!: look dictionary keys up through the subject in equivalency by @vbreuss in #1353
- fix!: stop
For<T>comparison types from leaking into the members ofTby @vbreuss in #1357 - fix!: count expected keys that collapse onto one subject key only once in dictionary
IsEqualToby @vbreuss in #1358 - fix!: answer
ContainsandDoesNotContainon a set through the set's own lookup by @vbreuss in #1355 - fix!: make negated time ordering and range expectations with a tolerance the exact inverse by @vbreuss in #1359
- fix!: abandon an awaited task once the timeout or cancellation applies by @vbreuss in #1356
- feat: add negated comparisons for numbers by @vbreuss in #1360
- fix: compare numbers of different types as
objectby value instead of wrapping on net8+ by @vbreuss in #1354 - fix!: bound each
Eventually()attempt by the retry timeout and observe abandoned async members by @vbreuss in #1361 - fix!: stop waiting for an async enumerable once the timeout or cancellation applies by @vbreuss in #1362
- chore: bump aweXpect.Core to v3.0.0-pre.11 by @vbreuss in #1363
- chore: restore the default build scope after the 3.0.0-pre.8 release by @vbreuss in #1364
- refactor: consolidate comparer helpers into
CollectionComparerHelpersby @vbreuss in #1366 - fix: skip properties without a public getter when formatting by reflection by @vbreuss in #1367
- test: disable discovery enumeration for unserializable member data and stop a flaky eventually test by @vbreuss in #1371
- fix!: surface a cancellation between async enumerable items as a cancellation by @vbreuss in #1370
- fix!: honour the subject's comparer in dictionary equivalency and set collection expectations by @vbreuss in #1369
- fix: match explicitly implemented interface properties in equivalency by @vbreuss in #1368
- fix!: reject an empty
IsOneOfset when the expectation is built by @vbreuss in #1372 - refactor: address Sonar findings by @vbreuss in #1374
- fix!: apply and show the default time tolerance for collections and reject a sub-day DateOnly tolerance when it is specified by @vbreuss in #1373
- fix: keep the signaler expectation text stable when it is rendered more than once by @vbreuss in #1376
- fix!: wait for recorded events asynchronously on netstandard2.0 and honour the evaluation's cancellation by @vbreuss in #1375
- docs: let the migration repo own the migration pages by @vbreuss in #1365
- docs: fix contradictions, wrong examples and inconsistent style found in the docs by @vbreuss in #1377
- fix!: name the caller's parameter at the remaining string option call sites by @vbreuss in #1379
- fix!: honour StringComparison in polyfills, detect NaN via generic math and return the nullable subject from IsFinite on netstandard2.0 by @vbreuss in #1378
- docs: drop the custom heading ID that breaks the MDX build of the site by @vbreuss in #1381
- feat!: use ValueTask for the extension points and ValueTask subjects on every target framework by @vbreuss in #1380
- fix: use one template for validation and argument messages by @vbreuss in #1382
- fix!: report every exception from user code as a failed expectation by @vbreuss in #1383
- fix!: reject a null prefix or suffix and an invalid regex before the subject is inspected by @vbreuss in #1385
- fix!: reject conflicting and repeated options when the expectation is built by @vbreuss in #1386
- fix!: reject null predicates, member accessors, dictionary keys and inverted enum ranges when the expectation is built by @vbreuss in #1384
- fix!: report a timeout as "did not finish within" and a caller cancellation as inconclusive everywhere by @vbreuss in #1387
- fix!: render a placeholder instead of throwing when formatting a value calls throwing code by @vbreuss in #1388
- feat: add DoesNotImply for bool and bool? by @vbreuss in #1389
- fix!: let the tighter time limit win and validate every timeout when it is set by @vbreuss in #1391
- fix: name members in lowercase and answer property checks with the expectation's own subject by @vbreuss in #1393
- fix: report every exception from user code as " did throw a/an :" by @vbreuss in #1390
- fix: use restrictive "that", non-restrictive ", which" and an article for items in failure messages by @vbreuss in #1392
- fix: render values culture-invariant, unambiguous and on one line where they fit by @vbreuss in #1394
- feat!: remove
ExecutesWithinin favour ofExecutesIn().AtMost(…)by @vbreuss in #1396 - fix: show the value or the state in negated results and answer "is not equal to dictionary" with "was" by @vbreuss in #1397
- feat!: configure Eventually() with Within and CheckEvery and show default waits by @vbreuss in #1395
- fix: invert the quantifier in negated counts and name what
DoesNotContain…found by @vbreuss in #1399 - fix: use one verb per collection mismatch and name a shared subject only once in combined results by @vbreuss in #1398
- fix: apply one layout rule to multi-part collection and equivalency results by @vbreuss in #1401
- fix: one order for expectation options, match types before the value and differences for number ordering by @vbreuss in #1400
- fix!: hand out a non-null subject from every expectation that fails on null by @vbreuss in #1404
- fix: stabilize the CheckEvery test on slow runners and reduce the cognitive complexity of the retry loop by @vbreuss in #1406
- refactor!: name single count comparisons
expectedand member accessorsmemberAccessorby @vbreuss in #1402 - feat!: name the expression of every expected collection and keep a reference subject's type in IsOneOf by @vbreuss in #1405
- feat!: keep the subject type after
HasMessageandHasRecursiveInnerExceptionsand addDoesNotHaveInnerby @vbreuss in #1403 - feat: support
Withinon collection membership checks and forDateOnly/TimeOnlycollections by @vbreuss in #1409 - feat: flag Equals on expectation results and positional comparisons of unordered collections by @vbreuss in #1408
- feat: add negated comparisons to the property, enum value and count builders by @vbreuss in #1407
- feat!: generate every dictionary expectation per subject type and give value checks equality options by @vbreuss in #1411
- feat!: add
IgnoringCaseto char equality, typedVersionequality andHasSingle().MatchingExactly<T>()by @vbreuss in #1410 - feat!: let a collection's own comparer decide every collection check and name it in the expectation by @vbreuss in #1412
- test: exercise the nullable overload in tests by @vbreuss in #1414
- docs: finish the XML doc wording cleanup by @vbreuss in #1415
- test: name tests after the outcome they assert by @vbreuss in #1417
- feat!: string match types on collection
StartsWith/EndsWithandAreEqualToby @vbreuss in #1413 - refactor: unify how generated expectations are declared by @vbreuss in #1416
- chore: bump aweXpect.Core to v3.0.0-pre.12 by @vbreuss in #1418
- chore: bump aweXpect to v3.0.0-pre.9 by @vbreuss in #1420
- test: fix sonar issues in tests by @vbreuss in #1421
- docs: review the documentation pages by @vbreuss in #1419
- fix: keep the separator of a leading ForWhich in the failure message by @vbreuss in #1422
- fix: signaling after a wait for multiple signals no longer throws by @vbreuss in #1423
- fix: treat undecided expectations in ThatAll and ThatAny as inconclusive by @vbreuss in #1424
- fix: find a same-order contiguous match that starts inside an abandoned partial match by @vbreuss in #1425
- chore: Bump the nunit group with 1 update by @dependabot[bot] in #1427
- chore: Bump System.Text.Json from 10.0.10 to 10.0.12 by @dependabot[bot] in #1430
- feat: warn about
ValueTaskdelegates that are never awaited by @vbreuss in #1426 - chore: Bump coverlet.collector from 10.0.1 to 10.1.0 by @dependabot[bot] in #1429
- fix: use the De Morgan connector for negated per-item and AndWhose combinations by @vbreuss in #1431
- chore: Bump TUnit, TUnit.Assertions and TUnit.Core by @dependabot[bot] in #1428
- fix: sync collection Contains and IsEqualTo honor cancellation and timeout by @vbreuss in #1433
- fix: HasSingle().Which no longer enumerates the source a second time by @vbreuss in #1432
- fix: do not count additional/missing items as deviations for any-order Contains/IsContainedIn by @vbreuss in #1434
- feat!: compare numbers and
StringBuilderby value in equivalency by @vbreuss in #1435 - feat!: remove
IncludeMembers.Privatefrom equivalency by @vbreuss in #1436 - feat!: resolve
For<T>equivalency options lazily and prefer the expected type by @vbreuss in #1437 - feat!: compare types implementing
IEqualityComparerby their members in equivalency by @vbreuss in #1439 - fix: make the signaler safe for concurrent waits and signals by @vbreuss in #1440
- fix!: share one polling loop for Satisfies and CompliesWith by @vbreuss in #1442
- fix!: isolate customizations per async flow, restore only the changed setting and add global defaults by @vbreuss in #1441
- fix: collection expectations honor cancellation and timeout by @vbreuss in #1443
- fix: HasSingle returns the item for object collections and HasCount uses the count of non-generic collections by @vbreuss in #1444
- fix: never render an empty reason for a combined expectation by @vbreuss in #1445
- fix: enumerate the subject and the expected sequence only once by @vbreuss in #1446
- fix: number and select the contexts of nested ThatAll and ThatAny combinations correctly by @vbreuss in #1447
- fix: report a null task clearly, keep chained Within consistent and show the param name in the context by @vbreuss in #1449
- fix: render separators, reasons and negation in per-item expectation texts by @vbreuss in #1448
- feat: add WithoutInner as the negated WithInner twin on the Throws chain by @vbreuss in #1452
- fix: name the right subject in nested property, single item and dictionary value results by @vbreuss in #1453
- refactor!: remove unused MemberVisibilities and AnyButNotInDuplicatesAsync and rename the internal equivalency extensions by @vbreuss in #1454
- feat!: align the nullability of the Throws chain with the exception expectations by @vbreuss in #1455
- fix: reduce async member lambdas to their member path in failure messages by @vbreuss in #1451
- fix: negate nested quantifier texts once and show the relevant items under negation by @vbreuss in #1450
- fix: fall back to the global customization once all lifetimes of a group in the flow are disposed by @vbreuss in #1457
- fix: surface the other exceptions of a faulted task in the failure message by @vbreuss in #1458
- fix: align thrown exception messages and the whitespace spelling with the message conventions by @vbreuss in #1460
- fix: make formatter precedence deterministic, ignore late events in stopped recordings and avoid deadlocks when verifying synchronously by @vbreuss in #1461
- fix: unify failure message wording for cancellation, HasSingle, type mismatches and trimmed expressions by @vbreuss in #1459
- fix: keep generated expectations across incremental runs and narrow the metadata generator's semantic work by @vbreuss in #1456
- fix: make the aweXpect0001 code fix await the expectation in its innermost function and only offer it where the result compiles by @vbreuss in #1462
- test: close negation and coverage gaps by @vbreuss in #1465
- chore: make analyzer release tracking effective, add help links and fix packaging hygiene by @vbreuss in #1466
- test: fix tests that did not exercise what their names claim by @vbreuss in #1464
- fix: make the analyzers and the IsNotNull suppressor more precise by @vbreuss in #1463
- fix: follow-ups from negated signaler expectations, tracing, synchronous verification, async members, wording by @vbreuss in #1467
- docs: align the docs with the actual behaviour on main by @vbreuss in #1468
- test: keep timing-dependent tests stable when the test process stalls by @vbreuss in #1469
- chore: resolve the accepted Sonar issues in source so they no longer surface in the CI analysis by @vbreuss in #1470
- fix: close the remaining analyzer gaps after #1463 by @vbreuss in #1471
- test: cover negation of nullable DateOnly and TimeSpan expectations by @vbreuss in #1472
- fix!: Include protected internal members, close EnumerableQuantifier and fix negated DoesNotThrow by @vbreuss in #1473
- fix: word nested value quantifiers, negated quantified Contains and matched prefixes naturally by @vbreuss in #1474
- feat!: accept a nullable expected count in
HasCountby @vbreuss in #1475 - chore: Update aweXpect.Core package version to 3.0.0-pre.13 by @vbreuss in #1476
- chore: bump aweXpect to v3.0.0-pre.10 by @vbreuss in #1478
- docs: restructure the documentation by @vbreuss in #1479
- test: sort test methods alphabetically within their classes by @vbreuss in #1477
- fix: keep forced outcomes and render the deciding result when negating after evaluation by @vbreuss in #1482
- fix!: return a not-null subject from nullable number ordering, format char numbers numerically and fail DateTime ranges with incompatible bounds by @vbreuss in #1481
- fix: validate exception Type arguments and match open generic exception types by @vbreuss in #1483
- fix: reject duplicate recorded event names and report null tasks outside delegates by @vbreuss in #1480
- fix: report throwing event filters, validate positions and times, and name all-property notifications by @vbreuss in #1484
- docs: fix review findings and add section landing pages by @vbreuss in #1487
- fix: compare null items, fail incompatible kinds under negation and handle default ImmutableArray in collection expectations by @vbreuss in #1486
- feat: honour
[GuaranteesNotNull]on expectations of extension packages by @vbreuss in #1488 - fix: stop formatting cycles through collections and apply registered formatters to every value by @vbreuss in #1485
- docs: give the nullability suppressor and metadata generator their own headings so they appear in the navigation by @vbreuss in #1491
- ci: move Core mutation tests to a nightly run and split the slow slices by @vbreuss in #1494
- test: only treat rule ID headings on the analyzers page as rule sections, since the page now also has headings for the suppressor and the generator by @vbreuss in #1496
- test: keep the cancellation tests against hanging sources independent of timing by @vbreuss in #1497
- feat: let extensions share the materialized subject of built-in collection expectations by @vbreuss in #1498
- fix: report Equals on delegate subjects and make aweXpect2001 suppressible by pragma by @vbreuss in #1490
- feat: make QuantifiedCollectionConstraint public for extension expectations on collection items by @vbreuss in #1493
- fix: offer the await and ValueTask code fixes only where the result compiles by @vbreuss in #1489
- ci: queue builds of the same ref instead of cancelling the pending one by @vbreuss in #1500
- refactor!: store every customization value under its own key by @vbreuss in #1499
- feat: make DayTolerance public in aweXpect.Core by @vbreuss in #1492
- feat: make the repeated check loop of RepeatedCheckOptions public by @vbreuss in #1495
- fix: detect cycles that a registered formatter reaches by formatting nested values by @vbreuss in #1502
- test: pin that every Version ordering against null fails also when negated after evaluation by @vbreuss in #1501
- fix!: validate the formatting customization values and return a stored null by @vbreuss in #1503
- fix: escape strings in failure messages like C# literals so that different values never look the same by @vbreuss in #1506
- fix: format float and double values round-trippable so that different values never look the same by @vbreuss in #1505
- fix: fail normally on decimal overflow and reject invalid tolerances and counts without storing them by @vbreuss in #1504
- fix: close registration gaps of the metadata generator and registry by @vbreuss in #1507
- fix: keep the string difference window and truncation faithful to the value by @vbreuss in #1508
- fix: match newer runtime types by name in the netstandard2.0 build by @vbreuss in #1510
- fix: make registered and reflected equivalency members agree for hiding, setter-only overrides and ref properties by @vbreuss in #1511
- fix: align collection failure messages across subject types and sync/async siblings by @vbreuss in #1512
- docs: describe repeated-check cancellation, leading-whitespace mismatch positions and the remaining .NET 8-only behaviour as they are by @vbreuss in #1513
- fix: apply the default time tolerance to dictionary values and show the difference in number messages by @vbreuss in #1509
- fix: escape and truncate string keys and values of multi-line dictionary entries by @vbreuss in #1514
- fix: select the formatted members of unregistered types like equivalency does by @vbreuss in #1515
- fix: lay out non-nullable expected items of a nullable subject on one line by @vbreuss in #1516
- fix: report unmatched dictionary keys when the key comparer cannot be read by @vbreuss in #1519
- fix: honour the comparers of immutable and frozen sets in the netstandard2.0 build by @vbreuss in #1518
- fix: keep the string difference window from splitting a surrogate pair or a line break by @vbreuss in #1517
- docs: point to Native AOT support from the entry points by @vbreuss in #1522
- fix: report a null expected collection of non-nullable items like the other overloads by @vbreuss in #1521
- fix: apply the default time tolerance to dictionary entries and to an expected immutable array by @vbreuss in #1520
- docs: use the music examples of the other pages in the extending section by @vbreuss in #1523
- chore: bump aweXpect.Core to v3.0.0-pre.14 by @vbreuss in #1524
- fix: keep the exception type check of
Throws(Type)andThrowsExactlyin front ofOrby @vbreuss in #1525 - fix: make the generated code compile for every supported consumer by @vbreuss in #1527
- fix: scope
WhichandWhoseValueto the preceding operand ofAnd/Orby @vbreuss in #1526 - fix: keep failures of nested member expectations failed under negation by @vbreuss in #1528
- fix: match collection items correctly with
InAnyOrderandIgnoringDuplicatesby @vbreuss in #1530 - fix!: report null and faulted subjects as failures instead of leaking internal exceptions by @vbreuss in #1529
- fix: validate arguments and settings up front by @vbreuss in #1532
- fix!: make the string comparison options consistent by @vbreuss in #1531
- fix!: stop enumerating collections once the result is known and dispose their enumerators by @vbreuss in #1533
- fix!: compose
And/Orfailure messages readably by @vbreuss in #1534 - feat!: keep the concrete stream type through
Streamexpectations by @vbreuss in #1535 - fix!: treat dictionary key comparers and the negation of ContainsKeys/ContainsValues consistently by @vbreuss in #1537
- fix!: use a consistent default string order in ordering expectations by @vbreuss in #1538
- fix: judge timeouts the same way for collections and scalars by @vbreuss in #1536
- fix: format numbers, records, tuples, type names and dictionaries consistently by @vbreuss in #1539
- fix: report item expectations that fail both ways in
ComplyWith,HasItemThatand expectation-item collections by @vbreuss in #1540 - fix: only offer compiling code fixes, and only suppress warnings for evaluated expectations by @vbreuss in #1541
- fix: describe in-order collection mismatches from the exact matching by @vbreuss in #1542
- fix: make value formatting safe for deep graphs and fix the nested layout by @vbreuss in #1543
- fix: correct nullable annotations and close the gaps in the
GuaranteesNotNullharness by @vbreuss in #1544 - fix: reset QuantifiedCollectionConstraint between evaluations and let the built-in collection constraints use it by @vbreuss in #1545
- docs: correct statements that don't match the behaviour by @vbreuss in #1548
- feat!: let extensions built on aweXpect.Core add expectations on collection items and repeated checks by @vbreuss in #1547
- fix: correct misleading and inconsistent failure messages by @vbreuss in #1546
- fix: compare JSON, regex, IP address, encoding and memory values by their content in equivalency by @vbreuss in #1549
- fix: saturate the upper bound of ExecutesIn(...).Within(...), fail negated string member checks for a null value, and show where suffixes and long strings differ by @vbreuss in #1550
- fix: reset
StartsWith,EndsWithand ordering expectations between evaluations and stop reading after the verdict by @vbreuss in #1551 - fix: keep event recordings attached for the whole expectation and align the signaler's
Withinwith the other waits by @vbreuss in #1552 - fix!: treat combinations of flags as defined and take a non-nullable flag in
HasFlagby @vbreuss in #1553 - fix!: make the equivalency options, member lookup and failure messages behave the same on every path by @vbreuss in #1554
- fix!: remove the empty
aweXpect.ThatDelegateand align parameter names and summaries of the public API by @vbreuss in #1555 - fix!: judge repeated checks by the effective timeout and share one polling loop by @vbreuss in #1556
- fix: name the member, the item and the key that a failure message is about by @vbreuss in #1557
- fix!: let
IgnoringDuplicates()only care which items occur, and keep collection item expectations honest by @vbreuss in #1558 - feat!: give dictionary values, integer items and string equality the same comparison options as their siblings by @vbreuss in #1559
- docs: show the condition and event benchmarks on the benchmark page by @vbreuss in #1560
- perf: allocate less while a successful expectation is evaluated by @vbreuss in #1561
- perf: remove more work that a successful expectation does not need by @vbreuss in #1563
- feat: let results add the contexts that explain a failure by @vbreuss in #1562
- perf: stop quadratic and copying work in collection expectations by @vbreuss in #1564
- chore: bump aweXpect.Core to v3.0.0-pre.15 by @vbreuss in #1566
- fix: compile aweXpect.Core.Tests in Release while the released aweXpect still declares the moved types by @vbreuss in #1567
- chore: bump aweXpect to v3.0.0-pre.11 by @vbreuss in #1568
- perf: decide the type checks of equivalency once per type by @vbreuss in #1565
- fix: accept string-valued dictionaries and immutable arrays of string without a nullability warning by @vbreuss in #1569
- docs: explain when Native AOT drops the interface implementations the generic interface lookup relies on by @vbreuss in #1571
- perf: resolve the members of a type pair once and build member paths only when they are read by @vbreuss in #1570
- ci: run the full mutation tests only nightly by @vbreuss in #1573
- perf: evaluate an expectation through a ValueTask chain and return a met result right away by @vbreuss in #1574
- ci: publish benchmark results only from main by @vbreuss in #1575
- refactor: write each collection constraint once for sync, non-generic and async subjects by @vbreuss in #1576
- fix: keep deep equivalency comparisons from overflowing the stack by @vbreuss in https://github.com/Testably/aweXpect/pull/1577
- perf: evaluate a simple expectation synchronously when nothing in it waits by @vbreuss in https://github.com/Testably/aweXpect/pull/1578
- refactor: let results say when an expectation could not be answered by @vbreuss in https://github.com/Testably/aweXpect/pull/1572
- perf: pass the values of a constraint as state to a static AddConstraint lambda by @vbreuss in https://github.com/Testably/aweXpect/pull/1579
- fix!: offer no quantifiers after Signaled(times) by @vbreuss in https://github.com/Testably/aweXpect/pull/1580
- perf!: return a ValueTaskAwaiter from ExpectationResult<TType, TSelf>GetAwaiter by @vbreuss in https://github.com/Testably/aweXpect/pull/1583
- chore: resolve recent Sonar findings by @vbreuss in https://github.com/Testably/aweXpect/pull/1582
- refactor(core): share the delegate constraints between delegates with and without value by @vbreuss in https://github.com/Testably/aweXpect/pull/1581
- chore: Update aweXpect.Core version to 3.0.0-pre.16 by @vbreuss in https://github.com/Testably/aweXpect/pull/1584
- chore: bump aweXpect to v3.0.0-pre.12 by @vbreuss in https://github.com/Testably/aweXpect/pull/1585
- feat(core): offer the standard failure contexts and equivalency to Core-only extensions by @vbreuss in https://github.com/Testably/aweXpect/pull/1590
- feat(core): make extension helpers, CustomizationValue and a context-free IsMetBy public by @vbreuss in https://github.com/Testably/aweXpect/pull/1591
- perf!: return a ValueTask from IAsyncConstraint and IAsyncContextConstraint by @vbreuss in https://github.com/Testably/aweXpect/pull/1586
- perf: let Contains on collections allocate less by @vbreuss in https://github.com/Testably/aweXpect/pull/1587
- feat!: let options be chained in any order and specified only once by @vbreuss in https://github.com/Testably/aweXpect/pull/1589
- refactor: keep grammar helpers next to ExpectationGrammars and make Get public for extension authors by @vbreuss in https://github.com/Testably/aweXpect/pull/1592
- fix(core)!: require the delegate when creating a delegate subject by @vbreuss in https://github.com/Testably/aweXpect/pull/1594
- refactor!: hide author-only properties from delegate subjects by @vbreuss in https://github.com/Testably/aweXpect/pull/1593
- fix(core): let a tighter timeout win over the bound of ExecutesIn and Throws().Within by @vbreuss in https://github.com/Testably/aweXpect/pull/1595
- test: shorten the sleeps that outlast a timeout by @vbreuss in https://github.com/Testably/aweXpect/pull/1596
- perf: lower the overhead that every expectation pays by @vbreuss in https://github.com/Testably/aweXpect/pull/1598
- perf: let a met IsEqualTo on collections and dictionaries skip the failure report by @vbreuss in https://github.com/Testably/aweXpect/pull/1597
- refactor!: share one count model and one tolerance model by @vbreuss in https://github.com/Testably/aweXpect/pull/1599
- refactor: remove unused collection helpers and share the identical polyfills with aweXpect.Core by @vbreuss in https://github.com/Testably/aweXpect/pull/1601
- fix: report a bare GetAwaiter(), keep primary-constructor parameters out of the suppressor and warn when no test framework adapter is registered by @vbreuss in https://github.com/Testably/aweXpect/pull/1600
- chore: remove files that were committed by accident by @vbreuss in https://github.com/Testably/aweXpect/pull/1602
- chore: bump aweXpect.Core to v3.0.0-pre.17 by @vbreuss in https://github.com/Testably/aweXpect/pull/1603
- fix: remove helper copies that aweXpect.Core v3.0.0-pre.17 now provides by @vbreuss in https://github.com/Testably/aweXpect/pull/1604
- chore: bump aweXpect to v3.0.0-pre.13 by @vbreuss in https://github.com/Testably/aweXpect/pull/1609
- perf: let StartsWith, EndsWith, AreEqualTo and AreUnique on collections allocate less by @vbreuss in https://github.com/Testably/aweXpect/pull/1608
- fix: keep an async
Becausereason when a met expectation is negated or combined afterwards by @vbreuss in https://github.com/Testably/aweXpect/pull/1606 - fix: reset the per-evaluation state of reused constraints by @vbreuss in https://github.com/Testably/aweXpect/pull/1605
- fix!: make repeated checks behave like a fresh evaluation per attempt by @vbreuss in https://github.com/Testably/aweXpect/pull/1607
- fix: stop HasItem at the single index and treat untyped in-memory sets as complete by @vbreuss in https://github.com/Testably/aweXpect/pull/1611
- test: give the Eventually property tests enough time for a second evaluation by @vbreuss in https://github.com/Testably/aweXpect/pull/1614
- chore: let the benchmarks use the generated type metadata by @vbreuss in https://github.com/Testably/aweXpect/pull/1612
- fix: stop collection expectations at unanswered items consistently and show their contexts by @vbreuss in https://github.com/Testably/aweXpect/pull/1610
- test: expect HasItemThat at an index to stop reading after that index by @vbreuss in https://github.com/Testably/aweXpect/pull/1617
- docs: correct statements that contradict the code and the docs' own advice by @vbreuss in https://github.com/Testably/aweXpect/pull/1615
- fix: align argument validation and XML remarks of a few APIs with their siblings by @vbreuss in https://github.com/Testably/aweXpect/pull/1616
- perf: let event recordings allocate less by @vbreuss in https://github.com/Testably/aweXpect/pull/1613
- perf!: return a ValueTask from the remaining evaluation APIs by @vbreuss in https://github.com/Testably/aweXpect/pull/1618
- perf: avoid small allocations on common expectation paths by @vbreuss in https://github.com/Testably/aweXpect/pull/1620
- fix: close gaps in the generated metadata registrations and framework adapters by @vbreuss in https://github.com/Testably/aweXpect/pull/1623
- perf: let the string difference of large values allocate less by @vbreuss in https://github.com/Testably/aweXpect/pull/1622
- perf: compare null and value-compared members of equivalency without a state machine or boxes by @vbreuss in https://github.com/Testably/aweXpect/pull/1621
- test: make two timing-dependent tests robust on slow CI runners by @vbreuss in https://github.com/Testably/aweXpect/pull/1625
- perf: let quantified collection expectations and the any-order and containment matchers allocate less by @vbreuss in https://github.com/Testably/aweXpect/pull/1619
- perf!: compare the items of collections with equivalency without writing a failure text by @vbreuss in https://github.com/Testably/aweXpect/pull/1624
- fix: restore the build of main and resolve open Sonar findings in tests by @vbreuss in https://github.com/Testably/aweXpect/pull/1626
- chore: bump aweXpect.Core to v3.0.0-pre.18 by @vbreuss in https://github.com/Testably/aweXpect/pull/1627
- chore: bump aweXpect to v3.0.0-pre.14 by @vbreuss in https://github.com/Testably/aweXpect/pull/1636
- feat: include TUnit in the benchmarks and compare each library to aweXpect in the PR comment by @vbreuss in https://github.com/Testably/aweXpect/pull/1631
- fix!: compare duplicates with the expectation's comparison and stop Contains(...).InAnyOrder() once decided by @vbreuss in https://github.com/Testably/aweXpect/pull/1629
- fix!: reject
LessThan(0)andMoreThan(int.MaxValue), which no count can meet by @vbreuss in https://github.com/Testably/aweXpect/pull/1633 - fix: keep undefined status codes, blank reasons and thrown messages readable in failure messages by @vbreuss in https://github.com/Testably/aweXpect/pull/1630
- fix!: keep Within/OnlyIf off the .And/.Or continuation of Throws, stop typed DoesNotThrow from returning a fake result and validate delegate timeouts by @vbreuss in https://github.com/Testably/aweXpect/pull/1632
- fix!: let type checks accept nullable and value-type subjects, and show the difference for numbers' IsNotBetween by @vbreuss in https://github.com/Testably/aweXpect/pull/1635
- fix!: ignore whitespace only at the edges of the subject, let
?match a surrogate pair, escape multi-line formatted strings and report suffix differences "at index" by @vbreuss in https://github.com/Testably/aweXpect/pull/1628 - fix!: let Whose continue from a converted value, fail an undecided expectation that nothing canceled and keep stored values within an item or member evaluation by @vbreuss in https://github.com/Testably/aweXpect/pull/1634
- fix!: return a ValueTask from the expectation text and repeated check callbacks, and complete the docs on dictionary Keys/Values, Quantifier exceptions and ForWhich by @vbreuss in https://github.com/Testably/aweXpect/pull/1637
- fix!: word negated
Signaledresults correctly, return the subject fromCompliesWith, letIsParsableIntoexplain other operands, invert a set outcome ofExpectationOnly<T>, resetHasRecursiveInnerExceptionsper evaluation and indent combined and generic values consistently by @vbreuss in https://github.com/Testably/aweXpect/pull/1638 - perf: add fast paths for a met
IsEqualToon collections, in order and in any order by @vbreuss in https://github.com/Testably/aweXpect/pull/1639 - fix: report the deviation limit that was actually exceeded and list missing items above the limit for collection
IsEqualToby @vbreuss in https://github.com/Testably/aweXpect/pull/1640 - fix: group a negated
Andinside a negatedOrand restore the subject name after a nested member by @vbreuss in https://github.com/Testably/aweXpect/pull/1641 - fix: abandon an async
Whichmember when the evaluation times out or is canceled by @vbreuss in https://github.com/Testably/aweXpect/pull/1642 - fix: consider a
nullproperty value equal tonullinPropertyResult.EqualToandNotEqualToby @vbreuss in https://github.com/Testably/aweXpect/pull/1643 - fix: do not await an async
Becausereason of an operand that is only evaluated for its expectation text by @vbreuss in https://github.com/Testably/aweXpect/pull/1644 - fix!: treat the same instance on both sides of an equivalency comparison as equivalent by @vbreuss in https://github.com/Testably/aweXpect/pull/1645
- fix: skip an event with a ref-struct or pointer parameter instead of failing the recording of its whole type by @vbreuss in https://github.com/Testably/aweXpect/pull/1646
- fix!: format a task by its status and compare tasks by reference, so a pending
Task<T>no longer blocks a failure message or an equivalency comparison by @vbreuss in https://github.com/Testably/aweXpect/pull/1648 - fix!: match the items of a set subject through its own comparer in
IsEquivalentToby @vbreuss in https://github.com/Testably/aweXpect/pull/1649 - fix: return the value of the right operand when expectations are combined with
AndorOrby @vbreuss in https://github.com/Testably/aweXpect/pull/1650 - fix: return the default value when a met expectation has no value of the awaited type by @vbreuss in https://github.com/Testably/aweXpect/pull/1652
- fix: let the expectations of one
ThatAll/ThatAnyshare an event recording by @vbreuss in https://github.com/Testably/aweXpect/pull/1647 - fix!: let
Because,WithTimeoutandWithCancellationbe used afterWhoseandAndWhoseof anAndOrWhoseResultby @vbreuss in https://github.com/Testably/aweXpect/pull/1651 - feat: warn when the value of an expectation is used after an
Or(aweXpect0008) by @vbreuss in https://github.com/Testably/aweXpect/pull/1653 - chore: Bump the tunit group with 4 updates by @dependabot[bot] in https://github.com/Testably/aweXpect/pull/1654
- fix!: do not offer
AsPrefixandAsSuffixon stringContainsby @vbreuss in https://github.com/Testably/aweXpect/pull/1655 - fix: compare objects that are shared in a graph once instead of once per path in
IsEquivalentToby @vbreuss in https://github.com/Testably/aweXpect/pull/1657 - docs: correct XML documentation that contradicts the code by @vbreuss in https://github.com/Testably/aweXpect/pull/1659
- fix!: validate member names, predicates, event names and collections of expectations at the call by @vbreuss in https://github.com/Testably/aweXpect/pull/1656
- chore: bump aweXpect.Core to v3.0.0-pre.19 by @vbreuss in https://github.com/Testably/aweXpect/pull/1661
- chore: bump aweXpect to V3.0.0-pre.15 by @vbreuss in https://github.com/Testably/aweXpect/pull/1662
- fix!: treat a default
ImmutableArraylike anullcollection by @vbreuss in https://github.com/Testably/aweXpect/pull/1660 - fix: enumerate the expected sequence of collection
IsEqualToandIsContainedInonly once per expectation by @vbreuss in https://github.com/Testably/aweXpect/pull/1668 - fix: skip every type that is compared by value or by content in the metadata generator by @vbreuss in https://github.com/Testably/aweXpect/pull/1667
- fix: accept finite numbers whose distance overflows in strict ordering with an infinite tolerance by @vbreuss in https://github.com/Testably/aweXpect/pull/1666
- fix!: do not offer a second
Matchingon the result ofHasSingle().Matching…by @vbreuss in https://github.com/Testably/aweXpect/pull/1663 - fix!: report an exception of a dictionary subject as a failed expectation in
Contains,ContainsValue(s)andIsEqualToby @vbreuss in https://github.com/Testably/aweXpect/pull/1664 - fix!: reject a property expression of
TriggeredPropertyChangedForthat is no property of the subject by @vbreuss in https://github.com/Testably/aweXpect/pull/1665 - refactor: make the timeout and retry tests independent of the machine speed by @vbreuss in https://github.com/Testably/aweXpect/pull/1658
- chore: bump aweXpect to v3.0.0-pre.16 by @vbreuss in https://github.com/Testably/aweXpect/pull/1670
- refactor: reduce the cognitive complexity of
EmitRegistrationin theTypeMetadataGeneratorby @vbreuss in https://github.com/Testably/aweXpect/pull/1671 - test: migrate the unit tests from xUnit v2 to TUnit by @vbreuss in https://github.com/Testably/aweXpect/pull/1672
- fix!: compare the members that a collection type declares itself in
IsEquivalentToby @vbreuss in https://github.com/Testably/aweXpect/pull/1669 - refactor: cleanup code by @vbreuss in https://github.com/Testably/aweXpect/pull/1673
- fix!: reject a repeated
IgnoringCaseon chars by @vbreuss in https://github.com/Testably/aweXpect/pull/1675 - fix!: reject a second
OnlyIfon the same expectation by @vbreuss in https://github.com/Testably/aweXpect/pull/1674 - fix!: reject a repeated
WithCancellationby @vbreuss in https://github.com/Testably/aweXpect/pull/1677 - test: cover lines that no test reached by @vbreuss in https://github.com/Testably/aweXpect/pull/1678
- feat: add a guarded
SetMatchoverload toCollectionIndexOptionsby @vbreuss in https://github.com/Testably/aweXpect/pull/1679 - test: make the synchronous signaler wait tests independent of the thread pool by @vbreuss in https://github.com/Testably/aweXpect/pull/1683
- feat!: add an optional
boolparameter toAllowingExceptions,IncludingUncasedLetters,IgnoringDuplicatesandIgnoringInterspersedItemsby @vbreuss in https://github.com/Testably/aweXpect/pull/1682 - fix!: reject a repeated execution time limit by @vbreuss in https://github.com/Testably/aweXpect/pull/1680
- fix!: reject a repeated order comparer by @vbreuss in https://github.com/Testably/aweXpect/pull/1681
- fix!: reject a second
Matching…on the same result by @vbreuss in https://github.com/Testably/aweXpect/pull/1676 - chore: bump aweXpect.Core to v3.0.0-pre.20 by @vbreuss in https://github.com/Testably/aweXpect/pull/1685
- fix: wake a synchronous
Signaler.Waitwithout the thread pool by @vbreuss in https://github.com/Testably/aweXpect/pull/1684 - chore: bump aweXpect to v3.0.0-pre.17 by @vbreuss in https://github.com/Testably/aweXpect/pull/1687
- test: make real-time dependent tests of
Eventually,Pollingand the signaler deterministic by @vbreuss in https://github.com/Testably/aweXpect/pull/1686 - ci: identify the pull request of an analysed run by the event instead of its artifacts by @vbreuss in https://github.com/Testably/aweXpect/pull/1688
- fix: describe the last attempt in
IsOneOfandIsNotOneOfonDateTimeafter an earlier incompatible kind by @vbreuss in https://github.com/Testably/aweXpect/pull/1689 - ci: disable the mutation tests and pin the Stryker version by @vbreuss in https://github.com/Testably/aweXpect/pull/1693
- test: pin the NUnit 4 adapter tests to NUnit 4 and add a project for NUnit 5 by @vbreuss in https://github.com/Testably/aweXpect/pull/1690
- fix!: hand out a non-null subject when awaiting
IsParsableIntoon a string by @vbreuss in https://github.com/Testably/aweXpect/pull/1691 - ci: close gaps in the test runs and the public API check of pull requests by @vbreuss in https://github.com/Testably/aweXpect/pull/1692
- fix: bound the check of an attempt of
Eventually()by the retry budget by @vbreuss in https://github.com/Testably/aweXpect/pull/1695 - fix: fail the expectation when the enumerator or the current item of a materialized subject throws by @vbreuss in https://github.com/Testably/aweXpect/pull/1697
- fix: keep the outcome of a quantified expectation when user code throws after the deciding item of a collection with a known count by @vbreuss in https://github.com/Testably/aweXpect/pull/1698
- fix: format a collection whose
Countthrows instead of throwing from the formatter by @vbreuss in https://github.com/Testably/aweXpect/pull/1699 - fix: fail the expectation when the count or the enumeration of a collection subject that is not materialized throws by @vbreuss in https://github.com/Testably/aweXpect/pull/1701
- fix: report the timeout when it cuts short a wait that started later in the evaluation by @vbreuss in https://github.com/Testably/aweXpect/pull/1694
- fix!: name the parameter of the negated ordering comparisons on the result types
unexpectedby @vbreuss in https://github.com/Testably/aweXpect/pull/1700 - fix!: compare the dimensions of multi-dimensional arrays in
IsEquivalentToby @vbreuss in https://github.com/Testably/aweXpect/pull/1696 - fix: keep and bound an async
Becausereason by @vbreuss in https://github.com/Testably/aweXpect/pull/1703 - fix: keep the outcome of an expectation when tracing throws by @vbreuss in https://github.com/Testably/aweXpect/pull/1702
- fix: do not report an item as in wrong order when a duplicate of it is in order for
ContainsandIsContainedInby @vbreuss in https://github.com/Testably/aweXpect/pull/1704 - fix: make the equality of expectation nodes symmetric and consistent with their hash code by @vbreuss in https://github.com/Testably/aweXpect/pull/1706
- fix: skip the operands after a failed guard in an
Andchain that follows anOrby @vbreuss in https://github.com/Testably/aweXpect/pull/1705 - fix!: reject an unusable pattern of a string
IsOneOfwhichever value the subject matches by @vbreuss in https://github.com/Testably/aweXpect/pull/1707 - feat: evaluate nested
It.Is…expectations as part of the evaluation and run its waits on the time system by @vbreuss in https://github.com/Testably/aweXpect/pull/1711 - test: stop timing tests from depending on which overdue timer runs first by @vbreuss in https://github.com/Testably/aweXpect/pull/1731
- fix: evaluate a
Queue<T>, aStack<T>and anIReadOnlyCollection<T>like aList<T>by @vbreuss in https://github.com/Testably/aweXpect/pull/1709 - fix: render the overload resolution priority of generated collection expectations with the invariant culture by @vbreuss in https://github.com/Testably/aweXpect/pull/1712
- refactor!: cover the remaining result paths and remove dead result types by @vbreuss in https://github.com/Testably/aweXpect/pull/1708
- fix: name the right item and position in the explanation of a failed collection comparison by @vbreuss in https://github.com/Testably/aweXpect/pull/1716
- ci: drop the dangling
steps.tagreference of the release step and report a failed release by @vbreuss in https://github.com/Testably/aweXpect/pull/1710 - fix: trace the value of a delegate without enumerating a lazy sequence by @vbreuss in https://github.com/Testably/aweXpect/pull/1713
- test: cover the remaining reachable branches of the value expectations and their helpers by @vbreuss in https://github.com/Testably/aweXpect/pull/1719
- docs: document
Fail,Skipand theSignalerwaits, and state the thrown exception per test framework by @vbreuss in https://github.com/Testably/aweXpect/pull/1714 - test: assert the major version of the test framework in the versioned adapter test projects by @vbreuss in https://github.com/Testably/aweXpect/pull/1717
- test: cover the collection expectations for item types without a tolerance, nullable members and the culture comparers of a set by @vbreuss in https://github.com/Testably/aweXpect/pull/1720
- test: cover the untested paths of the expectation nodes, builders and results in Core by @vbreuss in https://github.com/Testably/aweXpect/pull/1723
- feat: let tests run an expectation on another time system by @vbreuss in https://github.com/Testably/aweXpect/pull/1737
- test: run the timing tests on the virtual clock instead of in real time by @vbreuss in https://github.com/Testably/aweXpect/pull/1738
- refactor: remove code that the callers' guarantees make unreachable by @vbreuss in https://github.com/Testably/aweXpect/pull/1730
- fix: negate a count that every amount meets with
notinstead of an empty range likefewer than 0 timesby @vbreuss in https://github.com/Testably/aweXpect/pull/1733 - test: cover the reachable analyzer and code fix paths that no test reached by @vbreuss in https://github.com/Testably/aweXpect/pull/1728
- fix: describe and trace a member of
ThatAllandThatAnylike a single expectation by @vbreuss in https://github.com/Testably/aweXpect/pull/1718 - fix: use consistent count rule in the remaining collection helpers by @vbreuss in https://github.com/Testably/aweXpect/pull/1736
- test: cover the generator paths that no test reached by @vbreuss in https://github.com/Testably/aweXpect/pull/1725
- test: cover the core helpers, sources and customization paths that no Core test reached by @vbreuss in https://github.com/Testably/aweXpect/pull/1724
- test: cover the uncovered paths of the core options by @vbreuss in https://github.com/Testably/aweXpect/pull/1722
- fix: let a nested
HasLinesread as a verb phrase that the expectation on the lines can attach to by @vbreuss in https://github.com/Testably/aweXpect/pull/1732 - test: cover the formatter paths for special numbers, depth limits and generic-only dictionaries by @vbreuss in https://github.com/Testably/aweXpect/pull/1727
- test: cover the equivalency paths that no Core test reached by @vbreuss in https://github.com/Testably/aweXpect/pull/1726
- fix!: reject an unusable string pattern whichever subject it is verified for by @vbreuss in https://github.com/Testably/aweXpect/pull/1734
- fix: name a member accessor from an expression that is no member path by @vbreuss in https://github.com/Testably/aweXpect/pull/1715
- test: cover the untested paths of the delegate, signaler and event recording expectations by @vbreuss in https://github.com/Testably/aweXpect/pull/1721
- fix: keep the failure when code of the caller throws while the failure message is built by @vbreuss in https://github.com/Testably/aweXpect/pull/1729
- fix: stop waiting for user code when the timeout elapses or the evaluation is canceled by @vbreuss in https://github.com/Testably/aweXpect/pull/1735
- chore: bump aweXpect.Core to v3.0.0-pre.21 by @vbreuss in https://github.com/Testably/aweXpect/pull/1739
- chore: bump aweXpect to v3.0.0-pre.18 by @vbreuss in https://github.com/Testably/aweXpect/pull/1740
- fix: show the whole string difference when the minimum number of characters after it is close to
int.MaxValueby @vbreuss in https://github.com/Testably/aweXpect/pull/1741 - fix: do not suppress nullability warnings when the statement of the expectation overwrites the subject by @vbreuss in https://github.com/Testably/aweXpect/pull/1742
- fix!: check the kinds of
DateTimevalues in an untyped collection when verifying its order by @vbreuss in https://github.com/Testably/aweXpect/pull/1744 - fix: keep an event recording running across the repeated checks of
CompliesWith(…).Within(…)by @vbreuss in https://github.com/Testably/aweXpect/pull/1745 - fix!: pass a null argument to the predicate of the positional event filters by @vbreuss in https://github.com/Testably/aweXpect/pull/1747
- fix: stop reading the source for the failure message of the synchronous
IsEmptyby @vbreuss in https://github.com/Testably/aweXpect/pull/1746 - fix!: match the items of a sorted set subject through its own comparer in
IsEquivalentToby @vbreuss in https://github.com/Testably/aweXpect/pull/1743 - fix: correct five failure message texts of aweXpect.Core by @vbreuss in https://github.com/Testably/aweXpect/pull/1749
- ci: report the coverage to Sonar in its generic format by @vbreuss in https://github.com/Testably/aweXpect/pull/1751
- test: cover the boundaries and null bounds of the range expectations on the property results by @vbreuss in https://github.com/Testably/aweXpect/pull/1748
- fix: align multi-line results in combinations and trim multi-line predicates by @vbreuss in https://github.com/Testably/aweXpect/pull/1750
- chore: bump aweXpect.Core to v3.0.0-pre.22 by @vbreuss in https://github.com/Testably/aweXpect/pull/1752
- chore: bump aweXpect to v3.0.0-pre.19 by @vbreuss in https://github.com/Testably/aweXpect/pull/1753
- docs: shorten the v3 migration guide and trim the reference pages by @vbreuss in https://github.com/Testably/aweXpect/pull/1754
- chore: publish to nuget.org via trusted publishing by @vbreuss in https://github.com/Testably/aweXpect/pull/1756
- feat: add subject contexts to the expectation builder by @vbreuss in https://github.com/Testably/aweXpect/pull/1755
- docs: address review feedback on configuration, date/time and equivalency pages by @vbreuss in https://github.com/Testably/aweXpect/pull/1757
- feat!: let a custom
IStringMatchTypevalidate the expected value and the options by @vbreuss in https://github.com/Testably/aweXpect/pull/1759 - feat: let extensions add values to the built-in customization groups by @vbreuss in https://github.com/Testably/aweXpect/pull/1760
- feat: let extensions evaluate nested expectations as part of their evaluation by @vbreuss in https://github.com/Testably/aweXpect/pull/1761
- feat: let a custom
IStringMatchTypereport a subject it cannot compare by @vbreuss in https://github.com/Testably/aweXpect/pull/1762 - docs: hide the namespaces of the extending samples in a collapsed block by @vbreuss in https://github.com/Testably/aweXpect/pull/1765
- feat: let extensions word a string member failure like core by @vbreuss in https://github.com/Testably/aweXpect/pull/1763
- fix: keep the subject description of a constraint when its user code throws by @vbreuss in https://github.com/Testably/aweXpect/pull/1764
- docs: explain the metadata registration methods and drop the testing and packaging page by @vbreuss in https://github.com/Testably/aweXpect/pull/1766
- fix: correct four analyzer rules that reported too much or too little by @vbreuss in https://github.com/Testably/aweXpect/pull/1768
- feat: name the member or item in the reason of a
NotComparablematch result by @vbreuss in https://github.com/Testably/aweXpect/pull/1767 - fix: build the analyzers and generators against Roslyn 4.8 by @vbreuss in https://github.com/Testably/aweXpect/pull/1769
- ci: pin the GitHub Actions to full commit SHAs by @vbreuss in https://github.com/Testably/aweXpect/pull/1770
- docs: add the extension packages as a section between Behaviour and Analyzers by @vbreuss in https://github.com/Testably/aweXpect/pull/1772
- chore: Bump the mstest group with 2 updates by @dependabot[bot] in https://github.com/Testably/aweXpect/pull/1771
- chore: Bump the tunit group with 6 updates by @dependabot[bot] in https://github.com/Testably/aweXpect/pull/1774
- chore: Bump the nunit group with 1 update by @dependabot[bot] in https://github.com/Testably/aweXpect/pull/1773
- chore: Bump the xunit group with 4 updates by @dependabot[bot] in https://github.com/Testably/aweXpect/pull/1775
- chore: bump aweXpect.Core to v3.0.0 by @vbreuss in https://github.com/Testably/aweXpect/pull/1777
- docs: clarify the once-only rule for extension options and past-tense naming for recorded occurrences by @vbreuss in https://github.com/Testably/aweXpect/pull/1778
New Contributors
Full Changelog: v2.40.0...v3.0.0