1/////////////////////////////////////////////////////////////////////////////// 2// Name: tests/filesys/filesys.cpp 3// Purpose: wxFileSystem unit test 4// Author: Vaclav Slavik 5// Created: 2004-03-28 6// RCS-ID: $Id: filesystest.cpp 30685 2004-11-22 05:00:19Z RN $ 7// Copyright: (c) 2004 Vaclav Slavik 8/////////////////////////////////////////////////////////////////////////////// 9 10// ---------------------------------------------------------------------------- 11// headers 12// ---------------------------------------------------------------------------- 13 14#include "testprec.h" 15 16#ifdef __BORLANDC__ 17 #pragma hdrstop 18#endif 19 20#ifndef WX_PRECOMP 21 #include "wx/wx.h" 22#endif // WX_PRECOMP 23 24#include "wx/filesys.h" 25 26#if wxUSE_FILESYSTEM 27 28// ---------------------------------------------------------------------------- 29// helpers 30// ---------------------------------------------------------------------------- 31 32// a hack to let us use wxFileSystemHandler's protected methods: 33class UrlTester : public wxFileSystemHandler 34{ 35public: 36 UrlTester() : wxFileSystemHandler() {} 37 38 wxString Protocol(const wxString& p) { return GetProtocol(p); } 39 wxString LeftLocation(const wxString& p) { return GetLeftLocation(p); } 40 wxString RightLocation(const wxString& p) { return GetRightLocation(p); } 41 wxString Anchor(const wxString& p) { return GetAnchor(p); } 42 43 bool CanOpen(const wxString& WXUNUSED(url)) { return false; } 44 wxFSFile *OpenFile(wxFileSystem& WXUNUSED(fs), 45 const wxString& WXUNUSED(url)) { return NULL; } 46 47 48}; 49 50 51// ---------------------------------------------------------------------------- 52// test class 53// ---------------------------------------------------------------------------- 54 55class FileSystemTestCase : public CppUnit::TestCase 56{ 57public: 58 FileSystemTestCase() { } 59 60private: 61 CPPUNIT_TEST_SUITE( FileSystemTestCase ); 62 CPPUNIT_TEST( UrlParsing ); 63 CPPUNIT_TEST( FileNameToUrlConversion ); 64 CPPUNIT_TEST_SUITE_END(); 65 66 void UrlParsing(); 67 void FileNameToUrlConversion(); 68 69 DECLARE_NO_COPY_CLASS(FileSystemTestCase) 70}; 71 72// register in the unnamed registry so that these tests are run by default 73CPPUNIT_TEST_SUITE_REGISTRATION( FileSystemTestCase ); 74 75// also include in it's own registry so that these tests can be run alone 76CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( FileSystemTestCase, "FileSystemTestCase" ); 77 78void FileSystemTestCase::UrlParsing() 79{ 80 static const struct Data 81 { 82 const wxChar *url; 83 const wxChar *protocol, *left, *right, *anchor; 84 } data[] = 85 { 86 // simple case: 87 { _T("http://www.root.cz/index.html"), 88 _T("http"), _T(""), _T("//www.root.cz/index.html"), _T("")}, 89 // anchors: 90 { _T("http://www.root.cz/index.html#lbl"), 91 _T("http"), _T(""), _T("//www.root.cz/index.html"), _T("lbl")}, 92 // file is default protocol: 93 { _T("testfile.html"), 94 _T("file"), _T(""), _T("testfile.html"), _T("")}, 95 // stacked protocols: 96 { _T("file:myzipfile.zip#zip:index.htm"), 97 _T("zip"), _T("file:myzipfile.zip"), _T("index.htm"), _T("")}, 98 // changes to ':' parsing often break things: 99 { _T("file:a#b:foo"), 100 _T("b"), _T("file:a"), _T("foo"), _T("")} 101 }; 102 103 UrlTester tst; 104 for ( size_t n = 0; n < WXSIZEOF(data); n++ ) 105 { 106 const Data& d = data[n]; 107 CPPUNIT_ASSERT( tst.Protocol(d.url) == d.protocol ); 108 CPPUNIT_ASSERT( tst.LeftLocation(d.url) == d.left ); 109 CPPUNIT_ASSERT( tst.RightLocation(d.url) == d.right ); 110 CPPUNIT_ASSERT( tst.Anchor(d.url) == d.anchor ); 111 } 112} 113 114void FileSystemTestCase::FileNameToUrlConversion() 115{ 116#ifdef __WINDOWS__ 117 wxFileName fn1(_T("\\\\server\\share\\path\\to\\file")); 118 wxString url1 = wxFileSystem::FileNameToURL(fn1); 119 120 CPPUNIT_ASSERT( fn1.SameAs(wxFileSystem::URLToFileName(url1)) ); 121#endif 122} 123 124#endif // wxUSE_FILESYSTEM 125