3 #include "testing/testing.h"
37 ID *prev_id =
nullptr;
40 if (prev_id !=
nullptr) {
48 TEST(lib_id_main_sort, local_ids_1)
78 TEST(lib_id_main_sort, linked_ids_1)
112 TEST(lib_id_main_unique_name, local_ids_1)
126 EXPECT_STREQ(id_c->
name + 2,
"OB_A.001");
127 EXPECT_STREQ(id_a->
name + 2,
"OB_A");
135 TEST(lib_id_main_unique_name, linked_ids_1)
154 EXPECT_STREQ(id_b->
name + 2,
"OB_A.001");
155 EXPECT_STREQ(id_a->
name + 2,
"OB_A");
165 EXPECT_STREQ(id_b->
name + 2,
"OB_A");
166 EXPECT_STREQ(id_a->
name + 2,
"OB_A");
174 TEST(lib_id_main_unique_name, ids_sorted_by_default)
195 TEST(lib_id_main_unique_name, ids_sorted_by_default_with_libraries)
217 TEST(lib_id_main_unique_name, name_too_long_handling)
220 const char *name_a =
"Long_Name_That_Does_Not_Fit_Into_Max_Name_Limit_And_Should_Get_Truncated";
221 const char *name_b =
"Another_Long_Name_That_Does_Not_Fit_And_Has_A_Number_Suffix.123456";
222 const char *name_c =
"Name_That_Has_Too_Long_Number_Suffix.1234567890";
228 EXPECT_STREQ(id_a->
name + 2,
"Long_Name_That_Does_Not_Fit_Into_Max_Name_Limit_And_Should_Get_");
229 EXPECT_STREQ(id_b->
name + 2,
"Another_Long_Name_That_Does_Not_Fit_And_Has_A_Number_Suffix.123");
230 EXPECT_STREQ(id_c->
name + 2,
"Name_That_Has_Too_Long_Number_Suffix.1234567890");
235 TEST(lib_id_main_unique_name, create_equivalent_numeric_suffixes)
254 EXPECT_STREQ(id_a->
name + 2,
"Foo.123");
255 EXPECT_STREQ(id_b->
name + 2,
"Foo.000");
256 EXPECT_STREQ(id_c->
name + 2,
"Foo.003");
257 EXPECT_STREQ(id_d->
name + 2,
"Foo.3");
258 EXPECT_STREQ(id_e->
name + 2,
"Foo.0");
259 EXPECT_STREQ(id_f->
name + 2,
"Foo.");
260 EXPECT_STREQ(id_g->
name + 2,
"Foo.0123");
261 EXPECT_STREQ(id_h->
name + 2,
"Foo");
262 EXPECT_STREQ(id_i->
name + 2,
"Foo..");
263 EXPECT_STREQ(id_j->
name + 2,
"Foo..001");
264 EXPECT_STREQ(id_k->
name + 2,
"Foo..000");
281 EXPECT_STREQ(id_a->
name + 2,
"Foo.001");
282 EXPECT_STREQ(id_b->
name + 2,
"Foo.002");
283 EXPECT_STREQ(id_c->
name + 2,
"Foo.004");
284 EXPECT_STREQ(id_d->
name + 2,
"Foo.005");
285 EXPECT_STREQ(id_e->
name + 2,
"Foo.006");
286 EXPECT_STREQ(id_f->
name + 2,
"Foo..002");
287 EXPECT_STREQ(id_g->
name + 2,
"Foo.007");
288 EXPECT_STREQ(id_h->
name + 2,
"Foo.008");
289 EXPECT_STREQ(id_i->
name + 2,
"Foo...001");
290 EXPECT_STREQ(id_j->
name + 2,
"Foo..003");
291 EXPECT_STREQ(id_k->
name + 2,
"Foo..004");
296 TEST(lib_id_main_unique_name, zero_suffix_is_never_assigned)
306 EXPECT_STREQ(id_002->
name + 2,
"Foo.002");
307 EXPECT_STREQ(id_001->
name + 2,
"Foo.001");
308 EXPECT_STREQ(id_003->
name + 2,
"Foo.003");
313 TEST(lib_id_main_unique_name, remove_after_dup_get_original_name)
320 EXPECT_STREQ(id_a->
name + 2,
"Foo");
321 EXPECT_STREQ(id_b->
name + 2,
"Foo.001");
327 EXPECT_STREQ(id_a->
name + 2,
"Foo");
332 TEST(lib_id_main_unique_name, name_number_suffix_assignment)
337 const int total_object_count = 1200;
338 ID *ids[total_object_count] = {};
339 for (
int i = 0; i < total_object_count / 2; ++i) {
344 EXPECT_STREQ(ids[0]->name + 2,
"Foo");
345 EXPECT_STREQ(ids[1]->name + 2,
"Foo.001");
346 EXPECT_STREQ(ids[total_object_count / 2 - 1]->name + 2,
"Foo.599");
359 EXPECT_STREQ(id_010->
name + 2,
"Foo.010");
361 EXPECT_STREQ(id_020->
name + 2,
"Foo.020");
364 EXPECT_STREQ(id_2000->
name + 2,
"Foo.2000");
367 EXPECT_STREQ(id_030->
name + 2,
"Foo.030");
369 EXPECT_STREQ(id_600->
name + 2,
"Foo.600");
375 EXPECT_STREQ(id_max->
name + 2,
"Foo.999999999");
378 EXPECT_STREQ(id_max1->
name + 2,
"Foo.601");
387 for (
int i = total_object_count / 2; i < total_object_count; ++i) {
393 EXPECT_STREQ(id_fo178->
name + 2,
"Fo.178");
395 EXPECT_STREQ(id_fo179->
name + 2,
"Fo.179");
397 EXPECT_STREQ(id_fo180->
name + 2,
"Fo.180");
402 TEST(lib_id_main_unique_name, renames_with_duplicates)
410 EXPECT_STREQ(id_a->
name + 2,
"Foo");
411 EXPECT_STREQ(id_b->
name + 2,
"Foo.001");
412 EXPECT_STREQ(id_c->
name + 2,
"Bar");
417 EXPECT_STREQ(id_a->
name + 2,
"Foo.002");
419 EXPECT_STREQ(id_b->
name + 2,
"Bar.001");
421 EXPECT_STREQ(id_c->
name + 2,
"Foo");
423 EXPECT_STREQ(id_b->
name + 2,
"Bar");
428 TEST(lib_id_main_unique_name, names_are_unique_per_id_type)
436 EXPECT_STREQ(id_a->
name + 2,
"Foo");
437 EXPECT_STREQ(id_b->
name + 2,
"Foo");
438 EXPECT_STREQ(id_c->
name + 2,
"Foo.001");
443 TEST(lib_id_main_unique_name, name_huge_number_suffix)
450 EXPECT_STREQ(id_a->
name + 2,
"SuperLong.1234567890");
453 EXPECT_STREQ(id_b->
name + 2,
"SuperLong.001");
void BKE_idtype_init(void)
void BKE_libblock_rename(struct Main *bmain, struct ID *id, const char *name) ATTR_NONNULL()
bool BKE_id_new_name_validate(struct Main *bmain, struct ListBase *lb, struct ID *id, const char *name, bool do_linked_data) ATTR_NONNULL(1
void BKE_id_free(struct Main *bmain, void *idv)
void * BKE_id_new(struct Main *bmain, short type, const char *name)
void id_sort_by_name(struct ListBase *lb, struct ID *id, struct ID *id_sorting_hint)
struct Main * BKE_main_new(void)
void BKE_main_free(struct Main *mainvar)
void BKE_main_namemap_remove_name(struct Main *bmain, struct ID *id, const char *name) ATTR_NONNULL()
bool BKE_main_namemap_validate(struct Main *bmain) ATTR_NONNULL()
bool BKE_main_namemap_get_name(struct Main *bmain, struct ID *id, char *name) ATTR_NONNULL()
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
ID and Library types, which are fundamental for sdna.
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
static void change_name(Main *bmain, ID *id, const char *name)
static void change_lib(Main *bmain, ID *id, Library *lib)
static ID * add_id_in_library(Main *bmain, const char *name, Library *lib)
TEST(action_groups, ReconstructGroupsWithReordering)
static void test_lib_id_main_sort_check_order(std::initializer_list< ID * > list)
~LibIDMainSortTestContext()
LibIDMainSortTestContext()