Browse Source

Trade: improve AnimationData OOB assertion messages.

This still contained the original message which didn't say the index.
Times changed significantly since then, and the printed index really
proved to be useful.

Also fixing a OOB assertion in the test triggered by the new ArrayView
element access assertions -- the graceful assertion returns the first
element, so we have to have at least one there to return.
pull/499/head
Vladimír Vondruš 3 years ago
parent
commit
d16dbcd93c
  1. 22
      src/Magnum/Trade/AnimationData.cpp
  2. 27
      src/Magnum/Trade/Test/AnimationDataTest.cpp

22
src/Magnum/Trade/AnimationData.cpp

@ -78,34 +78,42 @@ Containers::ArrayView<char> AnimationData::mutableData() & {
}
AnimationTrackType AnimationData::trackType(UnsignedInt id) const {
CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::trackType(): index out of range", {});
CORRADE_ASSERT(id < _tracks.size(),
"Trade::AnimationData::trackType(): index" << id << "out of range for" << _tracks.size() << "tracks", {});
return _tracks[id]._type;
}
AnimationTrackType AnimationData::trackResultType(UnsignedInt id) const {
CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::trackResultType(): index out of range", {});
CORRADE_ASSERT(id < _tracks.size(),
"Trade::AnimationData::trackResultType(): index" << id << "out of range for" << _tracks.size() << "tracks", {});
return _tracks[id]._resultType;
}
AnimationTrackTargetType AnimationData::trackTargetType(UnsignedInt id) const {
CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::trackTargetType(): index out of range", {});
CORRADE_ASSERT(id < _tracks.size(),
"Trade::AnimationData::trackTargetType(): index" << id << "out of range for" << _tracks.size() << "tracks", {});
return _tracks[id]._targetType;
}
UnsignedLong AnimationData::trackTarget(UnsignedInt id) const {
CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::trackTarget(): index out of range", {});
CORRADE_ASSERT(id < _tracks.size(),
"Trade::AnimationData::trackTarget(): index" << id << "out of range for" << _tracks.size() << "tracks", {});
return _tracks[id]._target;
}
const Animation::TrackViewStorage<const Float>& AnimationData::track(UnsignedInt id) const {
CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::track(): index out of range", _tracks[id]._view);
CORRADE_ASSERT(id < _tracks.size(),
"Trade::AnimationData::track(): index" << id << "out of range for" << _tracks.size() << "tracks", _tracks[0]._view);
return _tracks[id]._view;
}
const Animation::TrackViewStorage<Float>& AnimationData::mutableTrack(UnsignedInt id) {
CORRADE_ASSERT(_dataFlags & DataFlag::Mutable,
"Trade::AnimationData::mutableTrack(): the animation is not mutable", reinterpret_cast<const Animation::TrackViewStorage<Float>&>(_tracks[id]._view));
CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::track(): index out of range", reinterpret_cast<const Animation::TrackViewStorage<Float>&>(_tracks[id]._view));
"Trade::AnimationData::mutableTrack(): the animation is not mutable",
reinterpret_cast<const Animation::TrackViewStorage<Float>&>(_tracks[id]._view));
CORRADE_ASSERT(id < _tracks.size(),
"Trade::AnimationData::mutableTrack(): index" << id << "out of range for" << _tracks.size() << "tracks",
reinterpret_cast<const Animation::TrackViewStorage<Float>&>(_tracks[0]._view));
return reinterpret_cast<const Animation::TrackViewStorage<Float>&>(_tracks[id]._view);
}

27
src/Magnum/Trade/Test/AnimationDataTest.cpp

@ -579,19 +579,24 @@ void AnimationDataTest::trackWrongIndex() {
std::ostringstream out;
Error redirectError{&out};
AnimationData data{nullptr, nullptr};
data.trackType(0);
data.trackResultType(0);
data.trackTargetType(0);
data.trackTarget(0);
data.track(0);
AnimationData data{nullptr, {
AnimationTrackData{AnimationTrackType::Vector3,
AnimationTrackTargetType::Scaling3D, 0, {}}
}};
data.trackType(1);
data.trackResultType(1);
data.trackTargetType(1);
data.trackTarget(1);
data.track(1);
data.mutableTrack(1);
CORRADE_COMPARE(out.str(),
"Trade::AnimationData::trackType(): index out of range\n"
"Trade::AnimationData::trackResultType(): index out of range\n"
"Trade::AnimationData::trackTargetType(): index out of range\n"
"Trade::AnimationData::trackTarget(): index out of range\n"
"Trade::AnimationData::track(): index out of range\n");
"Trade::AnimationData::trackType(): index 1 out of range for 1 tracks\n"
"Trade::AnimationData::trackResultType(): index 1 out of range for 1 tracks\n"
"Trade::AnimationData::trackTargetType(): index 1 out of range for 1 tracks\n"
"Trade::AnimationData::trackTarget(): index 1 out of range for 1 tracks\n"
"Trade::AnimationData::track(): index 1 out of range for 1 tracks\n"
"Trade::AnimationData::mutableTrack(): index 1 out of range for 1 tracks\n");
}
void AnimationDataTest::trackWrongType() {

Loading…
Cancel
Save