Quellcode durchsuchen

BUG: "*.jpg" is a valid nameFilter

it just doesn't have a type like "Image (*.jpg)" but it's valid
Julien Finet vor 14 Jahren
Ursprung
Commit
8967960c8f

+ 2 - 0
Libs/Core/Testing/Cpp/CMakeLists.txt

@@ -24,6 +24,7 @@ CREATE_TEST_SOURCELIST(Tests ${KIT}CppTests.cpp
   ctkCommandLineParserTest1.cpp
   ctkModelTesterTest1.cpp
   ctkUtilsTest1.cpp
+  ctkUtilsTest2.cpp
   ctkDependencyGraphTest1.cpp
   ctkDependencyGraphTest2.cpp
   ctkPimplTest1.cpp
@@ -85,6 +86,7 @@ SIMPLE_TEST( ctkModelTesterTest1 )
 SIMPLE_TEST( ctkPimplTest1 )
 SIMPLE_TEST( ctkSingletonTest1 )
 SIMPLE_TEST( ctkUtilsTest1 )
+SIMPLE_TEST( ctkUtilsTest2 )
 SIMPLE_TEST( ctkWorkflowTest1 )
 SIMPLE_TEST( ctkWorkflowTest2 )
 SIMPLE_TEST( ctkWorkflowTest3 )

+ 111 - 0
Libs/Core/Testing/Cpp/ctkUtilsTest2.cpp

@@ -0,0 +1,111 @@
+/*=========================================================================
+
+  Library:   CTK
+
+  Copyright (c) Kitware Inc.
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.commontk.org/LICENSE
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+=========================================================================*/
+
+// Qt includes
+#include <QDebug>
+#include <QStringList>
+
+// CTK includes
+#include "ctkUtils.h"
+
+// STD includes
+#include <stdlib.h>
+#include <iostream>
+#include <string>
+#include <vector>
+
+//-----------------------------------------------------------------------------
+int ctkUtilsTest2(int argc, char * argv [] )
+{
+  Q_UNUSED(argc);
+  Q_UNUSED(argv);
+  QString invalidNameFilter("Type {*.jpg} ");
+  QString invalidNameFilter2("Type (*.jpg))");
+  QString invalidNameFilter3("Type ()");
+  QString simpleNameFilter("*.jpg");
+  QString standardNameFilter("Images (*.jpg *.png)");
+  QStringList standardNameFilterExtensions;
+  standardNameFilterExtensions << "*.jpg" << "*.png";
+  QString simpleStandardNameFilter("Text (*.txt)");
+  QStringList simpleStandardNameFilterExtensions("*.txt");
+  QStringList standardNameFilters;
+  standardNameFilters << standardNameFilter << simpleStandardNameFilter;
+  QStringList standardNameFiltersExtensions;
+  standardNameFiltersExtensions << "*.jpg" << "*.png" << "*.txt";
+  
+  if (ctk::nameFilterToExtensions(invalidNameFilter).count())
+    {
+    qWarning() << "ctk::nameFilterToExtensions() failed: input "
+               << invalidNameFilter << "output:"
+               << ctk::nameFilterToExtensions(invalidNameFilter);
+    return EXIT_FAILURE;
+    }
+
+  if (ctk::nameFilterToExtensions(invalidNameFilter2).count())
+    {
+    qWarning() << "ctk::nameFilterToExtensions() failed: input "
+               << invalidNameFilter2 << "output:"
+               << ctk::nameFilterToExtensions(invalidNameFilter2);
+    return EXIT_FAILURE;
+    }
+
+  if (ctk::nameFilterToExtensions(invalidNameFilter3).count())
+    {
+    qWarning() << "ctk::nameFilterToExtensions() failed: input "
+               << invalidNameFilter3 << "output:"
+               << ctk::nameFilterToExtensions(invalidNameFilter3);
+    return EXIT_FAILURE;
+    }
+
+  if (ctk::nameFilterToExtensions(simpleNameFilter) != QStringList(simpleNameFilter))
+    {
+    qWarning() << "ctk::nameFilterToExtensions() failed: input "
+               << simpleNameFilter << "output:"
+               << ctk::nameFilterToExtensions(simpleNameFilter);
+    return EXIT_FAILURE;
+    }
+
+  if (ctk::nameFilterToExtensions(standardNameFilter) != standardNameFilterExtensions)
+    {
+    qWarning() << "ctk::nameFilterToExtensions() failed: input "
+               << standardNameFilter << "output:"
+               << ctk::nameFilterToExtensions(standardNameFilter);
+    return EXIT_FAILURE;
+    }
+
+  if (ctk::nameFilterToExtensions(simpleStandardNameFilter) != simpleStandardNameFilterExtensions)
+    {
+    qWarning() << "ctk::nameFilterToExtensions() failed: input "
+               << simpleStandardNameFilter << "output:"
+               << ctk::nameFilterToExtensions(simpleStandardNameFilter);
+    return EXIT_FAILURE;
+    }
+
+  if (ctk::nameFiltersToExtensions(standardNameFilters) != standardNameFiltersExtensions)
+    {
+    qWarning() << "ctk::nameFilterToExtensions() failed: input "
+               << standardNameFilters << "output:"
+               << ctk::nameFiltersToExtensions(standardNameFilters);
+    return EXIT_FAILURE;
+    }
+  //QString extensionToRegExp(const QString& extension);
+  //QRegExp nameFiltersToRegExp(const QStringList& nameFilters);
+  return EXIT_SUCCESS;
+}

+ 7 - 0
Libs/Core/ctkUtils.cpp

@@ -79,6 +79,8 @@ void ctk::stlVectorToQList(const std::vector<std::string>& vector,
 //-----------------------------------------------------------------------------
 const char *ctkNameFilterRegExp =
   "^(.*)\\(([a-zA-Z0-9_.*? +;#\\-\\[\\]@\\{\\}/!<>\\$%&=^~:\\|]*)\\)$";
+const char *ctkValidWildCard =
+  "^[\\w\\s\\.\\*\\_\\~\\$\\[\\]]+$";
 
 //-----------------------------------------------------------------------------
 QStringList ctk::nameFilterToExtensions(const QString& nameFilter)
@@ -87,6 +89,11 @@ QStringList ctk::nameFilterToExtensions(const QString& nameFilter)
   int i = regexp.indexIn(nameFilter);
   if (i < 0)
     {
+    QRegExp isWildCard(QString::fromLatin1(ctkValidWildCard));
+    if (isWildCard.indexIn(nameFilter) >= 0)
+      {
+      return QStringList(nameFilter);
+      }
     return QStringList();
     }
   QString f = regexp.cap(2);

+ 2 - 0
Libs/Core/ctkUtils.h

@@ -46,6 +46,8 @@ void CTK_CORE_EXPORT stlVectorToQList(const std::vector<std::string>& vector, QS
 ///
 /// Convert a nameFilter to a list of file extensions:
 /// "Images (*.png *.jpg *.tiff)" -> "*.png", "*.jpg", "*.tiff"
+/// Note: the nameFilter can be a simple wildcard "*.jpg" in that case, it
+/// will simply return it.
 /// \sa nameFiltersToExtensions
 QStringList CTK_CORE_EXPORT nameFilterToExtensions(const QString& nameFilter);