More basic bd tests (reader) and some bug fixes

This commit is contained in:
Matthias Koefferlein 2017-08-19 19:25:21 +02:00
parent a9b64d1e57
commit c7edc9e7a0
4 changed files with 101 additions and 7 deletions

View File

@ -79,11 +79,11 @@ GenericReaderOptions::add_options (tl::CommandLineOptions &cmd)
std::string group ("[" + m_group_prefix + " options - GDS2 and OASIS specific]");
cmd << tl::arg (group +
"#!--" + m_long_prefix + "disable-texts", &m_common_reader_options.enable_text_objects, "Skips text objects",
"#!--" + m_long_prefix + "no-texts", &m_common_reader_options.enable_text_objects, "Skips text objects",
"With this option set, text objects won't be read."
)
<< tl::arg (group +
"#!--" + m_long_prefix + "disable-properties", &m_common_reader_options.enable_properties, "Skips properties",
"#!--" + m_long_prefix + "no-properties", &m_common_reader_options.enable_properties, "Skips properties",
"With this option set, properties won't be read."
)
;
@ -174,7 +174,7 @@ GenericReaderOptions::add_options (tl::CommandLineOptions &cmd)
"#--" + m_long_prefix + "dxf-polyline-mode=mode", &m_dxf_reader_options.polyline_mode, "Specifies how POLYLINE records are handled",
"This value specifies how POLYLINE records are handled:\n"
"\n"
"* 0: automatic mode\n"
"* 0: automatic mode (default)\n"
"* 1: keep lines\n"
"* 2: create polygons from closed POLYLINE/LWPOLYLINE with width == 0\n"
"* 3: merge all lines (width width 0)\n"

View File

@ -202,3 +202,91 @@ TEST(2)
EXPECT_EQ (cells2string (layout, cells), "TOP,B,C,D");
}
// Testing reader options
TEST(10)
{
bd::GenericReaderOptions opt;
tl::CommandLineOptions cmd;
opt.add_options (cmd);
char *argv[] = { "x",
// CIF and DXF
"-id=0.125",
// CIF
"-iw=1",
// DXF
"-iu=2.5",
"--dxf-circle-accuracy=0.5",
"--dxf-circle-points=1000",
"--dxf-keep-other-cells",
"--dxf-polyline-mode=3",
"--dxf-render-texts-as-polygons",
"--dxf-text-scaling=75",
// GDS2 and OASIS
"--no-properties",
"--no-texts",
// GDS2
"-ib=3",
"--no-big-records",
"--no-multi-xy-records",
// General
"-im=1/0 3,4/0-255 A:17/0",
"-is",
// OASIS
"--expect-strict-mode=1"
};
cmd.parse (sizeof (argv) / sizeof (argv[0]), argv);
db::LoadLayoutOptions stream_opt;
EXPECT_EQ (tl::to_string (stream_opt.get_options<db::CIFReaderOptions> ().dbu), "0.001");
EXPECT_EQ (stream_opt.get_options<db::CIFReaderOptions> ().wire_mode, (unsigned int) 0);
EXPECT_EQ (stream_opt.get_options<db::CIFReaderOptions> ().layer_map.to_string (), "layer_map()");
EXPECT_EQ (stream_opt.get_options<db::CIFReaderOptions> ().create_other_layers, true);
EXPECT_EQ (tl::to_string (stream_opt.get_options<db::DXFReaderOptions> ().dbu), "0.001");
EXPECT_EQ (stream_opt.get_options<db::DXFReaderOptions> ().layer_map.to_string (), "layer_map()");
EXPECT_EQ (stream_opt.get_options<db::DXFReaderOptions> ().create_other_layers, true);
EXPECT_EQ (stream_opt.get_options<db::DXFReaderOptions> ().unit, 1.0);
EXPECT_EQ (tl::to_string (stream_opt.get_options<db::DXFReaderOptions> ().circle_accuracy), "0");
EXPECT_EQ (stream_opt.get_options<db::DXFReaderOptions> ().circle_points, 100);
EXPECT_EQ (stream_opt.get_options<db::DXFReaderOptions> ().keep_other_cells, false);
EXPECT_EQ (stream_opt.get_options<db::DXFReaderOptions> ().polyline_mode, 0);
EXPECT_EQ (stream_opt.get_options<db::DXFReaderOptions> ().render_texts_as_polygons, false);
EXPECT_EQ (stream_opt.get_options<db::DXFReaderOptions> ().text_scaling, 100);
EXPECT_EQ (stream_opt.get_options<db::CommonReaderOptions> ().layer_map.to_string (), "layer_map()");
EXPECT_EQ (stream_opt.get_options<db::CommonReaderOptions> ().create_other_layers, true);
EXPECT_EQ (stream_opt.get_options<db::CommonReaderOptions> ().enable_properties, true);
EXPECT_EQ (stream_opt.get_options<db::CommonReaderOptions> ().enable_text_objects, true);
EXPECT_EQ (stream_opt.get_options<db::GDS2ReaderOptions> ().box_mode, (unsigned int) 1);
EXPECT_EQ (stream_opt.get_options<db::GDS2ReaderOptions> ().allow_big_records, true);
EXPECT_EQ (stream_opt.get_options<db::GDS2ReaderOptions> ().allow_multi_xy_records, true);
EXPECT_EQ (stream_opt.get_options<db::OASISReaderOptions> ().expect_strict_mode, -1);
opt.configure (stream_opt);
EXPECT_EQ (tl::to_string (stream_opt.get_options<db::CIFReaderOptions> ().dbu), "0.125");
EXPECT_EQ (stream_opt.get_options<db::CIFReaderOptions> ().wire_mode, (unsigned int) 1);
EXPECT_EQ (stream_opt.get_options<db::CIFReaderOptions> ().layer_map.to_string (), "layer_map('1/0';'3-4/0-255';'A : 17/0')");
EXPECT_EQ (stream_opt.get_options<db::CIFReaderOptions> ().create_other_layers, false);
EXPECT_EQ (tl::to_string (stream_opt.get_options<db::DXFReaderOptions> ().dbu), "0.125");
EXPECT_EQ (stream_opt.get_options<db::DXFReaderOptions> ().layer_map.to_string (), "layer_map('1/0';'3-4/0-255';'A : 17/0')");
EXPECT_EQ (stream_opt.get_options<db::DXFReaderOptions> ().create_other_layers, false);
EXPECT_EQ (stream_opt.get_options<db::DXFReaderOptions> ().unit, 2.5);
EXPECT_EQ (tl::to_string (stream_opt.get_options<db::DXFReaderOptions> ().circle_accuracy), "0.5");
EXPECT_EQ (stream_opt.get_options<db::DXFReaderOptions> ().circle_points, 1000);
EXPECT_EQ (stream_opt.get_options<db::DXFReaderOptions> ().keep_other_cells, true);
EXPECT_EQ (stream_opt.get_options<db::DXFReaderOptions> ().polyline_mode, 3);
EXPECT_EQ (stream_opt.get_options<db::DXFReaderOptions> ().render_texts_as_polygons, true);
EXPECT_EQ (stream_opt.get_options<db::DXFReaderOptions> ().text_scaling, 75);
EXPECT_EQ (stream_opt.get_options<db::CommonReaderOptions> ().layer_map.to_string (), "layer_map('1/0';'3-4/0-255';'A : 17/0')");
EXPECT_EQ (stream_opt.get_options<db::CommonReaderOptions> ().create_other_layers, false);
EXPECT_EQ (stream_opt.get_options<db::CommonReaderOptions> ().enable_properties, false);
EXPECT_EQ (stream_opt.get_options<db::CommonReaderOptions> ().enable_text_objects, false);
EXPECT_EQ (stream_opt.get_options<db::GDS2ReaderOptions> ().box_mode, (unsigned int) 3);
EXPECT_EQ (stream_opt.get_options<db::GDS2ReaderOptions> ().allow_big_records, false);
EXPECT_EQ (stream_opt.get_options<db::GDS2ReaderOptions> ().allow_multi_xy_records, false);
EXPECT_EQ (stream_opt.get_options<db::OASISReaderOptions> ().expect_strict_mode, 1);
}

View File

@ -89,7 +89,7 @@ public:
template <class T>
void set_options (const T &options)
{
m_options.insert (std::make_pair (options.format_name (), options.clone ()));
set_options (options.clone ());
}
/**
@ -104,7 +104,13 @@ public:
template <class T>
void set_options (T *options)
{
m_options.insert (std::make_pair (options->format_name (), options));
std::map<std::string, FormatSpecificReaderOptions *>::iterator o = m_options.find (options->format_name ());
if (o != m_options.end ()) {
delete o->second;
o->second = options;
} else {
m_options.insert (std::make_pair (options->format_name (), options));
}
}
/**

View File

@ -592,10 +592,10 @@ CommandLineOptions::parse (int argc, char *argv[])
} else {
msg += "at argument #" + tl::to_string (i);
}
if (! arg->is_option ()) {
if (arg->is_option ()) {
msg += " (option " + arg->option_desc () + ")";
}
msg += ":";
msg += ": ";
msg += ex.msg ();
throw tl::Exception (msg);