Repository: qpid-proton Updated Branches: refs/heads/master f53c7683d -> 0bdba37da
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0bdba37d/tests/include/catch_extra.hpp ---------------------------------------------------------------------- diff --git a/tests/include/catch_extra.hpp b/tests/include/catch_extra.hpp new file mode 100644 index 0000000..14e2a2f --- /dev/null +++ b/tests/include/catch_extra.hpp @@ -0,0 +1,107 @@ +#ifndef CATCH_EXTRA_HPP +#define CATCH_EXTRA_HPP + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// Extensions to the Catch2 framework + +#include <catch.hpp> + +namespace Catch { +namespace Matchers { + +// Matcher for NUL terminated C-strings. + +/* Example: +const char *x, *y + +CHECK(x == y); // POINTER equality, probably not what you want. + +using Catch::Matchers::Equals; +CHECK_THAT(x, Equals(y)); // String equality, like strcmp() +*/ + +namespace CString { + +struct CStringMatcherBase : MatcherBase<const char *> { + const std::string m_operation; + const char *m_comparator; + + CStringMatcherBase(const std::string &operation, const char *comparator) + : m_operation(operation), m_comparator(comparator) {} + std::string describe() const CATCH_OVERRIDE { + return m_operation + ": " + Catch::toString(m_comparator); + } +}; + +struct EqualsMatcher : CStringMatcherBase { + EqualsMatcher(const char *comparator) + : CStringMatcherBase("equals", comparator) {} + bool match(const char *source) const CATCH_OVERRIDE { + // match if both null or both non-null and equal + return source == m_comparator || + (source && m_comparator && + std::string(source) == std::string(m_comparator)); + } +}; + +struct ContainsMatcher : CStringMatcherBase { + ContainsMatcher(const char *comparator) + : CStringMatcherBase("contains", comparator) {} + bool match(const char *source) const CATCH_OVERRIDE { + return source && m_comparator && Catch::contains(source, m_comparator); + } +}; + +struct StartsWithMatcher : CStringMatcherBase { + StartsWithMatcher(const char *comparator) + : CStringMatcherBase("starts with", comparator) {} + bool match(const char *source) const CATCH_OVERRIDE { + return source && m_comparator && Catch::startsWith(source, m_comparator); + } +}; + +struct EndsWithMatcher : CStringMatcherBase { + EndsWithMatcher(const char *comparator) + : CStringMatcherBase("ends with", comparator) {} + bool match(const char *source) const CATCH_OVERRIDE { + return source && m_comparator && Catch::endsWith(source, m_comparator); + } +}; + +} // namespace CString + +inline CString::EqualsMatcher Equals(const char *str) { + return CString::EqualsMatcher(str); +} +inline CString::ContainsMatcher Contains(const char *str) { + return CString::ContainsMatcher(str); +} +inline CString::StartsWithMatcher StartsWith(const char *str) { + return CString::StartsWithMatcher(str); +} +inline CString::EndsWithMatcher EndsWith(const char *str) { + return CString::EndsWithMatcher(str); +} + +} // namespace Matchers +} // namespace Catch + +#endif // CATCH_EXTRA_HPP --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org