From 11283b3d7c90abe1f811dfcc31dd50c99ea256a2 Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Mon, 17 Jun 2024 11:42:48 -0700 Subject: [PATCH] Add more information to various asserts. --- lib/src/model/inheritable.dart | 23 +++++++++++++++++++---- test/extensions_test.dart | 5 ++++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/src/model/inheritable.dart b/lib/src/model/inheritable.dart index 94f03ef7f1..e671dc147b 100644 --- a/lib/src/model/inheritable.dart +++ b/lib/src/model/inheritable.dart @@ -92,8 +92,12 @@ mixin Inheritable on ContainerMember { definingEnclosingContainer.isPublic) { assert( definingEnclosingContainer == found, - 'For $element, expected $definingEnclosingContainer to be Object ' - 'or $found, but was neither.'); + "For '$element' (${element.hashCode}) " + "(search element: '$searchElement', ${searchElement?.hashCode}, in " + "'${searchElement?.enclosingElement}'), expected " + "'$definingEnclosingContainer', which is canonical, to be '$found'," + "but was not. Here's the inheritance chain: " + '${inheritance.reversed}.'); } if (found != null) { return found; @@ -112,8 +116,19 @@ mixin Inheritable on ContainerMember { ]; var object = packageGraph.specialClasses[SpecialClass.object]!; - assert(definingEnclosingContainer == object || - inheritance.contains(definingEnclosingContainer)); + assert( + definingEnclosingContainer == object || + inheritance.contains(definingEnclosingContainer), () { + var inheritanceDescriptions = inheritance + .map((e) => + "'$e' (hashCode: ${e.hashCode}, in library '${e.library}')") + .toList(); + return "Given '$this', on '$enclosingElement' in library '$library', " + "the defining enclosing container, '$definingEnclosingContainer' " + '(hashCode: ${definingEnclosingContainer.hashCode}, ' + "in library '${definingEnclosingContainer.library}'), should have " + 'been Object or contained in: $inheritanceDescriptions'; + }()); // Unless the code explicitly extends dart:core's Object, we won't get // an entry here. So add it. if (inheritance.last != object) { diff --git a/test/extensions_test.dart b/test/extensions_test.dart index 63a432acb6..f23e7f982e 100644 --- a/test/extensions_test.dart +++ b/test/extensions_test.dart @@ -70,7 +70,10 @@ class ExtensionMethodsExportTest extends DartdocTestBase { var fFunction = package.functions.named('f'); var reference = getMatchingLinkElement(referenceText, fFunction) .commentReferable as ModelElement; - expect(identical(reference.canonicalModelElement, expected), isTrue); + expect(identical(reference.canonicalModelElement, expected), isTrue, + reason: '$expected (${expected.hashCode}) is not ' + '${reference.canonicalModelElement} ' + '(${reference.canonicalModelElement.hashCode})'); expect(expected.isCanonical, isTrue); expect(expected.href, endsWith(href)); }