Files
test/source/blender/animrig/intern/versioning_test.cc

92 lines
2.9 KiB
C++

/* SPDX-FileCopyrightText: 2024 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/* The tests in this file need to be able to test deprecated data as well. */
#define DNA_DEPRECATED_ALLOW
#include "ANIM_versioning.hh"
#include "DNA_action_types.h"
#include "BLI_listbase.h"
#include "testing/testing.h"
namespace blender::animrig::versioning::tests {
TEST(animrig_versioning, action_is_layered)
{
/* This unit test doesn't put valid data in the action under test. Since action_is_layered()
* only looks at the length of lists, and not their contents, that should be fine. */
{ /* Pre-Animato Action / Blender version 2.49 and older. */
bAction action = {};
Link /* Ipo */ fake_ipo = {};
BLI_addtail(&action.chanbase, &fake_ipo);
EXPECT_FALSE(action_is_layered(action))
<< "Pre-2.5 Actions should NOT be considered 'layered'";
}
{ /* Animato Action only fcurves / Blender version [2.5, 4.4) */
bAction action = {};
Link /* FCurve */ fake_fcurve = {};
BLI_addtail(&action.curves, &fake_fcurve);
EXPECT_FALSE(action_is_layered(action))
<< "Animato Actions should NOT be considered 'layered'";
}
{ /* Animato Action with fcurves + groups / Blender version [2.5, 4.4) */
bAction action = {};
Link /* FCurve */ fake_fcurve = {};
Link /* bActionGroup */ fake_group = {};
BLI_addtail(&action.curves, &fake_fcurve);
BLI_addtail(&action.groups, &fake_group);
EXPECT_FALSE(action_is_layered(action))
<< "Animato Actions should NOT be considered 'layered'";
}
{ /* Animato Action with only groups / Blender version [2.5, 4.4) */
bAction action = {};
Link /* bActionGroup */ fake_group = {};
BLI_addtail(&action.groups, &fake_group);
EXPECT_FALSE(action_is_layered(action))
<< "Animato Actions should NOT be considered 'layered'";
}
{ /* Layered Action with only layers / Blender version 4.4 and newer. */
bAction action = {};
action.layer_array_num = 1;
EXPECT_TRUE(action_is_layered(action)) << "Layered Actions should be considered 'layered'";
}
{ /* Layered Action with only slots / Blender version 4.4 and newer. */
bAction action = {};
action.slot_array_num = 1;
EXPECT_TRUE(action_is_layered(action)) << "Layered Actions should be considered 'layered'";
}
{ /* Layered Action as it exists on disk, with forward-compatible info in there. */
bAction action = {};
Link /* FCurve */ fake_fcurve = {};
action.layer_array_num = 1;
BLI_addtail(&action.curves, &fake_fcurve);
EXPECT_TRUE(action_is_layered(action))
<< "Layered Actions with forward-compat data should be considered 'layered'";
}
{ /* Completely zeroed out Action. */
bAction action = {};
EXPECT_TRUE(action_is_layered(action)) << "Zero'ed-out Actions should be considered 'layered'";
}
}
} // namespace blender::animrig::versioning::tests