63 wxFFile file( dxfPath, wxT(
"rb" ) );
66 wxFileOffset len = file.Length();
67 BOOST_REQUIRE_GT( len, 0 );
70 buffer.resize(
static_cast<size_t>( len ) );
71 BOOST_REQUIRE_EQUAL( file.Read( buffer.data(), len ),
static_cast<size_t>( len ) );
74 buffer.erase( std::remove( buffer.begin(), buffer.end(),
'\r' ), buffer.end() );
78 BOOST_CHECK_MESSAGE( buffer.find(
"$ACADVER\n 1\nAC1018\n" ) != std::string::npos,
79 "Expected $ACADVER = AC1018 in DXF header" );
80 BOOST_CHECK_MESSAGE( buffer.find(
"$HANDSEED\n" ) != std::string::npos,
81 "Expected $HANDSEED in DXF header" );
84 BOOST_CHECK_MESSAGE( buffer.find(
"TABLE\n 2\nAPPID\n" ) != std::string::npos,
85 "Expected APPID table in TABLES section" );
86 BOOST_CHECK_MESSAGE( buffer.find(
"APPID\n" ) != std::string::npos
87 && buffer.find(
"\n 2\nACAD\n" ) != std::string::npos,
88 "Expected ACAD entry in APPID table" );
91 BOOST_CHECK_MESSAGE( buffer.find(
"TABLE\n 2\nBLOCK_RECORD\n" ) != std::string::npos,
92 "Expected BLOCK_RECORD table" );
93 BOOST_CHECK_MESSAGE( buffer.find(
"*Model_Space" ) != std::string::npos,
94 "Expected *Model_Space layout block" );
95 BOOST_CHECK_MESSAGE( buffer.find(
"SECTION\n 2\nBLOCKS\n" ) != std::string::npos,
96 "Expected BLOCKS section" );
100 BOOST_CHECK_MESSAGE( buffer.find(
"0\nLINE\n" ) != std::string::npos,
101 "Expected LINE entity in output" );
102 BOOST_CHECK_MESSAGE( buffer.find(
"100\nAcDbEntity\n" ) != std::string::npos,
103 "Expected AcDbEntity subclass marker on entities" );
104 BOOST_CHECK_MESSAGE( buffer.find(
"100\nAcDbLine\n" ) != std::string::npos,
105 "Expected AcDbLine subclass marker on LINE entity" );
106 BOOST_CHECK_MESSAGE( buffer.find(
"100\nAcDbCircle\n" ) != std::string::npos,
107 "Expected AcDbCircle subclass marker on CIRCLE entity" );
110 BOOST_CHECK_MESSAGE( buffer.find(
" 49\n1.25\n 74\n0\n" ) != std::string::npos,
111 "Expected 74 group code following 49 in DASHDOT pattern" );
115 BOOST_CHECK_MESSAGE( buffer.find(
"\n*Paper_Space0\n" ) != std::string::npos,
116 "Expected *Paper_Space0 layout (spec mandates three empty blocks)" );
117 BOOST_CHECK_MESSAGE( buffer.find(
"100\nAcDbBlockTableRecord\n 2\n*Paper_Space0\n340\n" )
118 != std::string::npos,
119 "Expected 340 LAYOUT pointer in *Paper_Space0 BLOCK_RECORD" );
123 BOOST_CHECK_MESSAGE( buffer.find(
"SECTION\n 2\nOBJECTS\n" ) != std::string::npos,
124 "Expected OBJECTS section" );
125 BOOST_CHECK_MESSAGE( buffer.find(
"ACAD_LAYOUT\n350\n" ) != std::string::npos,
126 "Expected ACAD_LAYOUT entry in root dictionary" );
127 BOOST_CHECK_MESSAGE( buffer.find(
"ACAD_GROUP\n350\n" ) != std::string::npos,
128 "Expected ACAD_GROUP entry in root dictionary" );
129 BOOST_CHECK_MESSAGE( buffer.find(
"0\nLAYOUT\n" ) != std::string::npos,
130 "Expected LAYOUT objects in OBJECTS section" );
131 BOOST_CHECK_MESSAGE( buffer.find(
"100\nAcDbLayout\n 1\nModel\n" ) != std::string::npos,
132 "Expected Model layout object" );
133 BOOST_CHECK_MESSAGE( buffer.find(
"100\nAcDbLayout\n 1\nLayout1\n" ) != std::string::npos,
134 "Expected Layout1 (Paper_Space) layout object" );
135 BOOST_CHECK_MESSAGE( buffer.find(
"100\nAcDbLayout\n 1\nLayout2\n" ) != std::string::npos,
136 "Expected Layout2 (Paper_Space0) layout object" );
140 BOOST_CHECK_MESSAGE( buffer.find(
"ACAD_PLOTSTYLENAME\n350\n" ) != std::string::npos,
141 "Expected ACAD_PLOTSTYLENAME entry in root dictionary" );
142 BOOST_CHECK_MESSAGE( buffer.find(
"ACDBDICTIONARYWDFLT\n" ) != std::string::npos,
143 "Expected ACDBDICTIONARYWDFLT for ACAD_PLOTSTYLENAME" );
144 BOOST_CHECK_MESSAGE( buffer.find(
"ACDBPLACEHOLDER\n" ) != std::string::npos,
145 "Expected ACDBPLACEHOLDER (the 'Normal' plot style)" );
146 BOOST_CHECK_MESSAGE( buffer.find(
" 6\nCONTINUOUS\n390\n" ) != std::string::npos,
147 "Expected 390 plot-style handle on every LAYER record" );
151 BOOST_CHECK_MESSAGE( buffer.find(
"TABLE\n 2\nVPORT\n" ) != std::string::npos,
152 "Expected VPORT table" );
153 BOOST_CHECK_MESSAGE( buffer.find(
"TABLE\n 2\nVIEW\n" ) != std::string::npos,
154 "Expected VIEW table" );
155 BOOST_CHECK_MESSAGE( buffer.find(
"TABLE\n 2\nUCS\n" ) != std::string::npos,
156 "Expected UCS table" );
157 BOOST_CHECK_MESSAGE( buffer.find(
"TABLE\n 2\nDIMSTYLE\n" ) != std::string::npos,
158 "Expected DIMSTYLE table" );
159 BOOST_CHECK_MESSAGE( buffer.find(
" 0\nDIMSTYLE\n105\n" ) != std::string::npos,
160 "Expected DIMSTYLE record handle on group code 105 (not 5)" );
161 BOOST_CHECK_MESSAGE( buffer.find(
"AcDbDimStyleTableRecord\n 2\nStandard\n" )
162 != std::string::npos,
163 "Expected Standard DIMSTYLE entry" );
166 BOOST_CHECK_MESSAGE( buffer.find(
"AcDbLayerTableRecord\n 2\n0\n" ) != std::string::npos,
167 "Expected default layer \"0\" entry in LAYER table" );
170 BOOST_CHECK_MESSAGE( buffer.find(
"AcDbLinetypeTableRecord\n 2\nByBlock\n" )
171 != std::string::npos,
172 "Expected ByBlock linetype entry" );
173 BOOST_CHECK_MESSAGE( buffer.find(
"AcDbLinetypeTableRecord\n 2\nByLayer\n" )
174 != std::string::npos,
175 "Expected ByLayer linetype entry" );
179 BOOST_CHECK_MESSAGE( buffer.find(
"AcDbPlotSettings\n 1\n\n 2\nnone_device\n" )
180 != std::string::npos,
181 "Expected group 2 (none_device) in AcDbPlotSettings" );
184 BOOST_CHECK_MESSAGE( buffer.find(
"AcDbLayout\n 1\nModel\n" ) != std::string::npos,
185 "Expected Model layout (precondition for the next check)" );
186 BOOST_CHECK_MESSAGE( buffer.find(
" 70\n1024\n" ) != std::string::npos,
187 "Expected ModelType (1024) flag on the Model layout" );