summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/geometryloaders/default/objgeometryloader.cpp4
-rw-r--r--tests/auto/render/geometryloaders/cube2.obj26
-rw-r--r--tests/auto/render/geometryloaders/geometryloaders.qrc1
-rw-r--r--tests/auto/render/geometryloaders/tst_geometryloaders.cpp10
4 files changed, 40 insertions, 1 deletions
diff --git a/src/plugins/geometryloaders/default/objgeometryloader.cpp b/src/plugins/geometryloaders/default/objgeometryloader.cpp
index 7184e2f69..6ebe91a09 100644
--- a/src/plugins/geometryloaders/default/objgeometryloader.cpp
+++ b/src/plugins/geometryloaders/default/objgeometryloader.cpp
@@ -102,6 +102,10 @@ bool ObjGeometryLoader::doLoad(QIODevice *ioDev, const QString &subMesh)
if (lineSize > 0 && line[0] != '#') {
if (line[lineSize - 1] == '\n')
--lineSize; // chop newline
+ if (line[lineSize - 1] == '\r')
+ --lineSize; // chop newline also for CRLF format
+ while (line[lineSize - 1] == ' ' || line[lineSize - 1] == '\t')
+ --lineSize; // chop trailing spaces
const ByteArraySplitter tokens(line, line + lineSize, ' ', QString::SkipEmptyParts);
diff --git a/tests/auto/render/geometryloaders/cube2.obj b/tests/auto/render/geometryloaders/cube2.obj
new file mode 100644
index 000000000..8ea0caf87
--- /dev/null
+++ b/tests/auto/render/geometryloaders/cube2.obj
@@ -0,0 +1,26 @@
+# Blender v2.77 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib cube.mtl
+o Cube
+v 1.000000 -1.000000 -1.000000
+v 1.000000 -1.000000 1.000000
+v -1.000000 -1.000000 1.000000
+v -1.000000 -1.000000 -1.000000
+v 1.000000 1.000000 -0.999999
+v 0.999999 1.000000 1.000001
+v -1.000000 1.000000 1.000000
+v -1.000000 1.000000 -1.000000
+vn 0.0000 -1.0000 0.0000
+vn 0.0000 1.0000 0.0000
+vn 1.0000 0.0000 0.0000
+vn -0.0000 -0.0000 1.0000
+vn -1.0000 -0.0000 -0.0000
+vn 0.0000 0.0000 -1.0000
+usemtl Material
+s off
+f 1//1 2//1 3//1 4//1
+f 5//2 8//2 7//2 6//2
+f 1//3 5//3 6//3 2//3
+f 2//4 6//4 7//4 3//4
+f 3//5 7//5 8//5 4//5
+f 5//6 1//6 4//6 8//6
diff --git a/tests/auto/render/geometryloaders/geometryloaders.qrc b/tests/auto/render/geometryloaders/geometryloaders.qrc
index 730a0c452..8f98f5a14 100644
--- a/tests/auto/render/geometryloaders/geometryloaders.qrc
+++ b/tests/auto/render/geometryloaders/geometryloaders.qrc
@@ -1,6 +1,7 @@
<RCC>
<qresource prefix="/">
<file>cube.obj</file>
+ <file>cube2.obj</file>
<file>cube.ply</file>
<file>cube.stl</file>
<file>cube.gltf</file>
diff --git a/tests/auto/render/geometryloaders/tst_geometryloaders.cpp b/tests/auto/render/geometryloaders/tst_geometryloaders.cpp
index 7b9f09d23..07545403d 100644
--- a/tests/auto/render/geometryloaders/tst_geometryloaders.cpp
+++ b/tests/auto/render/geometryloaders/tst_geometryloaders.cpp
@@ -60,6 +60,7 @@ class tst_geometryloaders : public QObject
Q_OBJECT
private Q_SLOTS:
+ void testOBJLoader_data();
void testOBJLoader();
void testPLYLoader();
void testSTLLoader();
@@ -69,6 +70,12 @@ private Q_SLOTS:
#endif
};
+void tst_geometryloaders::testOBJLoader_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::newRow("nominal case") << QStringLiteral(":/cube.obj");
+ QTest::newRow("trailing space + crlf") << QStringLiteral(":/cube2.obj");
+}
void tst_geometryloaders::testOBJLoader()
{
QScopedPointer<QGeometryLoaderInterface> loader;
@@ -77,7 +84,8 @@ void tst_geometryloaders::testOBJLoader()
if (!loader)
return;
- QFile file(QStringLiteral(":/cube.obj"));
+ QFETCH(QString, fileName);
+ QFile file(fileName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qDebug("Could not open test file for reading");
return;