klayout/src/unit_tests/layLayerProperties.cc

1701 lines
48 KiB
C++

/*
KLayout Layout Viewer
Copyright (C) 2006-2017 Matthias Koefferlein
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 "layLayerProperties.h"
#include "layLayoutView.h"
#include "layMainWindow.h"
#include "layApplication.h"
#include "tlXMLParser.h"
#include "dbLayout.h"
#include <utHead.h>
#include <iostream>
#include <sstream>
size_t size (const lay::LayerPropertiesList &list)
{
size_t n = 0;
for (lay::LayerPropertiesConstIterator i = list.begin_const_recursive (); !i.at_end (); ++i) {
++n;
}
return n;
}
bool compare_real (const lay::LayerPropertiesList &a, const lay::LayerPropertiesList &b)
{
bool debug = true;
lay::LayerPropertiesConstIterator i = a.begin_const_recursive ();
lay::LayerPropertiesConstIterator j = b.begin_const_recursive ();
unsigned int n = 0;
while (true) {
while (! i.at_end () && i->has_children ()) {
++i;
}
while (! j.at_end () && j->has_children ()) {
++j;
}
if (! i.at_end () && ! j.at_end ()) {
if (i->frame_color (true) != j->frame_color (true)) {
if (debug) printf ("Difference in frame color at element %d\n", n);
return false;
}
if (i->fill_color (true) != j->fill_color (true)) {
if (debug) printf ("Difference in fill color at element %d\n", n);
return false;
}
if (i->frame_brightness (true) != j->frame_brightness (true)) {
if (debug) printf ("Difference in frame brightness at element %d\n", n);
return false;
}
if (i->fill_brightness (true) != j->fill_brightness (true)) {
if (debug) printf ("Difference in fill brightness at element %d\n", n);
return false;
}
if (i->dither_pattern (true) != j->dither_pattern (true)) {
if (debug) printf ("Difference in dither pattern at element %d\n", n);
return false;
}
if (i->visible (true) != j->visible (true)) {
if (debug) printf ("Difference in visibility at element %d\n", n);
return false;
}
if (i->transparent (true) != j->transparent (true)) {
if (debug) printf ("Difference in transparency at element %d\n", n);
return false;
}
if (i->width (true) != j->width (true)) {
if (debug) printf ("Difference in transparency at element %d\n", n);
return false;
}
if (i->marked (true) != j->marked (true)) {
if (debug) printf ("Difference in marked state at element %d\n", n);
return false;
}
if (i->animation (true) != j->animation (true)) {
if (debug) printf ("Difference in animation mode at element %d\n", n);
return false;
}
if (i->source (true) != j->source (true)) {
if (debug) printf ("Difference in source at element %d\n", n);
return false;
}
} else if (i.at_end () && j.at_end ()) {
return true;
} else {
if (debug) printf ("Length differs\n");
return false;
}
++i;
++j;
++n;
}
}
TEST (1)
{
tl::XMLStringSource s (
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" </properties>\n"
"</layer-properties>\n");
lay::LayerPropertiesList list;
list.load (s);
tl::OutputStringStream os;
tl::OutputStream oss (os);
list.save (oss);
list = lay::LayerPropertiesList ();
tl::XMLStringSource s2 (os.string ());
list.load (s2);
const char *res =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <frame-color/>\n"
" <fill-color/>\n"
" <frame-brightness>0</frame-brightness>\n"
" <fill-brightness>0</fill-brightness>\n"
" <dither-pattern/>\n"
" <line-style/>\n"
" <valid>true</valid>\n"
" <visible>true</visible>\n"
" <transparent>false</transparent>\n"
" <width/>\n"
" <marked>false</marked>\n"
" <xfill>false</xfill>\n"
" <animation>0</animation>\n"
" <name/>\n"
" <source>*/*@*</source>\n"
" </properties>\n"
" <name/>\n"
"</layer-properties>\n";
tl::OutputStringStream os2;
tl::OutputStream oss2 (os2);
list.save (oss2);
std::string os2_str (os2.string ());
EXPECT_EQ (os2_str, res);
}
TEST (2a)
{
tl::XMLStringSource s (
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <frame-color>#aabbcc</frame-color>\n"
" <group-members>\n"
" <frame-color>#010203</frame-color>\n"
" </group-members>\n"
" <group-members>\n"
" </group-members>\n"
" </properties>\n"
" <properties>\n"
" <frame-color></frame-color>\n"
" <group-members>\n"
" <group-members>\n"
" <frame-color>#020304</frame-color>\n"
" </group-members>\n"
" <group-members>\n"
" <frame-color>#030405</frame-color>\n"
" </group-members>\n"
" </group-members>\n"
" <group-members>\n"
" <frame-color>#102030</frame-color>\n"
" </group-members>\n"
" </properties>\n"
"</layer-properties>\n");
lay::LayerPropertiesList list;
list.load (s);
tl::OutputStringStream os;
tl::OutputStream oss (os);
list.save (oss);
list = lay::LayerPropertiesList ();
std::string s2_str (os.string ());
tl::XMLStringSource s2 (s2_str);
list.load (s2);
const char *ref =
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <frame-color>#aabbcc</frame-color>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#aabbcc</frame-color>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#020304</frame-color>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#030405</frame-color>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#102030</frame-color>\n"
" </properties>\n"
"</layer-properties>\n";
lay::LayerPropertiesList flat_ref;
tl::XMLStringSource s3 (ref);
flat_ref.load (s3);
EXPECT_EQ (compare_real (flat_ref, list), true);
}
TEST (2b)
{
tl::XMLStringSource s (
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <frame-color>#aabbcc</frame-color>\n"
" <group-members>\n"
" <frame-color>#010203</frame-color>\n"
" </group-members>\n"
" <group-members>\n"
" </group-members>\n"
" </properties>\n"
" <properties>\n"
" <frame-color></frame-color>\n"
" <group-members>\n"
" <group-members>\n"
" <frame-color>#020304</frame-color>\n"
" </group-members>\n"
" <group-members>\n"
" <frame-color>#030405</frame-color>\n"
" </group-members>\n"
" </group-members>\n"
" <group-members>\n"
" <frame-color>#102030</frame-color>\n"
" </group-members>\n"
" </properties>\n"
"</layer-properties>\n");
lay::LayerPropertiesList list;
list.load (s);
tl::OutputStringStream os;
tl::OutputStream oss (os);
list.save (oss);
list = lay::LayerPropertiesList ();
std::string s2_str (os.string ());
tl::XMLStringSource s2 (s2_str);
list.load (s2);
const char *ref =
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <frame-color>#aabbcc</frame-color>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#aabbcc</frame-color>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#020304</frame-color>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#030405</frame-color>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#102031</frame-color>\n"
" </properties>\n"
"</layer-properties>\n";
lay::LayerPropertiesList flat_ref;
tl::XMLStringSource s3 (ref);
flat_ref.load (s3);
EXPECT_EQ (compare_real (flat_ref, list), false);
}
TEST (2c)
{
tl::XMLStringSource s (
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <frame-color>#aabbcc</frame-color>\n"
" <group-members>\n"
" <frame-color>#010203</frame-color>\n"
" </group-members>\n"
" <group-members>\n"
" </group-members>\n"
" </properties>\n"
" <properties>\n"
" <frame-color></frame-color>\n"
" <group-members>\n"
" <group-members>\n"
" <frame-color>#020304</frame-color>\n"
" </group-members>\n"
" <group-members>\n"
" <frame-color>#030405</frame-color>\n"
" </group-members>\n"
" </group-members>\n"
" <group-members>\n"
" <frame-color>#102030</frame-color>\n"
" </group-members>\n"
" </properties>\n"
"</layer-properties>\n");
lay::LayerPropertiesList list;
list.load (s);
tl::OutputStringStream os;
tl::OutputStream oss (os);
list.save (oss);
list = lay::LayerPropertiesList ();
std::string s2_str (os.string ());
tl::XMLStringSource s2 (s2_str);
list.load (s2);
const char *ref =
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <frame-color>#aabbcc</frame-color>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#aabbcc</frame-color>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#020304</frame-color>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#030405</frame-color>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#102030</frame-color>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#102030</frame-color>\n"
" </properties>\n"
"</layer-properties>\n";
lay::LayerPropertiesList flat_ref;
tl::XMLStringSource s3 (ref);
flat_ref.load (s3);
EXPECT_EQ (compare_real (flat_ref, list), false);
}
TEST (2d)
{
tl::XMLStringSource s (
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <frame-color>#aabbcc</frame-color>\n"
" <group-members>\n"
" <frame-color>#010203</frame-color>\n"
" </group-members>\n"
" <group-members>\n"
" </group-members>\n"
" </properties>\n"
" <properties>\n"
" <frame-color></frame-color>\n"
" <group-members>\n"
" <group-members>\n"
" <frame-color>#020304</frame-color>\n"
" </group-members>\n"
" <group-members>\n"
" <frame-color>#030405</frame-color>\n"
" </group-members>\n"
" </group-members>\n"
" <group-members>\n"
" <frame-color>#102030</frame-color>\n"
" </group-members>\n"
" </properties>\n"
"</layer-properties>\n");
lay::LayerPropertiesList list;
list.load (s);
tl::OutputStringStream os;
tl::OutputStream oss (os);
list.save (oss);
list = lay::LayerPropertiesList ();
std::string s2_str (os.string ());
tl::XMLStringSource s2 (s2_str);
list.load (s2);
const char *ref =
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <frame-color>#aabbcc</frame-color>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#aabbcc</frame-color>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#020304</frame-color>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#030405</frame-color>\n"
" </properties>\n"
"</layer-properties>\n";
lay::LayerPropertiesList flat_ref;
tl::XMLStringSource s3 (ref);
flat_ref.load (s3);
EXPECT_EQ (compare_real (flat_ref, list), false);
}
TEST (3)
{
tl::XMLStringSource s (
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <fill-color>#aabbcc</fill-color>\n"
" <group-members>\n"
" <fill-color>#010203</fill-color>\n"
" </group-members>\n"
" <group-members>\n"
" </group-members>\n"
" </properties>\n"
" <properties>\n"
" <fill-color></fill-color>\n"
" <group-members>\n"
" <group-members>\n"
" <fill-color>#020304</fill-color>\n"
" </group-members>\n"
" <group-members>\n"
" <fill-color>#030405</fill-color>\n"
" </group-members>\n"
" </group-members>\n"
" <group-members>\n"
" <fill-color>#102030</fill-color>\n"
" </group-members>\n"
" </properties>\n"
"</layer-properties>\n");
lay::LayerPropertiesList list;
list.load (s);
tl::OutputStringStream os;
tl::OutputStream oss (os);
list.save (oss);
std::string s2_str (os.string ());
list = lay::LayerPropertiesList ();
tl::XMLStringSource s2 (s2_str);
list.load (s2);
const char *ref =
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <fill-color>#aabbcc</fill-color>\n"
" </properties>\n"
" <properties>\n"
" <fill-color>#aabbcc</fill-color>\n"
" </properties>\n"
" <properties>\n"
" <fill-color>#020304</fill-color>\n"
" </properties>\n"
" <properties>\n"
" <fill-color>#030405</fill-color>\n"
" </properties>\n"
" <properties>\n"
" <fill-color>#102030</fill-color>\n"
" </properties>\n"
"</layer-properties>\n";
lay::LayerPropertiesList flat_ref;
tl::XMLStringSource s3 (ref);
flat_ref.load (s3);
EXPECT_EQ (compare_real (flat_ref, list), true);
}
TEST (4)
{
tl::XMLStringSource s (
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <dither-pattern>1</dither-pattern>\n"
" <group-members>\n"
" <dither-pattern>2</dither-pattern>\n"
" </group-members>\n"
" <group-members>\n"
" </group-members>\n"
" </properties>\n"
" <properties>\n"
" <dither-pattern></dither-pattern>\n"
" <group-members>\n"
" <group-members>\n"
" <dither-pattern></dither-pattern>\n"
" </group-members>\n"
" <group-members>\n"
" <dither-pattern>12</dither-pattern>\n"
" </group-members>\n"
" </group-members>\n"
" <group-members>\n"
" <dither-pattern>14</dither-pattern>\n"
" </group-members>\n"
" </properties>\n"
"</layer-properties>\n");
lay::LayerPropertiesList list;
list.load (s);
tl::OutputStringStream os;
tl::OutputStream oss (os);
list.save (oss);
std::string s2_str (os.string ());
list = lay::LayerPropertiesList ();
tl::XMLStringSource s2 (s2_str);
list.load (s2);
const char *ref =
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <dither-pattern>1</dither-pattern>\n"
" </properties>\n"
" <properties>\n"
" <dither-pattern>1</dither-pattern>\n"
" </properties>\n"
" <properties>\n"
" <dither-pattern></dither-pattern>\n"
" </properties>\n"
" <properties>\n"
" <dither-pattern>12</dither-pattern>\n"
" </properties>\n"
" <properties>\n"
" <dither-pattern>14</dither-pattern>\n"
" </properties>\n"
"</layer-properties>\n";
lay::LayerPropertiesList flat_ref;
tl::XMLStringSource s3 (ref);
flat_ref.load (s3);
EXPECT_EQ (compare_real (flat_ref, list), true);
}
TEST (5)
{
tl::XMLStringSource s (
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <visible>1</visible>\n"
" <group-members>\n"
" <visible>1</visible>\n"
" </group-members>\n"
" <group-members>\n"
" </group-members>\n"
" </properties>\n"
" <properties>\n"
" <visible>0</visible>\n"
" <group-members>\n"
" <group-members>\n"
" <visible>0</visible>\n"
" </group-members>\n"
" <group-members>\n"
" <visible>1</visible>\n"
" </group-members>\n"
" </group-members>\n"
" <group-members>\n"
" <visible>0</visible>\n"
" </group-members>\n"
" </properties>\n"
"</layer-properties>\n");
lay::LayerPropertiesList list;
list.load (s);
tl::OutputStringStream os;
tl::OutputStream oss (os);
list.save (oss);
std::string s2_str (os.string ());
list = lay::LayerPropertiesList ();
tl::XMLStringSource s2 (s2_str);
list.load (s2);
const char *ref =
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <visible>1</visible>\n"
" </properties>\n"
" <properties>\n"
" <visible>1</visible>\n"
" </properties>\n"
" <properties>\n"
" <visible>0</visible>\n"
" </properties>\n"
" <properties>\n"
" <visible>0</visible>\n"
" </properties>\n"
" <properties>\n"
" <visible>0</visible>\n"
" </properties>\n"
"</layer-properties>\n";
lay::LayerPropertiesList flat_ref;
tl::XMLStringSource s3 (ref);
flat_ref.load (s3);
EXPECT_EQ (compare_real (flat_ref, list), true);
}
TEST (6)
{
tl::XMLStringSource s (
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <transparent>1</transparent>\n"
" <group-members>\n"
" <transparent>0</transparent>\n"
" </group-members>\n"
" <group-members>\n"
" </group-members>\n"
" </properties>\n"
" <properties>\n"
" <transparent>0</transparent>\n"
" <group-members>\n"
" <group-members>\n"
" <transparent>0</transparent>\n"
" </group-members>\n"
" <group-members>\n"
" <transparent>1</transparent>\n"
" </group-members>\n"
" </group-members>\n"
" <group-members>\n"
" <transparent>0</transparent>\n"
" </group-members>\n"
" </properties>\n"
"</layer-properties>\n");
lay::LayerPropertiesList list;
list.load (s);
tl::OutputStringStream os;
tl::OutputStream oss (os);
list.save (oss);
std::string s2_str (os.string ());
list = lay::LayerPropertiesList ();
tl::XMLStringSource s2 (s2_str);
list.load (s2);
const char *ref =
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <transparent>1</transparent>\n"
" </properties>\n"
" <properties>\n"
" <transparent>1</transparent>\n"
" </properties>\n"
" <properties>\n"
" <transparent>0</transparent>\n"
" </properties>\n"
" <properties>\n"
" <transparent>1</transparent>\n"
" </properties>\n"
" <properties>\n"
" <transparent>0</transparent>\n"
" </properties>\n"
"</layer-properties>\n";
lay::LayerPropertiesList flat_ref;
tl::XMLStringSource s3 (ref);
flat_ref.load (s3);
EXPECT_EQ (compare_real (flat_ref, list), true);
}
TEST (7)
{
tl::XMLStringSource s (
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <width>1</width>\n"
" <group-members>\n"
" <width>0</width>\n"
" </group-members>\n"
" <group-members>\n"
" </group-members>\n"
" </properties>\n"
" <properties>\n"
" <width>0</width>\n"
" <group-members>\n"
" <group-members>\n"
" <width>0</width>\n"
" </group-members>\n"
" <group-members>\n"
" <width>1</width>\n"
" </group-members>\n"
" </group-members>\n"
" <group-members>\n"
" <width>0</width>\n"
" </group-members>\n"
" </properties>\n"
"</layer-properties>\n");
lay::LayerPropertiesList list;
list.load (s);
tl::OutputStringStream os;
tl::OutputStream oss (os);
list.save (oss);
std::string s2_str (os.string ());
list = lay::LayerPropertiesList ();
tl::XMLStringSource s2 (s2_str);
list.load (s2);
const char *ref =
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <width>1</width>\n"
" </properties>\n"
" <properties>\n"
" <width>1</width>\n"
" </properties>\n"
" <properties>\n"
" <width>0</width>\n"
" </properties>\n"
" <properties>\n"
" <width>1</width>\n"
" </properties>\n"
" <properties>\n"
" <width>0</width>\n"
" </properties>\n"
"</layer-properties>\n";
lay::LayerPropertiesList flat_ref;
tl::XMLStringSource s3 (ref);
flat_ref.load (s3);
EXPECT_EQ (compare_real (flat_ref, list), true);
}
TEST (8)
{
tl::XMLStringSource s (
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <animation>1</animation>\n"
" <group-members>\n"
" <animation>0</animation>\n"
" </group-members>\n"
" <group-members>\n"
" </group-members>\n"
" </properties>\n"
" <properties>\n"
" <animation>0</animation>\n"
" <group-members>\n"
" <group-members>\n"
" <animation>0</animation>\n"
" </group-members>\n"
" <group-members>\n"
" <animation>1</animation>\n"
" </group-members>\n"
" </group-members>\n"
" <group-members>\n"
" <animation>0</animation>\n"
" </group-members>\n"
" </properties>\n"
"</layer-properties>\n");
lay::LayerPropertiesList list;
list.load (s);
tl::OutputStringStream os;
tl::OutputStream oss (os);
list.save (oss);
std::string s2_str (os.string ());
list = lay::LayerPropertiesList ();
tl::XMLStringSource s2 (s2_str);
list.load (s2);
const char *ref =
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <animation>1</animation>\n"
" </properties>\n"
" <properties>\n"
" <animation>1</animation>\n"
" </properties>\n"
" <properties>\n"
" <animation>0</animation>\n"
" </properties>\n"
" <properties>\n"
" <animation>1</animation>\n"
" </properties>\n"
" <properties>\n"
" <animation>0</animation>\n"
" </properties>\n"
"</layer-properties>\n";
lay::LayerPropertiesList flat_ref;
tl::XMLStringSource s3 (ref);
flat_ref.load (s3);
EXPECT_EQ (compare_real (flat_ref, list), true);
}
TEST (9)
{
tl::XMLStringSource s (
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <animation>1</animation>\n"
" <group-members>\n"
" <animation>0</animation>\n"
" </group-members>\n"
" <group-members>\n"
" </group-members>\n"
" </properties>\n"
" <properties>\n"
" <animation>0</animation>\n"
" <group-members>\n"
" <group-members>\n"
" <animation>0</animation>\n"
" </group-members>\n"
" <group-members>\n"
" <animation>1</animation>\n"
" </group-members>\n"
" </group-members>\n"
" <group-members>\n"
" <animation>0</animation>\n"
" </group-members>\n"
" </properties>\n"
"</layer-properties>\n");
lay::LayerPropertiesList list;
list.load (s);
EXPECT_EQ (size (list), 8);
size_t n, nn;
lay::LayerPropertiesIterator end = list.begin_recursive ();
while (! end.at_end ()) {
++end;
}
nn = size (list);
n = 0;
for (lay::LayerPropertiesIterator iter = list.begin_recursive (); ! iter.at_end (); ++iter, ++n) {
lay::LayerPropertiesIterator iter2 = list.begin_recursive ();
for (unsigned int i = 0; i < n; ++i) {
EXPECT_EQ (iter2 < iter, true);
EXPECT_EQ (iter < iter2, false);
++iter2;
}
EXPECT_EQ (*iter2 == *iter, true);
lay::LayerPropertiesIterator iter3 = iter2;
if (n < nn) {
for (unsigned int i = 0; i < nn - n; ++i) {
++iter3;
EXPECT_EQ (iter2 < iter3, true);
EXPECT_EQ (iter3 < iter2, false);
}
}
EXPECT_EQ (iter3 == end, true);
}
EXPECT_EQ (n, 8);
}
TEST (10)
{
tl::XMLStringSource s (
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <animation>1</animation>\n"
" <group-members>\n"
" <animation>2</animation>\n"
" </group-members>\n"
" <group-members>\n"
" </group-members>\n"
" </properties>\n"
" <properties>\n"
" <animation>4</animation>\n"
" <group-members>\n"
" <group-members>\n"
" <animation>5</animation>\n"
" </group-members>\n"
" <group-members>\n"
" <animation>6</animation>\n"
" </group-members>\n"
" </group-members>\n"
" <group-members>\n"
" <animation>7</animation>\n"
" </group-members>\n"
" </properties>\n"
"</layer-properties>\n");
lay::LayerPropertiesList list;
list.load (s);
lay::LayerPropertiesList org_list = list;
EXPECT_EQ (size (list), 8);
std::vector<lay::LayerPropertiesNode> nodes;
std::vector<size_t> positions;
while (size (list) > 0) {
lay::LayerPropertiesIterator iter = list.begin_recursive ();
for (unsigned int i = 0; i < size(list) - 1; ++i) {
++iter;
}
nodes.push_back (*iter);
positions.push_back (iter.uint ());
list.erase (iter);
}
EXPECT_EQ (nodes.size (), 8);
for (unsigned int i = 0; i < 8; ++i) {
lay::LayerPropertiesIterator iter (list, positions.back ());
list.insert (iter, nodes.back ());
nodes.pop_back ();
positions.pop_back ();
}
EXPECT_EQ (list == org_list, true);
while (size (list) > 0) {
lay::LayerPropertiesIterator iter = list.begin_recursive ();
nodes.push_back (*iter);
positions.push_back (iter.uint ());
list.erase (iter);
}
EXPECT_EQ (nodes.size (), 2);
for (unsigned int i = 0; i < 2; ++i) {
lay::LayerPropertiesIterator iter (list, positions.back ());
list.insert (iter, nodes.back ());
nodes.pop_back ();
positions.pop_back ();
}
EXPECT_EQ (list == org_list, true);
}
void
build_list (lay::LayerPropertiesConstIterator &iter, lay::LayerPropertiesList &list, lay::LayerPropertiesNode *node)
{
while (! iter.at_end ()) {
lay::LayerProperties props (*iter);
if (node) {
node->add_child (lay::LayerPropertiesNode (props));
if (iter->has_children ()) {
iter.down_first_child ();
build_list (iter, list, &node->last_child ());
iter.up ();
}
} else {
list.push_back (lay::LayerPropertiesNode (props));
if (iter->has_children ()) {
iter.down_first_child ();
build_list (iter, list, &list.back ());
iter.up ();
}
}
iter.next_sibling ();
}
}
TEST (11)
{
tl::XMLStringSource s (
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <animation>1</animation>\n"
" <group-members>\n"
" <animation>2</animation>\n"
" </group-members>\n"
" <group-members>\n"
" </group-members>\n"
" </properties>\n"
" <properties>\n"
" <animation>4</animation>\n"
" <group-members>\n"
" <group-members>\n"
" <animation>5</animation>\n"
" </group-members>\n"
" <group-members>\n"
" <animation>6</animation>\n"
" </group-members>\n"
" </group-members>\n"
" <group-members>\n"
" <animation>7</animation>\n"
" </group-members>\n"
" </properties>\n"
"</layer-properties>\n");
lay::LayerPropertiesList list;
list.load (s);
lay::LayerPropertiesList new_list;
lay::LayerPropertiesConstIterator iter (list.begin_recursive ());
build_list (iter, new_list, 0);
EXPECT_EQ (size (new_list), size (list));
EXPECT_EQ (iter.at_end (), true);
EXPECT_EQ (list == new_list, true);
}
void
test_list (ut::TestBase *_this, lay::LayerPropertiesConstIterator &iter)
{
lay::LayerPropertiesConstIterator i0 (iter);
size_t nc = 0;
while (! iter.at_end ()) {
lay::LayerProperties props (*iter);
if (iter->has_children ()) {
iter.down_first_child ();
test_list (_this, iter);
iter.up ();
}
EXPECT_EQ (iter.child_index (), nc);
iter.next_sibling ();
++nc;
}
i0.next_sibling (nc);
EXPECT_EQ (iter == i0, true);
}
TEST (12)
{
tl::XMLStringSource s (
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <animation>1</animation>\n"
" <group-members>\n"
" <animation>2</animation>\n"
" </group-members>\n"
" <group-members>\n"
" </group-members>\n"
" </properties>\n"
" <properties>\n"
" <animation>4</animation>\n"
" <group-members>\n"
" <group-members>\n"
" <animation>5</animation>\n"
" </group-members>\n"
" <group-members>\n"
" <animation>6</animation>\n"
" </group-members>\n"
" </group-members>\n"
" <group-members>\n"
" <animation>7</animation>\n"
" </group-members>\n"
" </properties>\n"
"</layer-properties>\n");
lay::LayerPropertiesList list;
list.load (s);
lay::LayerPropertiesConstIterator iter (list.begin_recursive ());
test_list (_this, iter);
}
TEST (13)
{
tl::XMLStringSource s (
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <frame-color>#112233</frame-color>\n"
" <fill-color>#aabbcc</fill-color>\n"
" <frame-brightness>-20</frame-brightness>\n"
" <fill-brightness>16</fill-brightness>\n"
" <dither-pattern>5</dither-pattern>\n"
" <visible>0</visible>\n"
" <transparent>1</transparent>\n"
" <width>3</width>\n"
" <marked>1</marked>\n"
" <animation>2</animation>\n"
" <marked>1</marked>\n"
" <source>3/2@1</source>\n"
" <group-members>\n"
" </group-members>\n"
" </properties>\n"
"</layer-properties>\n");
lay::LayerPropertiesList list;
list.load (s);
lay::LayerPropertiesConstIterator iter (list.begin_recursive ());
++iter;
EXPECT_EQ (iter->has_children (), false);
const lay::LayerPropertiesNode &node = *iter;
lay::LayerProperties flat = node.flat ();
EXPECT_EQ (node.animation (false /*local*/), 0);
EXPECT_EQ (node.animation (true /*real*/), 2);
EXPECT_EQ (flat.animation (false /*local*/), 2);
EXPECT_EQ (flat.animation (true /*real*/), 2);
EXPECT_EQ (flat.eff_fill_color (true) == node.eff_fill_color (true), true);
EXPECT_EQ (flat.eff_fill_color (false) == node.eff_fill_color (true), true);
EXPECT_EQ (flat.eff_fill_color (false) == node.eff_fill_color (false), false);
EXPECT_EQ (flat.eff_frame_color (true) == node.eff_frame_color (true), true);
EXPECT_EQ (flat.eff_frame_color (false) == node.eff_frame_color (true), true);
EXPECT_EQ (flat.eff_frame_color (false) == node.eff_frame_color (false), false);
EXPECT_EQ (flat.frame_brightness (true) == node.frame_brightness (true), true);
EXPECT_EQ (flat.frame_brightness (false) == node.frame_brightness (true), true);
EXPECT_EQ (flat.frame_brightness (false) == node.frame_brightness (false), false);
EXPECT_EQ (flat.fill_brightness (true) == node.fill_brightness (true), true);
EXPECT_EQ (flat.fill_brightness (false) == node.fill_brightness (true), true);
EXPECT_EQ (flat.fill_brightness (false) == node.fill_brightness (false), false);
EXPECT_EQ (flat.dither_pattern (true) == node.dither_pattern (true), true);
EXPECT_EQ (flat.dither_pattern (false) == node.dither_pattern (true), true);
EXPECT_EQ (flat.dither_pattern (false) == node.dither_pattern (false), false);
EXPECT_EQ (flat.visible (true) == node.visible (true), true);
EXPECT_EQ (flat.visible (false) == node.visible (true), true);
EXPECT_EQ (flat.visible (false) == node.visible (false), false);
EXPECT_EQ (flat.transparent (true) == node.transparent (true), true);
EXPECT_EQ (flat.transparent (false) == node.transparent (true), true);
EXPECT_EQ (flat.transparent (false) == node.transparent (false), false);
EXPECT_EQ (flat.marked (true) == node.marked (true), true);
EXPECT_EQ (flat.marked (false) == node.marked (true), true);
EXPECT_EQ (flat.marked (false) == node.marked (false), false);
EXPECT_EQ (flat.width (true) == node.width (true), true);
EXPECT_EQ (flat.width (false) == node.width (true), true);
EXPECT_EQ (flat.width (false) == node.width (false), false);
EXPECT_EQ (flat.animation (true) == node.animation (true), true);
EXPECT_EQ (flat.animation (false) == node.animation (true), true);
EXPECT_EQ (flat.animation (false) == node.animation (false), false);
EXPECT_EQ (flat.source (true) == node.source (true), true);
EXPECT_EQ (flat.source (false) == node.source (true), true);
EXPECT_EQ (flat.source (false) == node.source (false), false);
}
TEST (14)
{
tl::XMLStringSource s (
"<?xml version=\"1.0\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <frame-color>#112233</frame-color>\n"
" <fill-color>#aabbcc</fill-color>\n"
" <frame-brightness>-20</frame-brightness>\n"
" <fill-brightness>16</fill-brightness>\n"
" <dither-pattern>5</dither-pattern>\n"
" <visible>0</visible>\n"
" <transparent>1</transparent>\n"
" <width>3</width>\n"
" <marked>1</marked>\n"
" <animation>2</animation>\n"
" <marked>1</marked>\n"
" <source>3/2@1</source>\n"
" <group-members>\n"
" </group-members>\n"
" </properties>\n"
"</layer-properties>\n");
lay::LayerPropertiesList list;
list.load (s);
lay::LayerPropertiesConstIterator iter (list.begin_recursive ());
++iter;
EXPECT_EQ (iter->has_children (), false);
const lay::LayerPropertiesNode &node = *iter;
EXPECT_EQ (node.animation (false /*local*/), 0);
EXPECT_EQ (node.animation (true /*real*/), 2);
lay::LayerProperties f = node.flat ();
lay::LayerProperties flat (f);
EXPECT_EQ (flat.animation (false /*local*/), 2);
EXPECT_EQ (flat.animation (true /*real*/), 2);
EXPECT_EQ (flat.eff_fill_color (true) == node.eff_fill_color (true), true);
EXPECT_EQ (flat.eff_fill_color (false) == node.eff_fill_color (true), true);
EXPECT_EQ (flat.eff_fill_color (false) == node.eff_fill_color (false), false);
EXPECT_EQ (flat.eff_frame_color (true) == node.eff_frame_color (true), true);
EXPECT_EQ (flat.eff_frame_color (false) == node.eff_frame_color (true), true);
EXPECT_EQ (flat.eff_frame_color (false) == node.eff_frame_color (false), false);
EXPECT_EQ (flat.frame_brightness (true) == node.frame_brightness (true), true);
EXPECT_EQ (flat.frame_brightness (false) == node.frame_brightness (true), true);
EXPECT_EQ (flat.frame_brightness (false) == node.frame_brightness (false), false);
EXPECT_EQ (flat.fill_brightness (true) == node.fill_brightness (true), true);
EXPECT_EQ (flat.fill_brightness (false) == node.fill_brightness (true), true);
EXPECT_EQ (flat.fill_brightness (false) == node.fill_brightness (false), false);
EXPECT_EQ (flat.dither_pattern (true) == node.dither_pattern (true), true);
EXPECT_EQ (flat.dither_pattern (false) == node.dither_pattern (true), true);
EXPECT_EQ (flat.dither_pattern (false) == node.dither_pattern (false), false);
EXPECT_EQ (flat.visible (true) == node.visible (true), true);
EXPECT_EQ (flat.visible (false) == node.visible (true), true);
EXPECT_EQ (flat.visible (false) == node.visible (false), false);
EXPECT_EQ (flat.transparent (true) == node.transparent (true), true);
EXPECT_EQ (flat.transparent (false) == node.transparent (true), true);
EXPECT_EQ (flat.transparent (false) == node.transparent (false), false);
EXPECT_EQ (flat.marked (true) == node.marked (true), true);
EXPECT_EQ (flat.marked (false) == node.marked (true), true);
EXPECT_EQ (flat.marked (false) == node.marked (false), false);
EXPECT_EQ (flat.width (true) == node.width (true), true);
EXPECT_EQ (flat.width (false) == node.width (true), true);
EXPECT_EQ (flat.width (false) == node.width (false), false);
EXPECT_EQ (flat.animation (true) == node.animation (true), true);
EXPECT_EQ (flat.animation (false) == node.animation (true), true);
EXPECT_EQ (flat.animation (false) == node.animation (false), false);
EXPECT_EQ (flat.source (true) == node.source (true), true);
EXPECT_EQ (flat.source (false) == node.source (true), true);
EXPECT_EQ (flat.source (false) == node.source (false), false);
}
TEST (15)
{
lay::LayerPropertiesList list;
list.push_back (lay::LayerPropertiesNode ());
unsigned int id = list.back ().id ();
lay::LayerPropertiesNode n = list.back ();
EXPECT_EQ (n.id (), id);
lay::LayerPropertiesNode nn;
EXPECT_EQ (nn.id () == id, false);
list.push_back (nn);
EXPECT_EQ (list.back ().id (), nn.id ());
lay::LayerPropertiesNode n2;
EXPECT_EQ (n2.id () == id, false);
EXPECT_EQ (n2.id () == nn.id (), false);
lay::LayerPropertiesIterator iter = list.begin_recursive ();
++iter;
list.insert (iter, n2);
EXPECT_EQ (list.begin ()[0].id (), id);
EXPECT_EQ (list.begin ()[1].id (), n2.id ());
EXPECT_EQ (list.begin ()[2].id (), nn.id ());
}
TEST (16)
{
lay::LayerPropertiesList list;
db::Manager mgr;
lay::LayoutView view (&mgr, lay::Application::instance ()->is_editable (), lay::MainWindow::instance ());
list.attach_view (&view, 0);
int cv1 = view.create_layout ("", true, false);
db::Layout &ly1 = view.cellview (cv1)->layout ();
ly1.insert_layer (db::LayerProperties (1, 0));
ly1.insert_layer (db::LayerProperties (2, 0));
list.push_back (lay::LayerPropertiesNode ());
list.back ().set_source ("1/0@1");
std::map<int, int> cvmap;
cvmap.insert (std::make_pair (cv1, cv1));
list.expand (cvmap, false);
tl::OutputStringStream os;
tl::OutputStream oss (os);
list.save (oss);
tl::XMLStringSource s (
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <frame-color>#ff80a8</frame-color>\n"
" <fill-color>#ff80a8</fill-color>\n"
" <frame-brightness>0</frame-brightness>\n"
" <fill-brightness>0</fill-brightness>\n"
" <dither-pattern>I9</dither-pattern>\n"
" <valid>true</valid>\n"
" <visible>true</visible>\n"
" <transparent>false</transparent>\n"
" <width/>\n"
" <marked>false</marked>\n"
" <animation>0</animation>\n"
" <name/>\n"
" <source>1/0@1</source>\n"
" </properties>\n"
" <name/>\n"
"</layer-properties>\n"
);
lay::LayerPropertiesList ref;
ref.load (s);
EXPECT_EQ (compare_real (ref, list), true);
}
TEST (17)
{
lay::LayerPropertiesList list;
db::Manager mgr;
lay::LayoutView view (&mgr, lay::Application::instance ()->is_editable (), lay::MainWindow::instance ());
list.attach_view (&view, 0);
int cv1 = view.create_layout ("", true, false);
db::Layout &ly1 = view.cellview (cv1)->layout ();
ly1.insert_layer (db::LayerProperties (1, 0));
ly1.insert_layer (db::LayerProperties (2, 0));
list.push_back (lay::LayerPropertiesNode ());
list.back ().set_source ("1/0@1");
std::map<int, int> cvmap;
cvmap.insert (std::make_pair (cv1, cv1));
list.expand (cvmap, true);
tl::OutputStringStream os;
tl::OutputStream oss (os);
list.save (oss);
tl::XMLStringSource s (
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <frame-color>#ff80a8</frame-color>\n"
" <fill-color>#ff80a8</fill-color>\n"
" <frame-brightness>0</frame-brightness>\n"
" <fill-brightness>0</fill-brightness>\n"
" <dither-pattern>I9</dither-pattern>\n"
" <valid>true</valid>\n"
" <visible>true</visible>\n"
" <transparent>false</transparent>\n"
" <width/>\n"
" <marked>false</marked>\n"
" <animation>0</animation>\n"
" <name/>\n"
" <source>1/0@1</source>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#c080ff</frame-color>\n"
" <fill-color>#c080ff</fill-color>\n"
" <frame-brightness>0</frame-brightness>\n"
" <fill-brightness>0</fill-brightness>\n"
" <dither-pattern>I5</dither-pattern>\n"
" <valid>true</valid>\n"
" <visible>true</visible>\n"
" <transparent>false</transparent>\n"
" <width/>\n"
" <marked>false</marked>\n"
" <animation>0</animation>\n"
" <name/>\n"
" <source>2/0@1</source>\n"
" </properties>\n"
" <name/>\n"
"</layer-properties>\n"
);
lay::LayerPropertiesList ref;
ref.load (s);
EXPECT_EQ (compare_real (ref, list), true);
}
TEST (18)
{
lay::LayerPropertiesList list;
db::Manager mgr;
lay::LayoutView view (&mgr, lay::Application::instance ()->is_editable (), lay::MainWindow::instance ());
list.attach_view (&view, 0);
int cv1 = view.create_layout ("", true, false);
db::Layout &ly1 = view.cellview (cv1)->layout ();
ly1.insert_layer (db::LayerProperties (1, 0));
ly1.insert_layer (db::LayerProperties (2, 0));
list.push_back (lay::LayerPropertiesNode ());
list.back ().set_source ("1/0@1");
list.push_back (lay::LayerPropertiesNode ());
std::map<int, int> cvmap;
cvmap.insert (std::make_pair (cv1, cv1));
list.expand (cvmap, false);
tl::OutputStringStream os;
tl::OutputStream oss (os);
list.save (oss);
tl::XMLStringSource s (
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <frame-color>#ff80a8</frame-color>\n"
" <fill-color>#ff80a8</fill-color>\n"
" <frame-brightness>0</frame-brightness>\n"
" <fill-brightness>0</fill-brightness>\n"
" <dither-pattern>I9</dither-pattern>\n"
" <valid>true</valid>\n"
" <visible>true</visible>\n"
" <transparent>false</transparent>\n"
" <width/>\n"
" <marked>false</marked>\n"
" <animation>0</animation>\n"
" <name/>\n"
" <source>1/0@1</source>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#c080ff</frame-color>\n"
" <fill-color>#c080ff</fill-color>\n"
" <frame-brightness>0</frame-brightness>\n"
" <fill-brightness>0</fill-brightness>\n"
" <dither-pattern>I5</dither-pattern>\n"
" <valid>true</valid>\n"
" <visible>true</visible>\n"
" <transparent>false</transparent>\n"
" <width/>\n"
" <marked>false</marked>\n"
" <animation>0</animation>\n"
" <name/>\n"
" <source>2/0@1</source>\n"
" </properties>\n"
" <name/>\n"
"</layer-properties>\n"
);
lay::LayerPropertiesList ref;
ref.load (s);
EXPECT_EQ (compare_real (ref, list), true);
}
TEST (19)
{
lay::LayerPropertiesList list;
db::Manager mgr;
lay::LayoutView view (&mgr, lay::Application::instance ()->is_editable (), lay::MainWindow::instance ());
list.attach_view (&view, 0);
int cv1 = view.create_layout ("", true, false);
db::Layout &ly1 = view.cellview (cv1)->layout ();
ly1.insert_layer (db::LayerProperties (1, 0, "L01"));
ly1.insert_layer (db::LayerProperties (2, 0, "L02"));
list.push_back (lay::LayerPropertiesNode ());
list.back ().set_source ("1/0@1");
list.push_back (lay::LayerPropertiesNode ());
list.back ().set_source ("*/*@* (r90)");
std::map<int, int> cvmap;
cvmap.insert (std::make_pair (cv1, cv1));
list.expand (cvmap, false);
tl::OutputStringStream os;
tl::OutputStream oss (os);
list.save (oss);
tl::XMLStringSource s (
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <frame-color>#ff80a8</frame-color>\n"
" <fill-color>#ff80a8</fill-color>\n"
" <frame-brightness>0</frame-brightness>\n"
" <fill-brightness>0</fill-brightness>\n"
" <dither-pattern>I9</dither-pattern>\n"
" <valid>true</valid>\n"
" <visible>true</visible>\n"
" <transparent>false</transparent>\n"
" <width/>\n"
" <marked>false</marked>\n"
" <animation>0</animation>\n"
" <name/>\n"
" <source>1/0@1</source>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#c080ff</frame-color>\n"
" <fill-color>#c080ff</fill-color>\n"
" <frame-brightness>0</frame-brightness>\n"
" <fill-brightness>0</fill-brightness>\n"
" <dither-pattern>I5</dither-pattern>\n"
" <valid>true</valid>\n"
" <visible>true</visible>\n"
" <transparent>false</transparent>\n"
" <width/>\n"
" <marked>false</marked>\n"
" <animation>0</animation>\n"
" <name/>\n"
" <source>L02 2/0@1 (r90 *1 0,0)</source>\n"
" </properties>\n"
" <name/>\n"
"</layer-properties>\n"
);
lay::LayerPropertiesList ref;
ref.load (s);
EXPECT_EQ (compare_real (ref, list), true);
}
TEST (20)
{
lay::LayerPropertiesList list;
db::Manager mgr;
lay::LayoutView view (&mgr, lay::Application::instance ()->is_editable (), lay::MainWindow::instance ());
list.attach_view (&view, 0);
int cv1 = view.create_layout ("", true, false);
db::Layout &ly1 = view.cellview (cv1)->layout ();
ly1.insert_layer (db::LayerProperties (1, 0, "L01"));
ly1.insert_layer (db::LayerProperties (2, 0, "L02"));
list.push_back (lay::LayerPropertiesNode ());
list.back ().set_source ("1/0@1");
list.push_back (lay::LayerPropertiesNode ());
list.back ().set_source ("*/*@* (r90)");
list.back ().set_frame_color (0x123456);
list.back ().set_fill_color (0x654321);
list.back ().set_visible (false);
std::map<int, int> cvmap;
cvmap.insert (std::make_pair (cv1, cv1));
list.expand (cvmap, false);
tl::OutputStringStream os;
tl::OutputStream oss (os);
list.save (oss);
tl::XMLStringSource s (
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <frame-color>#ff80a8</frame-color>\n"
" <fill-color>#ff80a8</fill-color>\n"
" <frame-brightness>0</frame-brightness>\n"
" <fill-brightness>0</fill-brightness>\n"
" <dither-pattern>I9</dither-pattern>\n"
" <valid>true</valid>\n"
" <visible>true</visible>\n"
" <transparent>false</transparent>\n"
" <width/>\n"
" <marked>false</marked>\n"
" <animation>0</animation>\n"
" <name/>\n"
" <source>1/0@1</source>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#123456</frame-color>\n"
" <fill-color>#654321</fill-color>\n"
" <frame-brightness>0</frame-brightness>\n"
" <fill-brightness>0</fill-brightness>\n"
" <dither-pattern>I5</dither-pattern>\n"
" <valid>true</valid>\n"
" <visible>false</visible>\n"
" <transparent>false</transparent>\n"
" <width/>\n"
" <marked>false</marked>\n"
" <animation>0</animation>\n"
" <name/>\n"
" <source>L02 2/0@1 (r90 *1 0,0)</source>\n"
" </properties>\n"
" <name/>\n"
"</layer-properties>\n"
);
lay::LayerPropertiesList ref;
ref.load (s);
EXPECT_EQ (compare_real (ref, list), true);
}
TEST (21)
{
lay::LayerPropertiesList list;
db::Manager mgr;
lay::LayoutView view (&mgr, lay::Application::instance ()->is_editable (), lay::MainWindow::instance ());
list.attach_view (&view, 0);
int cv1 = view.create_layout ("", true, false);
db::Layout &ly1 = view.cellview (cv1)->layout ();
ly1.insert_layer (db::LayerProperties (2, 0, "L02"));
list.push_back (lay::LayerPropertiesNode ());
list.back ().set_source ("1/0@1");
list.push_back (lay::LayerPropertiesNode ());
list.back ().set_source ("*/*@* (r90)");
list.back ().set_frame_color (0x123456);
list.back ().set_fill_color (0x654321);
list.back ().set_visible (false);
std::map<int, int> cvmap;
cvmap.insert (std::make_pair (cv1, cv1));
list.expand (cvmap, false);
tl::OutputStringStream os;
tl::OutputStream oss (os);
list.save (oss);
tl::XMLStringSource s (
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<layer-properties>\n"
" <properties>\n"
" <frame-color>#ff80a8</frame-color>\n"
" <fill-color>#ff80a8</fill-color>\n"
" <frame-brightness>0</frame-brightness>\n"
" <fill-brightness>0</fill-brightness>\n"
" <dither-pattern>I9</dither-pattern>\n"
" <valid>true</valid>\n"
" <visible>true</visible>\n"
" <transparent>false</transparent>\n"
" <width/>\n"
" <marked>false</marked>\n"
" <animation>0</animation>\n"
" <name/>\n"
" <source>1/0@1</source>\n"
" </properties>\n"
" <properties>\n"
" <frame-color>#123456</frame-color>\n"
" <fill-color>#654321</fill-color>\n"
" <frame-brightness>0</frame-brightness>\n"
" <fill-brightness>0</fill-brightness>\n"
" <dither-pattern>I5</dither-pattern>\n"
" <valid>true</valid>\n"
" <visible>false</visible>\n"
" <transparent>false</transparent>\n"
" <width/>\n"
" <marked>false</marked>\n"
" <animation>0</animation>\n"
" <name/>\n"
" <source>L02 2/0@1 (r90 *1 0,0)</source>\n"
" </properties>\n"
" <name/>\n"
"</layer-properties>\n"
);
lay::LayerPropertiesList ref;
ref.load (s);
EXPECT_EQ (compare_real (ref, list), true);
}