File: filesystest.cpp

package info (click to toggle)
wxwidgets3.0 3.0.5.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 120,464 kB
  • sloc: cpp: 896,633; makefile: 52,303; ansic: 21,971; sh: 5,713; python: 2,940; xml: 1,534; perl: 264; javascript: 33
file content (140 lines) | stat: -rw-r--r-- 4,567 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
///////////////////////////////////////////////////////////////////////////////
// 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)) { 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( FileNameToUrlConversion );
        CPPUNIT_TEST( UnicodeFileNameToUrlConversion );
    CPPUNIT_TEST_SUITE_END();

    void UrlParsing();
    void FileNameToUrlConversion();
    void UnicodeFileNameToUrlConversion();

    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 its 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 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("")}
    };

    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 );
    }
}

void FileSystemTestCase::FileNameToUrlConversion()
{
#ifdef __WINDOWS__
    wxFileName fn1(wxT("\\\\server\\share\\path\\to\\file"));
    wxString url1 = wxFileSystem::FileNameToURL(fn1);

    CPPUNIT_ASSERT( fn1.SameAs(wxFileSystem::URLToFileName(url1)) );
#endif
}

void FileSystemTestCase::UnicodeFileNameToUrlConversion()
{
    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);

    CPPUNIT_ASSERT( filename.SameAs(wxFileSystem::URLToFileName(url)) );
}

#endif // wxUSE_FILESYSTEM