Skip to content

Commit

Permalink
vkconfig3: Add unit tests for layer paths
Browse files Browse the repository at this point in the history
  • Loading branch information
christophe-lunarg committed Sep 26, 2024
1 parent 8b5c70d commit c25aa9d
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 9 deletions.
15 changes: 12 additions & 3 deletions vkconfig_core/layer_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ bool LayerManager::Load(const QJsonObject &json_root_object) {
LayersPathInfo info;
info.path = json_paths_keys[i].toStdString();
info.enabled = json_paths_object.value(json_paths_keys[i].toStdString().c_str()).toBool();
this->AddPath(info);
this->AppendPath(info);
}
}
}
Expand Down Expand Up @@ -351,7 +351,7 @@ void LayerManager::LoadLayersFromPath(const Path &layers_path, LayerType type) {
}
}

void LayerManager::AddPath(const LayersPathInfo &info) {
void LayerManager::AppendPath(const LayersPathInfo &info) {
LayersPathInfo *existing_info = FindPathInfo(this->paths, info.path.RelativePath());
if (existing_info != nullptr) {
existing_info->enabled = info.enabled;
Expand Down Expand Up @@ -389,7 +389,16 @@ void LayerManager::RemovePath(const LayersPathInfo &path_info) {
}
}

void LayerManager::UpdatePath(const LayersPathInfo &path_info) {
void LayerManager::UpdatePathEnabled(const LayersPathInfo &path_info) {
for (int paths_type_index = LAYERS_PATHS_FIRST; paths_type_index <= LAYERS_PATHS_LAST; ++paths_type_index) {
for (std::size_t i = 0, n = this->paths[paths_type_index].size(); i < n; ++i) {
if (path_info.path == this->paths[paths_type_index][i].path) {
this->paths[paths_type_index][i].enabled = path_info.enabled;
break;
}
}
}

const std::vector<Path> &layers_paths = CollectFilePaths(path_info.path);

for (std::size_t i = 0, n = layers_paths.size(); i < n; ++i) {
Expand Down
6 changes: 3 additions & 3 deletions vkconfig_core/layer_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,15 +62,15 @@ class LayerManager : public Serialize {
void LoadAllInstalledLayers();
void LoadLayersFromPath(const Path& layers_path, LayerType type = LAYER_TYPE_EXPLICIT);

void AddPath(const LayersPathInfo& path_info);
void AppendPath(const LayersPathInfo& path_info);
void RemovePath(const LayersPathInfo& path_info);
void UpdatePath(const LayersPathInfo& path_info);
void UpdatePathEnabled(const LayersPathInfo& path_info);

std::vector<std::string> BuildLayerNameList() const;

std::vector<Layer> selected_layers;
std::array<std::vector<LayersPathInfo>, LAYERS_PATHS_COUNT> paths;
std::vector<Path> removed_paths;
std::vector<Path> removed_paths; // TODO: Remove?

private:
std::map<Path, std::string> layers_validated;
Expand Down
69 changes: 69 additions & 0 deletions vkconfig_core/test/test_layer_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -186,3 +186,72 @@ TEST(test_layer_manager, avoid_duplicate) {

EXPECT_EQ(first_load_count, second_load_count);
}

TEST(test_layer_manager, custom_path_append_remove) {
LayerManager layer_manager;

LayersPathInfo infoA;
infoA.path = ":/layers";
LayersPathInfo infoB;
infoB.path = ":/layersB";
LayersPathInfo infoC;
infoC.path = ":/layersC";

layer_manager.AppendPath(infoA);
layer_manager.AppendPath(infoB);
layer_manager.AppendPath(infoC);

EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI].size(), 3);

layer_manager.AppendPath(infoA);
EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI].size(), 3);

layer_manager.RemovePath(infoA);
EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI].size(), 2);

layer_manager.AppendPath(infoA);
EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI].size(), 3);

layer_manager.RemovePath(infoA);
EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI].size(), 2);

layer_manager.RemovePath(infoA); // Check that removing an already removed path doesn't cause any issue
EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI].size(), 2);

layer_manager.RemovePath(infoB);
layer_manager.RemovePath(infoC);

EXPECT_TRUE(layer_manager.paths[LAYERS_PATHS_GUI].empty());
}

TEST(test_layer_manager, custom_path_update_layers) {
LayerManager layer_manager;
layer_manager.LoadLayersFromPath(":/layers");

LayersPathInfo info;
info.path = ":/layers";
// info.enabled = true; default value

layer_manager.AppendPath(info);
EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI].size(), 1);
EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI][0].enabled, true);
for (std::size_t i = 0, n = layer_manager.selected_layers.size(); i < n; ++i) {
EXPECT_TRUE(layer_manager.selected_layers[i].visible);
}

info.enabled = false;
layer_manager.UpdatePathEnabled(info);
EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI][0].enabled, false);
for (std::size_t i = 0, n = layer_manager.selected_layers.size(); i < n; ++i) {
EXPECT_FALSE(layer_manager.selected_layers[i].visible);
}

info.enabled = true;
layer_manager.UpdatePathEnabled(info);
EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI][0].enabled, true);
for (std::size_t i = 0, n = layer_manager.selected_layers.size(); i < n; ++i) {
EXPECT_TRUE(layer_manager.selected_layers[i].visible);
}

EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI].size(), 1);
}
4 changes: 2 additions & 2 deletions vkconfig_gui/tab_layers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ void TabLayers::on_layers_add_pushButton_pressed() {
Configurator &configurator = Configurator::Get();
LayersPathInfo info;
info.path = ui->layers_lineEdit->text().toStdString();
configurator.layers.AddPath(info);
configurator.layers.AppendPath(info);
configurator.layers.LoadLayersFromPath(info.path);

this->UpdateUI_LayersPaths(UPDATE_REBUILD_UI);
Expand All @@ -125,7 +125,7 @@ void TabLayers::on_layers_browse_pushButton_pressed() {
info.path = selected_path.toStdString();

Configurator &configurator = Configurator::Get();
configurator.layers.AddPath(info);
configurator.layers.AppendPath(info);
configurator.layers.LoadLayersFromPath(info.path);

this->UpdateUI_LayersPaths(UPDATE_REBUILD_UI);
Expand Down
2 changes: 1 addition & 1 deletion vkconfig_gui/widget_tab_layers_path.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,5 +59,5 @@ void LayersPathWidget::on_toggled(bool checked) {
this->path_info->enabled = checked;

Configurator& configurator = Configurator::Get();
configurator.layers.UpdatePath(*this->path_info);
configurator.layers.UpdatePathEnabled(*this->path_info);
}

0 comments on commit c25aa9d

Please sign in to comment.