2017-10-22 23:06:42 +02:00
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
|
|
KLayout Layout Viewer
|
2024-01-01 17:06:23 +01:00
|
|
|
Copyright (C) 2006-2024 Matthias Koefferlein
|
2017-10-22 23:06:42 +02:00
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
|
along with this program; if not, write to the Free Software
|
|
|
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include "layAbstractMenu.h"
|
|
|
|
|
|
|
|
|
|
#include "tlUnitTest.h"
|
|
|
|
|
|
|
|
|
|
std::string node_to_string (const lay::AbstractMenuItem &item)
|
|
|
|
|
{
|
|
|
|
|
std::string s = item.name ();
|
|
|
|
|
if (! item.children.empty ()) {
|
|
|
|
|
s += "(";
|
|
|
|
|
for (std::list<lay::AbstractMenuItem>::const_iterator c = item.children.begin (); c != item.children.end (); ++c) {
|
|
|
|
|
if (c != item.children.begin ()) {
|
|
|
|
|
s += ",";
|
|
|
|
|
}
|
|
|
|
|
s += node_to_string (*c);
|
|
|
|
|
}
|
|
|
|
|
s += ")";
|
|
|
|
|
}
|
|
|
|
|
return s;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string menu_to_string (const lay::AbstractMenu &menu)
|
|
|
|
|
{
|
|
|
|
|
return node_to_string (menu.root ());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(1)
|
|
|
|
|
{
|
|
|
|
|
lay::AbstractMenu menu (0);
|
|
|
|
|
EXPECT_EQ (menu_to_string (menu), "");
|
|
|
|
|
|
2020-03-28 22:49:06 +01:00
|
|
|
EXPECT_EQ (menu.action ("n1") == 0, true);
|
2017-10-22 23:06:42 +02:00
|
|
|
EXPECT_EQ (menu.is_valid ("n1"), false);
|
|
|
|
|
|
2020-02-13 00:16:37 +01:00
|
|
|
menu.insert_menu ("end", "n1", new lay::Action ("title:n1"));
|
2017-10-22 23:06:42 +02:00
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n1)");
|
|
|
|
|
EXPECT_EQ (tl::join (menu.items (""), ","), "n1");
|
|
|
|
|
EXPECT_EQ (menu.is_menu ("n1"), true);
|
2020-02-13 00:16:37 +01:00
|
|
|
EXPECT_EQ (menu.action ("n1")->get_title (), "title:n1");
|
2017-10-22 23:06:42 +02:00
|
|
|
|
|
|
|
|
EXPECT_EQ (menu.is_valid ("n1"), true);
|
|
|
|
|
EXPECT_EQ (menu.is_valid ("n2"), false);
|
|
|
|
|
|
2020-02-13 00:16:37 +01:00
|
|
|
menu.insert_menu ("end", "n2", new lay::Action ("title:n2"));
|
2017-10-22 23:06:42 +02:00
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n1,n2)");
|
|
|
|
|
EXPECT_EQ (tl::join (menu.items (""), ","), "n1,n2");
|
|
|
|
|
EXPECT_EQ (menu.is_menu ("n2"), true);
|
2020-02-13 00:16:37 +01:00
|
|
|
EXPECT_EQ (menu.action ("n2")->get_title (), "title:n2");
|
2017-10-22 23:06:42 +02:00
|
|
|
|
|
|
|
|
EXPECT_EQ (menu.is_valid ("n2"), true);
|
|
|
|
|
|
2020-02-13 00:16:37 +01:00
|
|
|
menu.insert_menu ("end", "n1", new lay::Action ("title:n1"));
|
2017-10-22 23:06:42 +02:00
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n2,n1)");
|
|
|
|
|
EXPECT_EQ (menu.is_menu ("n1"), true);
|
2020-02-13 00:16:37 +01:00
|
|
|
EXPECT_EQ (menu.action ("n1")->get_title (), "title:n1");
|
2017-10-22 23:06:42 +02:00
|
|
|
|
2020-02-13 00:16:37 +01:00
|
|
|
menu.insert_item ("n1.begin", "c1", new lay::Action ("title:c1"));
|
2017-10-22 23:06:42 +02:00
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n2,n1(n1.c1))");
|
|
|
|
|
EXPECT_EQ (tl::join (menu.items ("n1"), ","), "n1.c1");
|
2020-02-13 00:16:37 +01:00
|
|
|
EXPECT_EQ (menu.action ("n1.c1")->get_title (), "title:c1");
|
2017-10-22 23:06:42 +02:00
|
|
|
|
2020-02-13 00:16:37 +01:00
|
|
|
menu.insert_item ("n1.end", "c2", new lay::Action ("title:c2"));
|
2017-10-22 23:06:42 +02:00
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n2,n1(n1.c1,n1.c2))");
|
|
|
|
|
EXPECT_EQ (tl::join (menu.items ("n1"), ","), "n1.c1,n1.c2");
|
|
|
|
|
EXPECT_EQ (menu.is_menu ("n1.c2"), false);
|
2020-02-13 00:16:37 +01:00
|
|
|
EXPECT_EQ (menu.action ("n1.c2")->get_title (), "title:c2");
|
2017-10-22 23:06:42 +02:00
|
|
|
|
2020-02-13 00:16:37 +01:00
|
|
|
menu.insert_item ("n1.begin", "c1", new lay::Action ("title:c1a"));
|
2017-10-22 23:06:42 +02:00
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n2,n1(n1.c1,n1.c2))");
|
|
|
|
|
EXPECT_EQ (tl::join (menu.items ("n1"), ","), "n1.c1,n1.c2");
|
2020-02-13 00:16:37 +01:00
|
|
|
EXPECT_EQ (menu.action ("n1.c1")->get_title (), "title:c1a");
|
2017-10-22 23:06:42 +02:00
|
|
|
|
2020-02-13 00:16:37 +01:00
|
|
|
menu.insert_item ("n1.c1", "c3", new lay::Action ("title:c3"));
|
2017-10-22 23:06:42 +02:00
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n2,n1(n1.c3,n1.c1,n1.c2))");
|
|
|
|
|
|
2020-02-13 00:16:37 +01:00
|
|
|
menu.insert_item ("n1.c1+", "c4", new lay::Action ("title:c4"));
|
2017-10-22 23:06:42 +02:00
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n2,n1(n1.c3,n1.c1,n1.c4,n1.c2))");
|
2020-02-13 00:16:37 +01:00
|
|
|
EXPECT_EQ (menu.action ("n1.c4")->get_title (), "title:c4");
|
2017-10-22 23:06:42 +02:00
|
|
|
|
|
|
|
|
menu.delete_item ("n1.c1");
|
|
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n2,n1(n1.c3,n1.c4,n1.c2))");
|
|
|
|
|
|
|
|
|
|
menu.delete_item ("n1");
|
|
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n2)");
|
|
|
|
|
|
2020-02-13 00:16:37 +01:00
|
|
|
menu.insert_item ("n1>end(title).end", "c1", new lay::Action ("title:c1"));
|
2017-10-22 23:06:42 +02:00
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n2,n1(n1.c1))");
|
2020-02-13 00:16:37 +01:00
|
|
|
EXPECT_EQ (menu.action ("n1.c1")->get_title (), "title:c1");
|
2017-10-22 23:06:42 +02:00
|
|
|
|
2020-02-13 00:16:37 +01:00
|
|
|
menu.insert_item ("n1>end(title).end", "c2", new lay::Action ("title:c2"));
|
2017-10-22 23:06:42 +02:00
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n2,n1(n1.c1,n1.c2))");
|
|
|
|
|
|
|
|
|
|
menu.delete_item ("n1.c1");
|
|
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n2,n1(n1.c2))");
|
|
|
|
|
|
|
|
|
|
menu.delete_item ("n1.c1");
|
|
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n2,n1(n1.c2))");
|
|
|
|
|
|
|
|
|
|
menu.delete_item ("n1.c2");
|
|
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n2)");
|
|
|
|
|
|
2018-02-10 18:40:24 +01:00
|
|
|
menu.clear_menu ("n1");
|
|
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n2)");
|
|
|
|
|
|
2020-02-13 00:16:37 +01:00
|
|
|
menu.insert_menu ("end", "n1", new lay::Action ("title:n1"));
|
|
|
|
|
menu.insert_item ("n1.begin", "c1", new lay::Action ("title:c1"));
|
|
|
|
|
menu.insert_item ("n1.end", "c2", new lay::Action ("title:c2"));
|
2018-02-10 18:40:24 +01:00
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n2,n1(n1.c1,n1.c2))");
|
|
|
|
|
menu.clear_menu ("n1");
|
|
|
|
|
EXPECT_EQ (menu_to_string (menu), "(n2,n1)");
|
|
|
|
|
}
|
2020-02-19 01:06:39 +01:00
|
|
|
|
|
|
|
|
TEST(2_ActionReferences)
|
|
|
|
|
{
|
|
|
|
|
tl::weak_ptr<lay::Action> action (new lay::Action ("title:n1"));
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
lay::AbstractMenu menu (0);
|
|
|
|
|
EXPECT_EQ (menu_to_string (menu), "");
|
|
|
|
|
EXPECT_EQ (menu.action ("s1.n1") == 0, true);
|
|
|
|
|
EXPECT_EQ (menu.action ("s1") == 0, true);
|
|
|
|
|
|
|
|
|
|
menu.insert_menu ("end", "s1", "submenu1");
|
|
|
|
|
menu.insert_menu ("end", "s2", "submenu2");
|
|
|
|
|
|
|
|
|
|
menu.insert_item ("s1.end", "n1", action.get ());
|
|
|
|
|
menu.insert_item ("s2.end", "n1", action.get ());
|
|
|
|
|
EXPECT_EQ (menu_to_string (menu), "(s1(s1.n1),s2(s2.n1))");
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (menu.action ("s1.n1") == action.get (), true);
|
|
|
|
|
EXPECT_EQ (menu.action ("s2.n1") == action.get (), true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// the action is deleted because it's owned by the menu
|
|
|
|
|
EXPECT_EQ (action.get () == 0, true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(3_ActionReferences)
|
|
|
|
|
{
|
|
|
|
|
tl::weak_ptr<lay::Action> action (new lay::Action ("title:n1"));
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
lay::AbstractMenu menu (0);
|
|
|
|
|
EXPECT_EQ (menu_to_string (menu), "");
|
|
|
|
|
EXPECT_EQ (menu.action ("s1.n1") == 0, true);
|
|
|
|
|
EXPECT_EQ (menu.action ("s1") == 0, true);
|
|
|
|
|
|
|
|
|
|
menu.insert_menu ("end", "s1", "submenu1");
|
|
|
|
|
menu.insert_menu ("end", "s2", "submenu2");
|
|
|
|
|
|
|
|
|
|
menu.insert_item ("s1.end", "n1", action.get ());
|
|
|
|
|
menu.insert_item ("s2.end", "n1", action.get ());
|
|
|
|
|
EXPECT_EQ (menu_to_string (menu), "(s1(s1.n1),s2(s2.n1))");
|
|
|
|
|
|
|
|
|
|
menu.delete_item ("s2");
|
|
|
|
|
|
|
|
|
|
EXPECT_EQ (menu.action ("s1.n1") != 0, true);
|
|
|
|
|
EXPECT_EQ (menu.action ("s1.n1") == action.get (), true);
|
|
|
|
|
EXPECT_EQ (menu.action ("s2.n1") == 0, true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// the action is deleted because it's owned by the menu
|
|
|
|
|
EXPECT_EQ (action.get () == 0, true);
|
|
|
|
|
}
|