Files
wxWidgets/tests/filesys/filesystest.cpp
Vadim Zeitlin a973d02c9f Get rid of CppUnit cruft in wxFileSystem test case
Use CATCH macros directly and define separate test cases instead of
using a useless FileSystemTestCase class.

Also add INFO() macros to provide information about the context in case
of test failure.

No real changes.
2020-05-01 15:06:05 +02:00

180 lines
6.8 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// Name: tests/filesys/filesys.cpp
// Purpose: wxFileSystem unit test
// Author: Vaclav Slavik
// Created: 2004-03-28
// Copyright: (c) 2004 Vaclav Slavik
///////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#include "testprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif // WX_PRECOMP
#include "wx/filesys.h"
#if wxUSE_FILESYSTEM
// ----------------------------------------------------------------------------
// helpers
// ----------------------------------------------------------------------------
// a hack to let us use wxFileSystemHandler's protected methods:
class UrlTester : public wxFileSystemHandler
{
public:
UrlTester() : wxFileSystemHandler() {}
wxString Protocol(const wxString& p) { return GetProtocol(p); }
wxString LeftLocation(const wxString& p) { return GetLeftLocation(p); }
wxString RightLocation(const wxString& p) { return GetRightLocation(p); }
wxString Anchor(const wxString& p) { return GetAnchor(p); }
bool CanOpen(const wxString& WXUNUSED(url)) wxOVERRIDE { return false; }
wxFSFile *OpenFile(wxFileSystem& WXUNUSED(fs),
const wxString& WXUNUSED(url)) wxOVERRIDE { return NULL; }
};
// ----------------------------------------------------------------------------
// tests themselves
// ----------------------------------------------------------------------------
TEST_CASE("wxFileSystem::URLParsing", "[filesys][url][parse]")
{
static const struct Data
{
const wxChar *url;
const wxChar *protocol, *left, *right, *anchor;
} data[] =
{
// simple case:
{ wxT("http://www.root.cz/index.html"),
wxT("http"), wxT(""), wxT("//www.root.cz/index.html"), wxT("")},
// anchors:
{ wxT("http://www.root.cz/index.html#lbl"),
wxT("http"), wxT(""), wxT("//www.root.cz/index.html"), wxT("lbl")},
// file is default protocol:
{ wxT("testfile.html"),
wxT("file"), wxT(""), wxT("testfile.html"), wxT("")},
// stacked protocols:
{ wxT("file:myzipfile.zip#zip:index.htm"),
wxT("zip"), wxT("file:myzipfile.zip"), wxT("index.htm"), wxT("")},
// changes to ':' parsing often break things:
{ wxT("file:a#b:foo"),
wxT("b"), wxT("file:a"), wxT("foo"), wxT("")},
{ wxT("\\\\host\\C$\\path to\\foo.txt"),
wxT("file"), wxT(""), wxT("\\\\host\\C$\\path to\\foo.txt"), wxT("")},
{ wxT("C:\\path to\\foo.txt"),
wxT("file"), wxT(""), wxT("C:\\path to\\foo.txt"), wxT("")},
{ wxT("file:///etc/fsconf"),
wxT("file"), wxT(""), wxT("/etc/fsconf"), wxT("")},
{ wxT("file://etc/fsconf"),
wxT("file"), wxT(""), wxT("//etc/fsconf"), wxT("")},
{ wxT("file:/etc/fsconf"),
wxT("file"), wxT(""), wxT("/etc/fsconf"), wxT("")},
{ wxT("file:///dir/archive.tar.gz#tar:/foo.txt#anchor"),
wxT("tar"), wxT("file:///dir/archive.tar.gz"),
wxT("/foo.txt"), wxT("anchor")},
{ wxT("file://dir/archive.tar.gz#tar:/foo.txt#anchor"),
wxT("tar"), wxT("file://dir/archive.tar.gz"),
wxT("/foo.txt"), wxT("anchor")},
{ wxT("file:/dir/archive.tar.gz#tar:/foo.txt#anchor"),
wxT("tar"), wxT("file:/dir/archive.tar.gz"),
wxT("/foo.txt"), wxT("anchor")},
{ wxT("file:dir/archive.tar.gz#tar:/foo.txt#anchor"),
wxT("tar"), wxT("file:dir/archive.tar.gz"),
wxT("/foo.txt"), wxT("anchor")},
{ wxT("file:///dir/archive.tar.gz#tar:/foo.txt"),
wxT("tar"), wxT("file:///dir/archive.tar.gz"),
wxT("/foo.txt"), wxT("")},
{ wxT("file://dir/archive.tar.gz#tar:/foo.txt"),
wxT("tar"), wxT("file://dir/archive.tar.gz"),
wxT("/foo.txt"), wxT("")},
{ wxT("file:/dir/archive.tar.gz#tar:/foo.txt"),
wxT("tar"), wxT("file:/dir/archive.tar.gz"),
wxT("/foo.txt"), wxT("")},
{ wxT("file:dir/archive.tar.gz#tar:/foo.txt"),
wxT("tar"), wxT("file:dir/archive.tar.gz"),
wxT("/foo.txt"), wxT("")},
{ wxT("file://host/C:/path%20to/file.txt"),
wxT("file"), wxT(""), wxT("//host/C:/path%20to/file.txt"), wxT("")},
{ wxT("file:///C:/path%20to/file.txt"),
wxT("file"), wxT(""), wxT("C:/path%20to/file.txt"), wxT("")},
{ wxT("file:///C"),
wxT("file"), wxT(""), wxT("/C"), wxT("")},
{ wxT("file://C"),
wxT("file"), wxT(""), wxT("//C"), wxT("")},
{ wxT("file:/C"),
wxT("file"), wxT(""), wxT("/C"), wxT("")},
{ wxT("file:C"),
wxT("file"), wxT(""), wxT("C"), wxT("")}
};
UrlTester tst;
for ( size_t n = 0; n < WXSIZEOF(data); n++ )
{
const Data& d = data[n];
INFO( "Testing URL " << wxString(d.url) );
CHECK( tst.Protocol(d.url) == d.protocol );
CHECK( tst.LeftLocation(d.url) == d.left );
CHECK( tst.RightLocation(d.url) == d.right );
CHECK( tst.Anchor(d.url) == d.anchor );
}
}
TEST_CASE("wxFileSystem::FileNameToUrlConversion", "[filesys][url][filename]")
{
const static struct Data {
const wxChar *input, *expected;
} data[] =
{
#ifdef __WINDOWS__
{ wxT("\\\\host\\C$\\path to\\file.txt"),
wxT("file://host/C$/path%20to/file.txt")},
{ wxT("C:\\path to\\file.txt"), wxT("file:///C:/path%20to/file.txt")}
#else
{ wxT("/path to/file.txt"), wxT("file:///path%20to/file.txt")}
#endif
};
for ( size_t n = 0; n < WXSIZEOF(data); n++ )
{
const Data& d = data[n];
wxFileName fn1(d.input);
wxString url1 = wxFileSystem::FileNameToURL(fn1);
INFO( "Testing URL " << wxString(d.input) );
CHECK( url1 == d.expected );
CHECK( fn1.SameAs(wxFileName::URLToFileName(url1)) );
}
}
TEST_CASE("wxFileSystem::UnicodeFileNameToUrlConversion", "[filesys][url][filename][unicode]")
{
const unsigned char filename_utf8[] = {
0x4b, 0x72, 0xc3, 0xa1, 0x73, 0x79, 0x50, 0xc5,
0x99, 0xc3, 0xad, 0x72, 0x6f, 0x64, 0x79, 0x2e,
0x6a, 0x70, 0x67, 0x00
// KrásyPřírody.jpg
};
wxFileName filename(wxString::FromUTF8((const char*)filename_utf8));
wxString url = wxFileSystem::FileNameToURL(filename);
CHECK( filename.SameAs(wxFileName::URLToFileName(url)) );
}
#endif // wxUSE_FILESYSTEM