1717#include < pw_unit_test/framework.h>
1818
1919#include < app/clusters/soil-measurement-server/soil-measurement-cluster.h>
20-
2120#include < app/clusters/testing/AttributeTesting.h>
21+ #include < app/clusters/testing/ClusterTester.h>
2222#include < app/server-cluster/AttributeListBuilder.h>
23- #include < app/server-cluster/DefaultServerCluster .h>
23+ #include < app/server-cluster/testing/TestServerClusterContext .h>
2424#include < clusters/SoilMeasurement/Attributes.h>
2525#include < clusters/SoilMeasurement/Metadata.h>
2626
@@ -29,15 +29,10 @@ using namespace chip::app;
2929using namespace chip ::app::Clusters;
3030using namespace chip ::app::Clusters::SoilMeasurement;
3131using namespace chip ::app::Clusters::SoilMeasurement::Attributes;
32+ using namespace chip ::Test;
3233
3334namespace {
3435
35- struct TestSoilMeasurementCluster : public ::testing::Test
36- {
37- static void SetUpTestSuite () { ASSERT_EQ (chip::Platform::MemoryInit (), CHIP_NO_ERROR); }
38- static void TearDownTestSuite () { chip::Platform::MemoryShutdown (); }
39- };
40-
4136const Globals::Structs::MeasurementAccuracyRangeStruct::Type kDefaultSoilMoistureMeasurementLimitsAccuracyRange [] = {
4237 { .rangeMin = 0 , .rangeMax = 100 , .percentMax = MakeOptional (static_cast <chip::Percent100ths>(10 )) }
4338};
@@ -66,83 +61,93 @@ class SoilMeasurementClusterLocal : public SoilMeasurementCluster
6661 SoilMoistureMeasuredValue::TypeInfo::Type GetSoilMoistureMeasuredValue () const { return mSoilMoistureMeasuredValue ; }
6762};
6863
69- class SoilMeasurementClusterTest
64+ struct TestSoilMeasurementCluster : public ::testing::Test
7065{
71- SoilMeasurementClusterLocal soilMeasurement;
66+ static void SetUpTestSuite () { ASSERT_EQ ( chip::Platform::MemoryInit (), CHIP_NO_ERROR); }
7267
73- public:
74- template <typename ... Args>
75- SoilMeasurementClusterTest (Args &&... args) : soilMeasurement(std::forward<Args>(args)...)
68+ static void TearDownTestSuite () { chip::Platform::MemoryShutdown (); }
69+
70+ void SetUp () override { ASSERT_EQ (soilMeasurement.Startup (context), CHIP_NO_ERROR); }
71+
72+ void TearDown () override { soilMeasurement.Shutdown (); }
73+
74+ TestSoilMeasurementCluster () :
75+ context (testContext.Create()), soilMeasurement(kEndpointWithSoilMeasurement , kDefaultSoilMoistureMeasurementLimits )
7676 {}
7777
78- template <typename F>
79- void Check (F check)
80- {
81- check (soilMeasurement);
82- }
78+ chip::Test::TestServerClusterContext testContext;
79+ ServerClusterContext context;
80+ SoilMeasurementClusterLocal soilMeasurement;
8381};
8482
8583} // namespace
8684
8785TEST_F (TestSoilMeasurementCluster, AttributeTest)
8886{
89- SoilMeasurementClusterTest (kEndpointWithSoilMeasurement , kDefaultSoilMoistureMeasurementLimits )
90- .Check ([](SoilMeasurementClusterLocal & soilMeasurement) {
91- ReadOnlyBufferBuilder<DataModel::AttributeEntry> attributes;
92- ASSERT_EQ (
93- soilMeasurement.Attributes (ConcreteClusterPath (kEndpointWithSoilMeasurement , SoilMeasurement::Id), attributes),
94- CHIP_NO_ERROR);
95-
96- ReadOnlyBufferBuilder<DataModel::AttributeEntry> expected;
97- AttributeListBuilder listBuilder (expected);
98- ASSERT_EQ (listBuilder.Append (Span (SoilMeasurement::Attributes::kMandatoryMetadata ), {}), CHIP_NO_ERROR);
99- ASSERT_TRUE (Testing::EqualAttributeSets (attributes.TakeBuffer (), expected.TakeBuffer ()));
100- });
87+ ReadOnlyBufferBuilder<DataModel::AttributeEntry> attributes;
88+ ASSERT_EQ (soilMeasurement.Attributes (ConcreteClusterPath (kEndpointWithSoilMeasurement , SoilMeasurement::Id), attributes),
89+ CHIP_NO_ERROR);
90+
91+ ReadOnlyBufferBuilder<DataModel::AttributeEntry> expected;
92+ AttributeListBuilder listBuilder (expected);
93+ ASSERT_EQ (listBuilder.Append (Span (SoilMeasurement::Attributes::kMandatoryMetadata ), {}), CHIP_NO_ERROR);
94+ ASSERT_TRUE (chip::Testing::EqualAttributeSets (attributes.TakeBuffer (), expected.TakeBuffer ()));
95+ }
96+
97+ TEST_F (TestSoilMeasurementCluster, ReadAttributeTest)
98+ {
99+ ClusterTester tester (soilMeasurement);
100+
101+ uint16_t revision{};
102+ ASSERT_EQ (tester.ReadAttribute (Globals::Attributes::ClusterRevision::Id, revision), CHIP_NO_ERROR);
103+
104+ uint32_t features{};
105+ ASSERT_EQ (tester.ReadAttribute (FeatureMap::Id, features), CHIP_NO_ERROR);
106+
107+ SoilMoistureMeasuredValue::TypeInfo::DecodableType soilMoistureMeasuredValue;
108+ ASSERT_EQ (tester.ReadAttribute (SoilMoistureMeasuredValue::Id, soilMoistureMeasuredValue), CHIP_NO_ERROR);
109+
110+ SoilMoistureMeasurementLimits::TypeInfo::DecodableType soilMoistureMeasurementLimits;
111+ ASSERT_EQ (tester.ReadAttribute (SoilMoistureMeasurementLimits::Id, soilMoistureMeasurementLimits), CHIP_NO_ERROR);
101112}
102113
103114TEST_F (TestSoilMeasurementCluster, SoilMoistureMeasuredValue)
104115{
105- SoilMeasurementClusterTest (kEndpointWithSoilMeasurement , kDefaultSoilMoistureMeasurementLimits )
106- .Check ([](SoilMeasurementClusterLocal & soilMeasurement) {
107- SoilMoistureMeasuredValue::TypeInfo::Type measuredValue;
108- measuredValue.SetNull ();
109- ASSERT_EQ (soilMeasurement.GetSoilMoistureMeasuredValue (), measuredValue);
110-
111- measuredValue = 50 ;
112- ASSERT_EQ (soilMeasurement.SetSoilMoistureMeasuredValue (measuredValue), CHIP_NO_ERROR);
113- ASSERT_EQ (soilMeasurement.GetSoilMoistureMeasuredValue (), measuredValue);
114-
115- measuredValue = 101 ;
116- ASSERT_EQ (soilMeasurement.SetSoilMoistureMeasuredValue (measuredValue), CHIP_ERROR_INVALID_ARGUMENT);
117-
118- measuredValue = -1 ;
119- ASSERT_EQ (soilMeasurement.SetSoilMoistureMeasuredValue (measuredValue), CHIP_ERROR_INVALID_ARGUMENT);
120-
121- measuredValue.SetNull ();
122- ASSERT_EQ (soilMeasurement.SetSoilMoistureMeasuredValue (measuredValue), CHIP_NO_ERROR);
123- ASSERT_EQ (soilMeasurement.GetSoilMoistureMeasuredValue (), measuredValue);
124- });
116+ SoilMoistureMeasuredValue::TypeInfo::Type measuredValue;
117+ measuredValue.SetNull ();
118+ ASSERT_EQ (soilMeasurement.GetSoilMoistureMeasuredValue (), measuredValue);
119+
120+ measuredValue = 50 ;
121+ ASSERT_EQ (soilMeasurement.SetSoilMoistureMeasuredValue (measuredValue), CHIP_NO_ERROR);
122+ ASSERT_EQ (soilMeasurement.GetSoilMoistureMeasuredValue (), measuredValue);
123+
124+ measuredValue = 101 ;
125+ ASSERT_EQ (soilMeasurement.SetSoilMoistureMeasuredValue (measuredValue), CHIP_ERROR_INVALID_ARGUMENT);
126+
127+ measuredValue = -1 ;
128+ ASSERT_EQ (soilMeasurement.SetSoilMoistureMeasuredValue (measuredValue), CHIP_ERROR_INVALID_ARGUMENT);
129+
130+ measuredValue.SetNull ();
131+ ASSERT_EQ (soilMeasurement.SetSoilMoistureMeasuredValue (measuredValue), CHIP_NO_ERROR);
132+ ASSERT_EQ (soilMeasurement.GetSoilMoistureMeasuredValue (), measuredValue);
125133}
126134
127135TEST_F (TestSoilMeasurementCluster, SoilMoistureMeasurementLimits)
128136{
129- SoilMeasurementClusterTest (kEndpointWithSoilMeasurement , kDefaultSoilMoistureMeasurementLimits )
130- .Check ([](SoilMeasurementClusterLocal & soilMeasurement) {
131- const auto & measurementLimits = soilMeasurement.GetSoilMoistureMeasurementLimits ();
132- ASSERT_EQ (measurementLimits.measurementType , kDefaultSoilMoistureMeasurementLimits .measurementType );
133- ASSERT_EQ (measurementLimits.measured , kDefaultSoilMoistureMeasurementLimits .measured );
134- ASSERT_EQ (measurementLimits.minMeasuredValue , kDefaultSoilMoistureMeasurementLimits .minMeasuredValue );
135- ASSERT_EQ (measurementLimits.maxMeasuredValue , kDefaultSoilMoistureMeasurementLimits .maxMeasuredValue );
136-
137- const auto & accuracyRange = measurementLimits.accuracyRanges [0 ];
138- const auto & defaultRange = kDefaultSoilMoistureMeasurementLimits .accuracyRanges [0 ];
139- ASSERT_EQ (accuracyRange.rangeMin , defaultRange.rangeMin );
140- ASSERT_EQ (accuracyRange.rangeMax , defaultRange.rangeMax );
141- ASSERT_EQ (accuracyRange.percentMax .Value (), defaultRange.percentMax .Value ());
142- ASSERT_FALSE (accuracyRange.percentMin .HasValue ());
143- ASSERT_FALSE (accuracyRange.percentTypical .HasValue ());
144- ASSERT_FALSE (accuracyRange.fixedMax .HasValue ());
145- ASSERT_FALSE (accuracyRange.fixedMin .HasValue ());
146- ASSERT_FALSE (accuracyRange.fixedTypical .HasValue ());
147- });
137+ const auto & measurementLimits = soilMeasurement.GetSoilMoistureMeasurementLimits ();
138+ ASSERT_EQ (measurementLimits.measurementType , kDefaultSoilMoistureMeasurementLimits .measurementType );
139+ ASSERT_EQ (measurementLimits.measured , kDefaultSoilMoistureMeasurementLimits .measured );
140+ ASSERT_EQ (measurementLimits.minMeasuredValue , kDefaultSoilMoistureMeasurementLimits .minMeasuredValue );
141+ ASSERT_EQ (measurementLimits.maxMeasuredValue , kDefaultSoilMoistureMeasurementLimits .maxMeasuredValue );
142+
143+ const auto & accuracyRange = measurementLimits.accuracyRanges [0 ];
144+ const auto & defaultRange = kDefaultSoilMoistureMeasurementLimits .accuracyRanges [0 ];
145+ ASSERT_EQ (accuracyRange.rangeMin , defaultRange.rangeMin );
146+ ASSERT_EQ (accuracyRange.rangeMax , defaultRange.rangeMax );
147+ ASSERT_EQ (accuracyRange.percentMax .Value (), defaultRange.percentMax .Value ());
148+ ASSERT_FALSE (accuracyRange.percentMin .HasValue ());
149+ ASSERT_FALSE (accuracyRange.percentTypical .HasValue ());
150+ ASSERT_FALSE (accuracyRange.fixedMax .HasValue ());
151+ ASSERT_FALSE (accuracyRange.fixedMin .HasValue ());
152+ ASSERT_FALSE (accuracyRange.fixedTypical .HasValue ());
148153}
0 commit comments