Skip to content

Commit

Permalink
REQUIRE_THROWS etc take an expression not a block
Browse files Browse the repository at this point in the history
The first argument to REQUIRE_THROWS and REQUIRE_THROWS_AS is
documented as being an expression and recent changes mean that is
now being enforced.

catchorg/Catch2#823
  • Loading branch information
tomhughes committed Apr 9, 2017
1 parent f9c265d commit a064940
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 66 deletions.
4 changes: 1 addition & 3 deletions test/t/issue21.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,7 @@ TEST_CASE("set() works cleanly even if the constructor throws ", "[variant]")
variant_type v = obj;
REQUIRE(v.is<t1>());
REQUIRE(v.get<t1>().value == 42);
REQUIRE_THROWS({
v.set<t2>(13);
});
REQUIRE_THROWS(v.set<t2>(13));
}
REQUIRE(count == 0);
}
84 changes: 21 additions & 63 deletions test/t/variant.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -208,9 +208,7 @@ TEST_CASE("get with wrong type (here: double) should throw", "[variant]")
REQUIRE(var.is<int>());
REQUIRE_FALSE(var.is<double>());
REQUIRE(var.get<int>() == 5);
REQUIRE_THROWS_AS({
var.get<double>();
},
REQUIRE_THROWS_AS(var.get<double>(),
mapbox::util::bad_variant_access&);
}

Expand All @@ -222,13 +220,9 @@ TEST_CASE("get with wrong type (here: int) should throw", "[variant]")
REQUIRE_FALSE(var.is<int>());
REQUIRE(var.get<double>() == 5.0);
REQUIRE(mapbox::util::get<double>(var) == 5.0);
REQUIRE_THROWS_AS({
var.get<int>();
},
REQUIRE_THROWS_AS(var.get<int>(),
mapbox::util::bad_variant_access&);
REQUIRE_THROWS_AS({
mapbox::util::get<int>(var);
},
REQUIRE_THROWS_AS(mapbox::util::get<int>(var),
mapbox::util::bad_variant_access&);
}

Expand All @@ -240,26 +234,18 @@ TEST_CASE("get on const varint with wrong type (here: int) should throw", "[vari
REQUIRE_FALSE(var.is<int>());
REQUIRE(var.get<double>() == 5.0);
REQUIRE(mapbox::util::get<double>(var) == 5.0);
REQUIRE_THROWS_AS({
var.get<int>();
},
REQUIRE_THROWS_AS(var.get<int>(),
mapbox::util::bad_variant_access&);
REQUIRE_THROWS_AS({
mapbox::util::get<int>(var);
},
REQUIRE_THROWS_AS(mapbox::util::get<int>(var),
mapbox::util::bad_variant_access&);
}

TEST_CASE("get with any type should throw if not initialized", "[variant]")
{
mapbox::util::variant<int, double> var{mapbox::util::no_init()};
REQUIRE_THROWS_AS({
var.get<int>();
},
REQUIRE_THROWS_AS(var.get<int>(),
mapbox::util::bad_variant_access&);
REQUIRE_THROWS_AS({
var.get<double>();
},
REQUIRE_THROWS_AS(var.get<double>(),
mapbox::util::bad_variant_access&);
}

Expand All @@ -273,16 +259,12 @@ TEST_CASE("no_init variant can be copied and moved from", "[variant]")

REQUIRE(v2.get<int>() == 42);
v2 = v1;
REQUIRE_THROWS_AS({
v2.get<int>();
},
REQUIRE_THROWS_AS(v2.get<int>(),
mapbox::util::bad_variant_access&);

REQUIRE(v3.get<int>() == 23);
v3 = std::move(v1);
REQUIRE_THROWS_AS({
v3.get<int>();
},
REQUIRE_THROWS_AS(v3.get<int>(),
mapbox::util::bad_variant_access&);
}

Expand All @@ -294,19 +276,15 @@ TEST_CASE("no_init variant can be copied and moved to", "[variant]")
variant_type v2{mapbox::util::no_init()};
variant_type v3{mapbox::util::no_init()};

REQUIRE_THROWS_AS({
v2.get<int>();
},
REQUIRE_THROWS_AS(v2.get<int>(),
mapbox::util::bad_variant_access&);

REQUIRE(v1.get<int>() == 42);
v2 = v1;
REQUIRE(v2.get<int>() == 42);
REQUIRE(v1.get<int>() == 42);

REQUIRE_THROWS_AS({
v3.get<int>();
},
REQUIRE_THROWS_AS(v3.get<int>(),
mapbox::util::bad_variant_access&);

v3 = std::move(v1);
Expand All @@ -327,9 +305,7 @@ TEST_CASE("implicit conversion to first type in variant type list", "[variant][i
using variant_type = mapbox::util::variant<long, char>;
variant_type var = 5l; // converted to long
REQUIRE(var.get<long>() == 5);
REQUIRE_THROWS_AS({
var.get<char>();
},
REQUIRE_THROWS_AS(var.get<char>(),
mapbox::util::bad_variant_access&);
}

Expand Down Expand Up @@ -498,13 +474,9 @@ TEST_CASE("storing reference wrappers works")
variant_type v{std::ref(a)};
REQUIRE(v.get<int>() == 1);
REQUIRE(mapbox::util::get<int>(v) == 1);
REQUIRE_THROWS_AS({
v.get<double>();
},
REQUIRE_THROWS_AS(v.get<double>(),
mapbox::util::bad_variant_access&);
REQUIRE_THROWS_AS({
mapbox::util::get<double>(v);
},
REQUIRE_THROWS_AS(mapbox::util::get<double>(v),
mapbox::util::bad_variant_access&);
a = 2;
REQUIRE(v.get<int>() == 2);
Expand All @@ -515,13 +487,9 @@ TEST_CASE("storing reference wrappers works")
v = std::ref(b);
REQUIRE(v.get<double>() == Approx(3.141));
REQUIRE(mapbox::util::get<double>(v) == Approx(3.141));
REQUIRE_THROWS_AS({
v.get<int>();
},
REQUIRE_THROWS_AS(v.get<int>(),
mapbox::util::bad_variant_access&);
REQUIRE_THROWS_AS({
mapbox::util::get<int>(v);
},
REQUIRE_THROWS_AS(mapbox::util::get<int>(v),
mapbox::util::bad_variant_access&);
b = 2.718;
REQUIRE(v.get<double>() == Approx(2.718));
Expand All @@ -530,9 +498,7 @@ TEST_CASE("storing reference wrappers works")
v.get<double>() = 4.1;
REQUIRE(b == Approx(4.1));

REQUIRE_THROWS_AS({
v.get<int>() = 4;
},
REQUIRE_THROWS_AS(v.get<int>() = 4,
mapbox::util::bad_variant_access&);
}

Expand All @@ -546,26 +512,18 @@ TEST_CASE("storing reference wrappers to consts works")
REQUIRE(v.get<int>() == 1);
REQUIRE(mapbox::util::get<int const>(v) == 1);
REQUIRE(mapbox::util::get<int>(v) == 1);
REQUIRE_THROWS_AS({
v.get<double const>();
},
REQUIRE_THROWS_AS(v.get<double const>(),
mapbox::util::bad_variant_access&);
REQUIRE_THROWS_AS({
mapbox::util::get<double const>(v);
},
REQUIRE_THROWS_AS(mapbox::util::get<double const>(v),
mapbox::util::bad_variant_access&);

double b = 3.141;
v = std::cref(b);
REQUIRE(v.get<double const>() == Approx(3.141));
REQUIRE(mapbox::util::get<double const>(v) == Approx(3.141));
REQUIRE_THROWS_AS({
v.get<int const>();
},
REQUIRE_THROWS_AS(v.get<int const>(),
mapbox::util::bad_variant_access&);
REQUIRE_THROWS_AS({
mapbox::util::get<int const>(v);
},
REQUIRE_THROWS_AS(mapbox::util::get<int const>(v),
mapbox::util::bad_variant_access&);
}

Expand Down

0 comments on commit a064940

Please sign in to comment.