File: test_lines.py

package info (click to toggle)
pyxrd 0.8.4-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,848 kB
  • sloc: python: 26,500; sh: 301; makefile: 128
file content (128 lines) | stat: -rw-r--r-- 3,866 bytes parent folder | download | duplicates (3)
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
#!/usr/bin/python

# coding=UTF-8
# ex:ts=4:sw=4:et=on

# Copyright (c) 2013, Mathijs Dumon
# All rights reserved.
# Complete license can be found in the LICENSE file.

import unittest

from test.utils import create_object_attribute_test

from mvc import Observer
from pyxrd.generic.models import (
    PyXRDLine,
    CalculatedLine,
    ExperimentalLine,
)

__all__ = [
    'TestPyXRDLine',
    'TestCalculatedLine',
    'TestExperimentalLine',
]

class LineObserver(Observer):
    needs_update_recieved = False
    @Observer.observe("data_changed", signal=True)
    @Observer.observe("visuals_changed", signal=True)
    def on_update_needed(self, model, prop_name, info):
        self.needs_update_recieved = True

class BaseTestLines():

    class BaseTestLine(unittest.TestCase):

        def setUp(self):
            self.line = self.line_type()
            self.observer = LineObserver(model=self.line)

        def tearDown(self):
            self.observer.relieve_model(self.line)
            del self.observer
            del self.line

        def test_not_none(self):
            self.assertIsNotNone(self.line)

        test_lw = create_object_attribute_test('line', 'lw', 5)
        test_color = create_object_attribute_test('line', 'color', '#FF0000')
        test_label = create_object_attribute_test('line', 'label', '#FF0000')

        def _set_some_data(self):
            x = [1, 2, 3, 4, 5, 6, 7 , 8 , 9 , 10, 11, 12 , 13, 14, 15, 16, 17, 18, 19, 20]
            y = [0, 0, 0, 0, 0, 0, 10, 20, 30, 40, 80, 160, 80, 40, 30, 20, 10, 0 , 0 , 0 ]
            y = list(zip(y, y))
            self.line.set_data(x, y)

        def test_updates(self):
            self.observer.needs_update_recieved = False
            self._set_some_data()
            self.assertTrue(self.observer.needs_update_recieved)

        def test_data(self):
            self._set_some_data()
            self.assertEqual(self.line.num_columns, 3)
            self.assertEqual(self.line.max_display_y, 160)
            self.assertEqual(self.line.size, 20)
            self.assertEqual(self.line.get_y_at_x(7), 10)
            self.assertEqual(self.line.get_y_at_x(10.5), 60)

        def test_names(self):
            self.observer.needs_update_recieved = False
            self._set_some_data()
            names = ["TestName"]
            self.line.y_names = names
            self.assertEqual(self.line.get_y_name(0), names[0])

        def test_append_valid(self):
            self.line.append(0, 0)
            self.assertEqual(self.line[0], (0.0, [0.0]))

        def test_append_valid_multi(self):
            self.line.append(0, [0, 1, 2])
            self.assertEqual(self.line[0], (0.0, [0.0, 1.0, 2.0]))

        def test_signal(self):
            self.observer.needs_update_recieved = False
            self.line.lw = 10
            self.assertTrue(self.observer.needs_update_recieved)

        def test_serialisation(self):
            x = [1, 2, 3, 4, 5, 6, 7 , 8 , 9 , 10, 11, 12 , 13, 14, 15, 16, 17, 18, 19, 20]
            y = [0, 0, 0, 0, 0, 0, 10, 20, 30, 40, 80, 160, 80, 40, 30, 20, 10, 0 , 0 , 0 ]
            self.line.set_data(x, y)
            serialised1 = self.line._serialize_data()
            self.line._set_from_serial_data(serialised1)
            serialised2 = self.line._serialize_data()
            self.assertEqual(serialised1, serialised2)

        pass # end of class
        
    pass # end of class

class TestPyXRDLine(BaseTestLines.BaseTestLine):

    line_type = PyXRDLine

    pass # end of class

class TestCalculatedLine(BaseTestLines.BaseTestLine):

    line_type = CalculatedLine

    pass # end of class

class TestExperimentalLine(BaseTestLines.BaseTestLine):

    line_type = ExperimentalLine

    # TODO:
    # test bg substr
    # test smooth
    # test strip
    # test capping -> max intensity

    pass # end of class