1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4#
5# Copyright 2017, Data61
6# Commonwealth Scientific and Industrial Research Organisation (CSIRO)
7# ABN 41 687 119 230.
8#
9# This software may be distributed and modified according to the terms of
10# the BSD 2-Clause license. Note that NO WARRANTY is provided.
11# See "LICENSE_BSD2.txt" for details.
12#
13# @TAG(DATA61_BSD)
14#
15
16from __future__ import absolute_import, division, print_function, \
17    unicode_literals
18
19import os, sys, tempfile, unittest
20
21ME = os.path.abspath(__file__)
22
23# Make CAmkES importable
24sys.path.append(os.path.join(os.path.dirname(ME), '../../..'))
25
26from camkes.internal.tests.utils import CAmkESTest
27from camkes.parser.stage0 import Reader
28
29class TestReader(CAmkESTest):
30    def setUp(self):
31        super(TestReader, self).setUp()
32        self.reader = Reader()
33
34    def test_empty_string(self):
35        content, read = self.reader.parse_string('')
36        self.assertEqual(content, '')
37        self.assertLen(read, 0)
38
39    def test_basic_string(self):
40        content, read = self.reader.parse_string('hello world')
41        self.assertEqual(content, 'hello world')
42        self.assertLen(read, 0)
43
44    def test_unicode_string(self):
45        content, read = self.reader.parse_string('���hello world')
46        self.assertEqual(content, '���hello world')
47        self.assertLen(read, 0)
48
49    def test_empty_file(self):
50        tmp = self.mkstemp()
51        with open(tmp, 'wt') as f:
52            f.write('hello world')
53
54        content, read = self.reader.parse_file(tmp)
55
56        self.assertEqual(content, 'hello world')
57        self.assertEqual(read, set([tmp]))
58
59    def test_unicode_file(self):
60        tmp = self.mkstemp()
61        with open(tmp, 'wb') as f:
62            f.write('���hello world'.encode('utf-8'))
63
64        content, read = self.reader.parse_file(tmp)
65
66        self.assertEqual(content, '���hello world')
67        self.assertEqual(read, set([tmp]))
68
69    def test_non_existent_file(self):
70        # Create a path that we know refers to a file that doesn't exist
71        _, tmp = tempfile.mkstemp()
72        os.remove(tmp)
73        assert not os.path.exists(tmp)
74
75        with self.assertRaises(IOError):
76            self.reader.parse_file(tmp)
77
78if __name__ == '__main__':
79    unittest.main()
80