summaryrefslogtreecommitdiff
path: root/test/test_fileupload.py
blob: f69eaf6e251d6fe0df89b294bcd83405c4de2777 (plain)
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
# -*- coding: utf-8 -*-
''' Tests for the FileUpload wrapper. '''

import unittest
import sys, os.path
import bottle
from bottle import FileUpload, BytesIO
import tempfile

class TestFileUpload(unittest.TestCase):
    def test_name(self):
        self.assertEqual(FileUpload(None, 'abc', None).name, 'abc')

    def test_raw_filename(self):
        self.assertEqual(FileUpload(None, None, 'x/x').raw_filename, 'x/x')

    def assertFilename(self, bad, good):
        fu = FileUpload(None, None, bad)
        self.assertEqual(fu.filename, good)
        
    def test_filename(self):
        self.assertFilename('with space', 'with-space')
        self.assertFilename('with more  \t\n\r space', 'with-more-space')
        self.assertFilename('with/path', 'path')
        self.assertFilename('../path', 'path')
        self.assertFilename('..\\path', 'path')
        self.assertFilename('..', 'empty')
        self.assertFilename('.name.', 'name')
        self.assertFilename('.name.cfg', 'name.cfg')
        self.assertFilename(' . na me . ', 'na-me')
        self.assertFilename('path/', 'empty')
        self.assertFilename(bottle.tob('ümläüts$'), 'umlauts')
        self.assertFilename(bottle.touni('ümläüts$'), 'umlauts')
        self.assertFilename('', 'empty')
        self.assertFilename('a'+'b'*1337+'c', 'a'+'b'*254)

    def test_preserve_case_issue_582(self):
        self.assertFilename('UpperCase', 'UpperCase')

    def test_save_buffer(self):
        fu = FileUpload(open(__file__, 'rb'), 'testfile', __file__)
        buff = BytesIO()
        fu.save(buff)
        buff.seek(0)
        self.assertEqual(fu.file.read(), buff.read())

    def test_save_file(self):
        fu = FileUpload(open(__file__, 'rb'), 'testfile', __file__)
        buff = tempfile.TemporaryFile()
        fu.save(buff)
        buff.seek(0)
        self.assertEqual(fu.file.read(), buff.read())

    def test_save_overwrite_lock(self):
        fu = FileUpload(open(__file__, 'rb'), 'testfile', __file__)
        self.assertRaises(IOError, fu.save, __file__)

    def test_save_dir(self):
        fu = FileUpload(open(__file__, 'rb'), 'testfile', __file__)
        dirpath = tempfile.mkdtemp()
        filepath = os.path.join(dirpath, fu.filename)
        fu.save(dirpath)
        self.assertEqual(fu.file.read(), open(filepath, 'rb').read())
        os.unlink(filepath)
        os.rmdir(dirpath)