4#include "testing/testing.h"
38 ID *prev_id =
nullptr;
41 if (prev_id !=
nullptr) {
49TEST(lib_id_main_sort, local_ids_1)
79TEST(lib_id_main_sort, linked_ids_1)
115TEST(lib_id_main_unique_name, local_ids_rename_existing_never)
135 EXPECT_STREQ(id_c->
name + 2,
"OB_A.001");
136 EXPECT_STREQ(id_a->
name + 2,
"OB_A");
149 EXPECT_STREQ(id_c->
name + 2,
"OB_A.001");
150 EXPECT_STREQ(id_a->
name + 2,
"OB_A");
164 EXPECT_STREQ(future_name,
"OB_B.001");
166 STRNCPY(future_name,
"OB_BBBB");
168 EXPECT_STREQ(future_name,
"OB_BBBB");
170 STRNCPY(future_name,
"OB_BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB");
172 EXPECT_STREQ(id_a->
name + 2, future_name);
173 EXPECT_STREQ(future_name,
"OB_BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB");
175 EXPECT_STREQ(future_name,
"OB_BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB");
178TEST(lib_id_main_unique_name, local_ids_rename_existing_always)
197 EXPECT_STREQ(id_c->
name + 2,
"OB_A");
198 EXPECT_STREQ(id_a->
name + 2,
"OB_A.001");
210 EXPECT_STREQ(id_c->
name + 2,
"OB_A.001");
211 EXPECT_STREQ(id_a->
name + 2,
"OB_A");
221TEST(lib_id_main_unique_name, local_ids_rename_existing_same_root)
241 EXPECT_STREQ(id_c->
name + 2,
"OB_A.001");
242 EXPECT_STREQ(id_a->
name + 2,
"OB_A");
254 EXPECT_STREQ(id_c->
name + 2,
"OB_A");
255 EXPECT_STREQ(id_a->
name + 2,
"OB_A.001");
265TEST(lib_id_main_unique_name, linked_ids_1)
284 EXPECT_STREQ(id_b->
name + 2,
"OB_A.001");
285 EXPECT_STREQ(id_a->
name + 2,
"OB_A");
295 EXPECT_STREQ(id_b->
name + 2,
"OB_A");
296 EXPECT_STREQ(id_a->
name + 2,
"OB_A");
316TEST(lib_id_main_global_unique_name, linked_ids_1)
336 EXPECT_STREQ(id_b->
name + 2,
"OB_A.001");
337 EXPECT_STREQ(id_a->
name + 2,
"OB_A");
347 EXPECT_STREQ(id_b->
name + 2,
"OB_C.001");
348 EXPECT_STREQ(id_a->
name + 2,
"OB_A");
349 EXPECT_STREQ(id_c->
name + 2,
"OB_C");
351 EXPECT_STREQ(id_b->
name + 2,
"OB_C.001");
352 EXPECT_STREQ(id_a->
name + 2,
"OB_C.002");
353 EXPECT_STREQ(id_c->
name + 2,
"OB_C");
361 EXPECT_STREQ(id_b->
name + 2,
"OB_C");
362 EXPECT_STREQ(id_a->
name + 2,
"OB_C.002");
363 EXPECT_STREQ(id_c->
name + 2,
"OB_C");
371TEST(lib_id_main_unique_name, ids_sorted_by_default)
394TEST(lib_id_main_unique_name, ids_sorted_by_default_with_libraries)
418TEST(lib_id_main_unique_name, name_too_long_handling)
421 const char *name_a =
"Long_Name_That_Does_Not_Fit_Into_Max_Name_Limit_And_Should_Get_Truncated";
422 const char *name_b =
"Another_Long_Name_That_Does_Not_Fit_And_Has_A_Number_Suffix.123456";
423 const char *name_c =
"Name_That_Has_Too_Long_Number_Suffix.1234567890";
429 EXPECT_STREQ(id_a->
name + 2,
"Long_Name_That_Does_Not_Fit_Into_Max_Name_Limit_And_Should_Get_");
430 EXPECT_STREQ(id_b->
name + 2,
"Another_Long_Name_That_Does_Not_Fit_And_Has_A_Number_Suffix.123");
431 EXPECT_STREQ(id_c->
name + 2,
"Name_That_Has_Too_Long_Number_Suffix.1234567890");
438TEST(lib_id_main_unique_name, create_equivalent_numeric_suffixes)
457 EXPECT_STREQ(id_a->
name + 2,
"Foo.123");
458 EXPECT_STREQ(id_b->
name + 2,
"Foo.000");
459 EXPECT_STREQ(id_c->
name + 2,
"Foo.003");
460 EXPECT_STREQ(id_d->
name + 2,
"Foo.3");
461 EXPECT_STREQ(id_e->
name + 2,
"Foo.0");
462 EXPECT_STREQ(id_f->
name + 2,
"Foo.");
463 EXPECT_STREQ(id_g->
name + 2,
"Foo.0123");
464 EXPECT_STREQ(id_h->
name + 2,
"Foo");
465 EXPECT_STREQ(id_i->
name + 2,
"Foo..");
466 EXPECT_STREQ(id_j->
name + 2,
"Foo..001");
467 EXPECT_STREQ(id_k->
name + 2,
"Foo..000");
484 EXPECT_STREQ(id_a->
name + 2,
"Foo.001");
485 EXPECT_STREQ(id_b->
name + 2,
"Foo.002");
486 EXPECT_STREQ(id_c->
name + 2,
"Foo.004");
487 EXPECT_STREQ(id_d->
name + 2,
"Foo.005");
488 EXPECT_STREQ(id_e->
name + 2,
"Foo.006");
489 EXPECT_STREQ(id_f->
name + 2,
"Foo..002");
490 EXPECT_STREQ(id_g->
name + 2,
"Foo.007");
491 EXPECT_STREQ(id_h->
name + 2,
"Foo.008");
492 EXPECT_STREQ(id_i->
name + 2,
"Foo...001");
493 EXPECT_STREQ(id_j->
name + 2,
"Foo..003");
494 EXPECT_STREQ(id_k->
name + 2,
"Foo..004");
501TEST(lib_id_main_unique_name, zero_suffix_is_never_assigned)
511 EXPECT_STREQ(id_002->
name + 2,
"Foo.002");
512 EXPECT_STREQ(id_001->
name + 2,
"Foo.001");
513 EXPECT_STREQ(id_003->
name + 2,
"Foo.003");
520TEST(lib_id_main_unique_name, remove_after_dup_get_original_name)
527 EXPECT_STREQ(id_a->
name + 2,
"Foo");
528 EXPECT_STREQ(id_b->
name + 2,
"Foo.001");
534 EXPECT_STREQ(id_a->
name + 2,
"Foo");
541TEST(lib_id_main_unique_name, name_number_suffix_assignment)
546 const int total_object_count = 1200;
547 ID *ids[total_object_count] = {};
548 for (
int i = 0; i < total_object_count / 2; ++i) {
553 EXPECT_STREQ(ids[0]->name + 2,
"Foo");
554 EXPECT_STREQ(ids[1]->name + 2,
"Foo.001");
555 EXPECT_STREQ(ids[total_object_count / 2 - 1]->name + 2,
"Foo.599");
568 EXPECT_STREQ(id_010->
name + 2,
"Foo.010");
570 EXPECT_STREQ(id_020->
name + 2,
"Foo.020");
573 EXPECT_STREQ(id_2000->
name + 2,
"Foo.2000");
576 EXPECT_STREQ(id_030->
name + 2,
"Foo.030");
578 EXPECT_STREQ(id_600->
name + 2,
"Foo.600");
584 EXPECT_STREQ(id_max->
name + 2,
"Foo.999999999");
587 EXPECT_STREQ(id_max1->
name + 2,
"Foo.601");
596 for (
int i = total_object_count / 2; i < total_object_count; ++i) {
602 EXPECT_STREQ(id_fo178->
name + 2,
"Fo.178");
604 EXPECT_STREQ(id_fo179->
name + 2,
"Fo.179");
606 EXPECT_STREQ(id_fo180->
name + 2,
"Fo.180");
613TEST(lib_id_main_unique_name, renames_with_duplicates)
621 EXPECT_STREQ(id_a->
name + 2,
"Foo");
622 EXPECT_STREQ(id_b->
name + 2,
"Foo.001");
623 EXPECT_STREQ(id_c->
name + 2,
"Bar");
628 EXPECT_STREQ(id_a->
name + 2,
"Foo.002");
630 EXPECT_STREQ(id_b->
name + 2,
"Bar.001");
632 EXPECT_STREQ(id_c->
name + 2,
"Foo");
634 EXPECT_STREQ(id_b->
name + 2,
"Bar");
641TEST(lib_id_main_unique_name, names_are_unique_per_id_type)
649 EXPECT_STREQ(id_a->
name + 2,
"Foo");
650 EXPECT_STREQ(id_b->
name + 2,
"Foo");
651 EXPECT_STREQ(id_c->
name + 2,
"Foo.001");
658TEST(lib_id_main_unique_name, name_huge_number_suffix)
665 EXPECT_STREQ(id_a->
name + 2,
"SuperLong.1234567890");
668 EXPECT_STREQ(id_b->
name + 2,
"SuperLong.001");
void BKE_id_free(Main *bmain, void *idv)
void id_sort_by_name(ListBase *lb, ID *id, ID *id_sorting_hint)
IDNewNameResult BKE_libblock_rename(Main &bmain, ID &id, blender::StringRefNull name, const IDNewNameMode mode=IDNewNameMode::RenameExistingNever)
void * BKE_id_new(Main *bmain, short type, const char *name)
Main * BKE_main_new(void)
void BKE_main_free(Main *bmain)
bool BKE_main_namemap_get_name(Main *bmain, ID *id, char *name, const bool do_unique_in_bmain) ATTR_NONNULL()
void BKE_main_namemap_remove_name(Main *bmain, ID *id, const char *name) ATTR_NONNULL()
bool BKE_main_namemap_validate(Main *bmain) 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)
#define STRNCPY(dst, src)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
ID and Library types, which are fundamental for SDNA.
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
static ID * add_id_in_library(Main *bmain, const char *name, Library *lib)
static void change_lib(Main *bmain, ID *id, Library *lib)
TEST(action_groups, ReconstructGroupsWithReordering)
static void change_name_global(Main *bmain, ID *id, const char *name)
static IDNewNameResult change_name(Main *bmain, ID *id, const char *name, const IDNewNameMode mode)
static void test_lib_id_main_sort_check_order(std::initializer_list< ID * > list)
@ RENAMED_COLLISION_FORCED
@ RENAMED_COLLISION_ADJUSTED
UniqueName_Map * name_map_global
~LibIDMainSortTestContext()
LibIDMainSortTestContext()
static DynamicLibrary lib