[Darwin] Fix MTRDevice getAllAttributesReport return value (#35471)
* [Darwin] Fix MTRDevice getAllAttributesReport return value
* Restyled by clang-format
---------
Co-authored-by: Restyled.io <commits@restyled.io>
diff --git a/src/darwin/Framework/CHIP/MTRDevice_Concrete.mm b/src/darwin/Framework/CHIP/MTRDevice_Concrete.mm
index b38f381..706642a 100644
--- a/src/darwin/Framework/CHIP/MTRDevice_Concrete.mm
+++ b/src/darwin/Framework/CHIP/MTRDevice_Concrete.mm
@@ -3511,8 +3511,12 @@
clusterID:clusterPath.cluster
attributeID:attributeID];
- // Using _lockedAttributeValueDictionaryForAttributePath because it takes into consideration expected values too
- [attributeReport addObject:[self _lockedAttributeValueDictionaryForAttributePath:attributePath]];
+ // Construct response-value dictionary with the data-value dictionary returned by
+ // _lockedAttributeValueDictionaryForAttributePath, to takes into consideration expected values as well.
+ [attributeReport addObject:@{
+ MTRAttributePathKey : attributePath,
+ MTRDataKey : [self _lockedAttributeValueDictionaryForAttributePath:attributePath]
+ }];
}
}
diff --git a/src/darwin/Framework/CHIPTests/MTRDeviceTests.m b/src/darwin/Framework/CHIPTests/MTRDeviceTests.m
index 87b7371..615ff63 100644
--- a/src/darwin/Framework/CHIPTests/MTRDeviceTests.m
+++ b/src/darwin/Framework/CHIPTests/MTRDeviceTests.m
@@ -4323,11 +4323,28 @@
[self waitForExpectations:@[ gotReportEnd ] timeout:60];
- XCTAssertEqual(attributesReceived, 36);
-
NSArray * allAttributesReport = [device getAllAttributesReport];
- XCTAssertEqual(allAttributesReport.count, 36);
+ XCTAssertEqual(allAttributesReport.count, attributeReport.count);
+
+ for (NSDictionary<NSString *, id> * newResponseValueDict in allAttributesReport) {
+ MTRAttributePath * newPath = newResponseValueDict[MTRAttributePathKey];
+ NSDictionary<NSString *, id> * newDataValueDict = newResponseValueDict[MTRDataKey];
+ NSNumber * newValue = newDataValueDict[MTRValueKey];
+ XCTAssertNotNil(newValue);
+
+ for (NSDictionary<NSString *, id> * originalResponseValueDict in attributeReport) {
+ MTRAttributePath * originalPath = originalResponseValueDict[MTRAttributePathKey];
+ // Find same attribute path and compare value
+ if ([newPath isEqual:originalPath]) {
+ NSDictionary<NSString *, id> * originalDataValueDict = originalResponseValueDict[MTRDataKey];
+ NSNumber * originalValue = originalDataValueDict[MTRValueKey];
+ XCTAssertNotNil(originalValue);
+ XCTAssertEqualObjects(newValue, originalValue);
+ continue;
+ }
+ }
+ }
}
@end