+///////////////////////////////////////////////////////////////////////////////
+// Name: tests/filesys/filesys.cpp
+// Purpose: wxFileSystem unit test
+// Author: Vaclav Slavik
+// Created: 2004-03-28
+// RCS-ID: $Id$
+// Copyright: (c) 2004 Vaclav Slavik
+///////////////////////////////////////////////////////////////////////////////
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+#include "wx/wx.h"
+#include "wx/filesys.h"
+
+#include "wx/cppunit.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)) { return false; }
+ wxFSFile *OpenFile(wxFileSystem& WXUNUSED(fs),
+ const wxString& WXUNUSED(url)) { return NULL; }
+
+
+};
+
+
+// ----------------------------------------------------------------------------
+// test class
+// ----------------------------------------------------------------------------
+
+class FileSystemTestCase : public CppUnit::TestCase
+{
+public:
+ FileSystemTestCase() { }
+
+private:
+ CPPUNIT_TEST_SUITE( FileSystemTestCase );
+ CPPUNIT_TEST( UrlParsing );
+ CPPUNIT_TEST_SUITE_END();
+
+ void UrlParsing();
+
+ DECLARE_NO_COPY_CLASS(FileSystemTestCase);
+};
+
+// register in the unnamed registry so that these tests are run by default
+CPPUNIT_TEST_SUITE_REGISTRATION( FileSystemTestCase );
+
+// also include in it's own registry so that these tests can be run alone
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( FileSystemTestCase, "FileSystemTestCase" );
+
+void FileSystemTestCase::UrlParsing()
+{
+ static const struct Data
+ {
+ const wchar_t *url;
+ const wchar_t *protocol, *left, *right, *anchor;
+ } data[] =
+ {
+ // simple case:
+ { _T("http://www.root.cz/index.html"),
+ _T("http"), _T(""), _T("//www.root.cz/index.html"), _T("")},
+ // anchors:
+ { _T("http://www.root.cz/index.html#lbl"),
+ _T("http"), _T(""), _T("//www.root.cz/index.html"), _T("lbl")},
+ // file is default protocol:
+ { _T("testfile.html"),
+ _T("file"), _T(""), _T("testfile.html"), _T("")},
+ // stacked protocols:
+ { _T("file:myzipfile.zip#zip:index.htm"),
+ _T("zip"), _T("file:myzipfile.zip"), _T("index.htm"), _T("")},
+ // changes to ':' parsing often break things:
+ { _T("file:a#b:foo"),
+ _T("b"), _T("file:a"), _T("foo"), _T("")}
+ };
+
+ UrlTester tst;
+ for ( size_t n = 0; n < WXSIZEOF(data); n++ )
+ {
+ const Data& d = data[n];
+ CPPUNIT_ASSERT( tst.Protocol(d.url) == d.protocol );
+ CPPUNIT_ASSERT( tst.LeftLocation(d.url) == d.left );
+ CPPUNIT_ASSERT( tst.RightLocation(d.url) == d.right );
+ CPPUNIT_ASSERT( tst.Anchor(d.url) == d.anchor );
+ }
+}
+
+#endif // wxUSE_FILESYSTEM