Коротко и красиво. Никаких других зависимостей, кроме , расширенного стандарта C lib.
strcasecmp(str1.c_str(), str2.c_str()) == 0
возвращает true , если str1
и str2
равны. strcasecmp
может не существовать, могут быть аналоги stricmp
, strcmpi
и т. Д.
Пример кода:
#include <iostream>
#include <string>
#include <string.h> //For strcasecmp(). Also could be found in <mem.h>
using namespace std;
/// Simple wrapper
inline bool str_ignoreCase_cmp(std::string const& s1, std::string const& s2) {
if(s1.length() != s2.length())
return false; // optimization since std::string holds length in variable.
return strcasecmp(s1.c_str(), s2.c_str()) == 0;
}
/// Function object - comparator
struct StringCaseInsensetiveCompare {
bool operator()(std::string const& s1, std::string const& s2) {
if(s1.length() != s2.length())
return false; // optimization since std::string holds length in variable.
return strcasecmp(s1.c_str(), s2.c_str()) == 0;
}
bool operator()(const char *s1, const char * s2){
return strcasecmp(s1,s2)==0;
}
};
/// Convert bool to string
inline char const* bool2str(bool b){ return b?"true":"false"; }
int main()
{
cout<< bool2str(strcasecmp("asd","AsD")==0) <<endl;
cout<< bool2str(strcasecmp(string{"aasd"}.c_str(),string{"AasD"}.c_str())==0) <<endl;
StringCaseInsensetiveCompare cmp;
cout<< bool2str(cmp("A","a")) <<endl;
cout<< bool2str(cmp(string{"Aaaa"},string{"aaaA"})) <<endl;
cout<< bool2str(str_ignoreCase_cmp(string{"Aaaa"},string{"aaaA"})) <<endl;
return 0;
}
Выход:
true
true
true
true
true
В Pydev есть некоторая интеграция с модульными тестами, но это только в качестве конфигурации запуска ... так что ...
Это не очень элегантный способ, но если вы:
Тогда, по крайней мере, вы получите что-то, что выводит результаты теста на консоль при сохранении ресурсов.
Я только что понял, что PyDev имеет довольно мощную поддержку скриптов. К сожалению, у меня нет времени сделать все это за вас (но если вы выполните это, опубликуйте его здесь :)
Если вы создадите файл с именем pyedit_nose.py
, который выглядит так в в противном случае пустая папка:
assert cmd is not None
assert editor is not None
if cmd == 'onSave':
from java.lang import Runtime
from java.io import BufferedReader
from java.io import InputStreamReader
from org.eclipse.core.resources import ResourcesPlugin
from org.eclipse.core.resources import IMarker
from org.eclipse.core.resources import IResource
proc = Runtime.getRuntime().exec('ls -al')
extra_message = BufferedReader(InputStreamReader(proc.inputStream)).readLine()
r = ResourcesPlugin.getWorkspace().getRoot()
for marker in r.findMarkers(IMarker.PROBLEM, False, IResource.DEPTH_INFINITE):
if marker.getAttribute(IMarker.MESSAGE).startsWith("Some test failed!"):
marker.delete()
for rr in r.getProjects():
marker = rr.createMarker(IMarker.PROBLEM)
marker.setAttribute(IMarker.MESSAGE, "Some test failed! " + extra_message)
marker.setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_HIGH)
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR)
и настройте Preferences-> PyDev-> Scripting Pydev так, чтобы указывать на этот каталог, вы будете получать все проекты в вашей рабочей области, отмеченные ошибкой каждый раз, когда файл сохраняется.
Выполняя скрипт который возвращает результаты теста в удобном для анализа формате, а не в ls
, и при синтаксическом анализе вывода вы сможете разместить маркеры в нужных местах.
См. некоторые отправные точки:
resource.createMarker (IMarker.PROBLEM)
создает маркер проблемы. IResource
, который представляет проект. Для получения содержимого используйте метод members ()
. Я использую Nosy (доступно на pypi):
Запускать инструмент обнаружения и выполнения теста носа всякий раз, когда изменяется исходный файл .