|
1 | | -// SPDX-FileCopyrightText: 2021 - 2023 UnionTech Software Technology Co., Ltd. |
| 1 | +// SPDX-FileCopyrightText: 2021 - 2026 UnionTech Software Technology Co., Ltd. |
2 | 2 | // |
3 | 3 | // SPDX-License-Identifier: LGPL-3.0-or-later |
4 | 4 |
|
@@ -506,6 +506,87 @@ TEST_F(ut_DConfigFile, userPublic) { |
506 | 506 | } |
507 | 507 | } |
508 | 508 |
|
| 509 | +TEST_F(ut_DConfigFile, setValueWithSerialComparison) { |
| 510 | + // 测试 DConfigCacheImpl::setValue 中的 serial 比较逻辑 |
| 511 | + // 当值相同但 serial 不同时,应该返回 true(更新缓存) |
| 512 | + |
| 513 | + FileCopyGuard guard(":/data/dconf-serial-test.meta.json", QString("%1/%2.json").arg(metaPath, FILE_NAME)); |
| 514 | + |
| 515 | + // 场景1: 值和 serial 都相同 → 返回 false |
| 516 | + { |
| 517 | + DConfigFile config(APP_ID, FILE_NAME); |
| 518 | + ASSERT_TRUE(config.load(LocalPrefix)); |
| 519 | + QScopedPointer<DConfigCache> userCache(config.createUserCache(uid)); |
| 520 | + ASSERT_TRUE(userCache->load(LocalPrefix)); |
| 521 | + |
| 522 | + // 首次设置值,serial=0 从 meta 传入 |
| 523 | + ASSERT_TRUE(config.setValue("testKey", "test_value", "test", userCache.get())); |
| 524 | + |
| 525 | + // 再次设置相同的值,serial 相同 → 返回 false |
| 526 | + ASSERT_FALSE(config.setValue("testKey", "test_value", "test", userCache.get())); |
| 527 | + } |
| 528 | + |
| 529 | + // 场景2: 值相同,serial 不同 → 返回 true(新修复的场景) |
| 530 | + { |
| 531 | + DConfigFile config(APP_ID, FILE_NAME); |
| 532 | + ASSERT_TRUE(config.load(LocalPrefix)); |
| 533 | + QScopedPointer<DConfigCache> userCache(config.createUserCache(uid)); |
| 534 | + ASSERT_TRUE(userCache->load(LocalPrefix)); |
| 535 | + |
| 536 | + // 设置值,缓存中 serial=0 |
| 537 | + ASSERT_TRUE(config.setValue("testKey", "test_value", "test", userCache.get())); |
| 538 | + |
| 539 | + // 使用 override 文件将 serial 升级到 1 |
| 540 | + FileCopyGuard guard2(":/data/dconf-serial-test.override.json", QString("%1/%2.json").arg(overridePath, FILE_NAME)); |
| 541 | + |
| 542 | + // 重新加载配置,此时 meta serial=1 |
| 543 | + DConfigFile config2(APP_ID, FILE_NAME); |
| 544 | + ASSERT_TRUE(config2.load(LocalPrefix)); |
| 545 | + QScopedPointer<DConfigCache> userCache2(config2.createUserCache(uid)); |
| 546 | + ASSERT_TRUE(userCache2->load(LocalPrefix)); |
| 547 | + |
| 548 | + // 设置相同的值,但 meta serial=1, cache serial=0 → 应该返回 true |
| 549 | + ASSERT_TRUE(config2.setValue("testKey", "test_value", "test", userCache2.get())); |
| 550 | + } |
| 551 | + |
| 552 | + // 场景3: 值不同,serial 相同 → 返回 true |
| 553 | + { |
| 554 | + DConfigFile config(APP_ID, FILE_NAME); |
| 555 | + ASSERT_TRUE(config.load(LocalPrefix)); |
| 556 | + QScopedPointer<DConfigCache> userCache(config.createUserCache(uid)); |
| 557 | + ASSERT_TRUE(userCache->load(LocalPrefix)); |
| 558 | + |
| 559 | + // 设置初始值 |
| 560 | + ASSERT_TRUE(config.setValue("testKey", "value1", "test", userCache.get())); |
| 561 | + |
| 562 | + // 设置不同的值,serial 相同 → 返回 true |
| 563 | + ASSERT_TRUE(config.setValue("testKey", "value2", "test", userCache.get())); |
| 564 | + } |
| 565 | + |
| 566 | + // 场景4: 值不同,serial 不同 → 返回 true |
| 567 | + { |
| 568 | + DConfigFile config(APP_ID, FILE_NAME); |
| 569 | + ASSERT_TRUE(config.load(LocalPrefix)); |
| 570 | + QScopedPointer<DConfigCache> userCache(config.createUserCache(uid)); |
| 571 | + ASSERT_TRUE(userCache->load(LocalPrefix)); |
| 572 | + |
| 573 | + // 设置初始值 |
| 574 | + ASSERT_TRUE(config.setValue("testKey", "value1", "test", userCache.get())); |
| 575 | + |
| 576 | + // 使用 override 文件将 serial 升级到 1 |
| 577 | + FileCopyGuard guard2(":/data/dconf-serial-test.override.json", QString("%1/%2.json").arg(overridePath, FILE_NAME)); |
| 578 | + |
| 579 | + // 重新加载配置 |
| 580 | + DConfigFile config2(APP_ID, FILE_NAME); |
| 581 | + ASSERT_TRUE(config2.load(LocalPrefix)); |
| 582 | + QScopedPointer<DConfigCache> userCache2(config2.createUserCache(uid)); |
| 583 | + ASSERT_TRUE(userCache2->load(LocalPrefix)); |
| 584 | + |
| 585 | + // 设置不同的值,serial 也不同 → 返回 true |
| 586 | + ASSERT_TRUE(config2.setValue("testKey", "value3", "test", userCache2.get())); |
| 587 | + } |
| 588 | +} |
| 589 | + |
509 | 590 | class ut_DConfigFileCheckName : public ut_DConfigFile, public ::testing::WithParamInterface<std::tuple<QString, bool>> |
510 | 591 | { |
511 | 592 |
|
|
0 commit comments