-
Notifications
You must be signed in to change notification settings - Fork 8
/
classes.lisp
91 lines (79 loc) · 2.53 KB
/
classes.lisp
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
(in-package #:metabang-bind-test)
(defclass metabang-bind-class-1 ()
((a :initarg :a :accessor a)
(b :initarg :b :accessor b)
(c :initarg :c :accessor c)))
(defclass metabang-bind-class-2 (metabang-bind-class-1)
((d :initarg :d :accessor the-d)
(e :initarg :e :accessor e)))
(deftestsuite test-classes (metabang-bind-test)
())
(addtest (test-classes)
basic-slots
(ensure-same
(bind (((:slots-read-only a c)
(make-instance 'metabang-bind-class-1 :a 1 :b 2 :c 3)))
(list a c))
'(1 3) :test 'equal))
(addtest (test-classes)
slots-new-variable-names
(ensure-same
(bind (((:slots-read-only a (my-c c) (the-b b))
(make-instance 'metabang-bind-class-1 :a 1 :b 2 :c 3)))
(list a the-b my-c))
'(1 2 3) :test 'equal))
(addtest (test-classes)
writable-slots
(ensure-same
(bind ((instance (make-instance 'metabang-bind-class-1 :a 1 :b 2 :c 3))
((:slots a (my-c c) (the-b b)) instance))
(setf a :changed)
(list (slot-value instance 'a) the-b my-c))
'(:changed 2 3) :test 'equal))
(addtest (test-classes)
slots-r/o-1
(ensure-same
(bind (((:slots-r/o a c)
(make-instance 'metabang-bind-class-1 :a 1 :b 2 :c 3)))
(list a c))
'(1 3) :test 'equal))
(addtest (test-classes)
basic-accessors-r/o-1
(ensure-same
(bind (((:accessors-read-only a c e)
(make-instance 'metabang-bind-class-2 :a 1 :b 2 :c 3 :d 4 :e 5)))
(list e c a))
'(5 3 1) :test 'equal))
(addtest (test-classes)
basic-accessors-r/o-2
(bind ((obj (make-instance 'metabang-bind-class-2 :a 1 :b 2 :c 3 :d 4 :e 5))
((:accessors-read-only a c e) obj))
(setf a :a c :c)
(ensure-same (list a c e) '(:a :c 5) :test 'equal)
(ensure-same
(list (e obj) (c obj) (a obj))
'(5 3 1) :test 'equal)))
(addtest (test-classes)
accessors-new-variable-names-r/o
(ensure-same
(bind (((:accessors-r/o (my-a a) (my-c c) (d the-d))
(make-instance 'metabang-bind-class-2 :a 1 :b 2 :c 3 :d 4 :e 5)))
(list d my-c my-a))
'(4 3 1) :test 'equal))
(addtest (test-classes)
basic-accessors-1
(ensure-same
(bind ((obj (make-instance 'metabang-bind-class-2 :a 1 :b 2 :c 3 :d 4 :e 5))
((:accessors a c e) obj))
(setf a :a c :c)
(list (e obj) (c obj) (a obj)))
'(5 :c :a) :test 'equal))
(addtest (test-classes)
accessors-new-variable-names
(ensure-same
(bind ((obj (make-instance 'metabang-bind-class-2 :a 1 :b 2 :c 3 :d 4 :e 5))
((:writable-accessors (my-a a) (my-c c) (d the-d))
obj))
(setf my-a 42)
(list d my-c my-a (a obj)))
'(4 3 42 42) :test 'equal))