diff --git a/src/AttributeTraits.cpp b/src/AttributeTraits.cpp index f162e4e2494ea19e22c3284ffb100a7585e00a4b..5d7ed552deeac23aedc9f695638f5906bb930821 100644 --- a/src/AttributeTraits.cpp +++ b/src/AttributeTraits.cpp @@ -28,7 +28,7 @@ namespace hdbpp_internal bool AttributeTraits::isValid() const noexcept { // ensure all the type information is valid - return _attr_write_type != Tango::WT_UNKNOWN || _attr_format != Tango::FMT_UNKNOWN || + return _attr_write_type != Tango::WT_UNKNOWN && _attr_format != Tango::FMT_UNKNOWN && _attr_type != Tango::DATA_TYPE_UNKNOWN; } diff --git a/test/AttributeTraitsTests.cpp b/test/AttributeTraitsTests.cpp index 17ef18907c152d726f89a994d4e50e6ee3c6c43e..72a9d83c364e2e30a092555a584ed4343b477616 100644 --- a/test/AttributeTraitsTests.cpp +++ b/test/AttributeTraitsTests.cpp @@ -28,6 +28,7 @@ SCENARIO("Attribute format returns expected results", "[attribute-traits]") GIVEN("Constructed AttributeTraits as an Array") { AttributeTraits traits {Tango::READ, Tango::SPECTRUM, Tango::DEV_BOOLEAN}; + REQUIRE(traits.isValid()); WHEN("Checking if traits are an array") { @@ -46,6 +47,7 @@ SCENARIO("Attribute format returns expected results", "[attribute-traits]") GIVEN("Constructed AttributeTraits as a Scalar") { AttributeTraits traits {Tango::READ, Tango::SCALAR, Tango::DEV_BOOLEAN}; + REQUIRE(traits.isValid()); WHEN("Checking if traits are an array") { @@ -64,6 +66,7 @@ SCENARIO("Attribute format returns expected results", "[attribute-traits]") GIVEN("Constructed AttributeTraits as an Image") { AttributeTraits traits {Tango::READ, Tango::IMAGE, Tango::DEV_BOOLEAN}; + REQUIRE(traits.isValid()); WHEN("Checking if traits are an array") { @@ -85,6 +88,7 @@ SCENARIO("Attribute write type returns expected results", "[attribute-traits]") GIVEN("Constructed AttributeTraits as ReadOnly") { AttributeTraits traits {Tango::READ, Tango::SPECTRUM, Tango::DEV_BOOLEAN}; + REQUIRE(traits.isValid()); WHEN("Checking if traits are ReadOnly") { @@ -115,6 +119,7 @@ SCENARIO("Attribute write type returns expected results", "[attribute-traits]") GIVEN("Constructed AttributeTraits as WriteOnly") { AttributeTraits traits {Tango::WRITE, Tango::SPECTRUM, Tango::DEV_BOOLEAN}; + REQUIRE(traits.isValid()); WHEN("Checking if traits are ReadOnly") { @@ -145,6 +150,7 @@ SCENARIO("Attribute write type returns expected results", "[attribute-traits]") GIVEN("Constructed AttributeTraits as ReadWrite") { AttributeTraits traits {Tango::READ_WRITE, Tango::SPECTRUM, Tango::DEV_BOOLEAN}; + REQUIRE(traits.isValid()); WHEN("Checking if traits are ReadOnly") { @@ -175,6 +181,7 @@ SCENARIO("Attribute write type returns expected results", "[attribute-traits]") GIVEN("Constructed AttributeTraits as ReadWithWrite") { AttributeTraits traits {Tango::READ_WITH_WRITE, Tango::SPECTRUM, Tango::DEV_BOOLEAN}; + REQUIRE(traits.isValid()); WHEN("Checking if traits are ReadOnly") { @@ -208,6 +215,7 @@ SCENARIO("Attribute traits accessors return construction time results", "[attrib GIVEN("Constructed AttributeTraits as a Read Only Array of type Tango::DEV_BOOLEAN") { AttributeTraits traits {Tango::READ, Tango::SPECTRUM, Tango::DEV_BOOLEAN}; + REQUIRE(traits.isValid()); WHEN("Checking if traits type is Tango::DEV_BOOLEAN") { @@ -223,3 +231,59 @@ SCENARIO("Attribute traits accessors return construction time results", "[attrib } } } + +SCENARIO("Attribute traits are invalid if not set with valid traits", "[attribute-traits]") +{ + GIVEN("Constructing an AttributeTraits with no traits") + { + AttributeTraits traits; + + WHEN("Checking if traits type is valid") + { + THEN("Result is false") + { + REQUIRE(!traits.isValid()); + REQUIRE(traits.isInvalid()); + } + } + } + GIVEN("Constructing an AttributeTraits with valid write trait") + { + AttributeTraits traits {Tango::READ, Tango::FMT_UNKNOWN, Tango::DATA_TYPE_UNKNOWN}; + + WHEN("Checking if traits type is valid") + { + THEN("Result is false") + { + REQUIRE(!traits.isValid()); + REQUIRE(traits.isInvalid()); + } + } + } + GIVEN("Constructed AttributeTraits with valid format and write traits") + { + AttributeTraits traits {Tango::READ, Tango::SPECTRUM, Tango::DATA_TYPE_UNKNOWN}; + + WHEN("Checking if traits type is valid") + { + THEN("Result is false") + { + REQUIRE(!traits.isValid()); + REQUIRE(traits.isInvalid()); + } + } + } + GIVEN("Constructed AttributeTraits with valid traits") + { + AttributeTraits traits {Tango::READ, Tango::SPECTRUM, Tango::DEV_BOOLEAN}; + + WHEN("Checking if traits type is valid") + { + THEN("Result is true") + { + REQUIRE(traits.isValid()); + REQUIRE(!traits.isInvalid()); + } + } + } +} \ No newline at end of file