-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsidang_rangkap_pabrik.gr
142 lines (121 loc) · 4.5 KB
/
sidang_rangkap_pabrik.gr
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
141
142
// Hak Cipta (c) 2021 Adam Notodikromo.
// Hak cipta dilindungi undang-undang.
// Penggunaan tunduk pada aturan lisensi.
sidang(Rangkap::Pabrik, fn () {
tentang("inisialisasi", fn () {
ia("tidak dapat dibuat tanpa argumen", fn () {
tuntut coba {
kelasIni.baru
salah
} tahan (e) {
tuntut e itu MasalahMetode
tuntut e.pesan == "`baru` adalah fungsi statis bersifat pribadi kelas Rangkap::Pabrik yang hanya bisa dipanggil dari dalam"
benar
} == benar
})
ia("bisa dibuat dengan argumen sebuah Deret", fn () {
ada p = kelasIni.baru(["a", "b", "c"])
tuntut p itu kelasIni
})
ia("bisa dibuat menggunakan Rangkap#dengan", fn () {
ada p = Rangkap.dengan(["a", "b"])
tuntut p itu kelasIni
})
ia("akan bermasalah jika alias tidak unik", fn () {
tuntut coba {
kelasIni.baru(["a", "b", "c", "a"])
salah
} tahan (e) {
tuntut e itu MasalahRangkap
tuntut e.pesan == "nama alias sudah ada yang terdefinisikan"
benar
} == benar
})
})
tentang(".isiDi(arg1, arg2)", fn () {
ia("bisa mendefinisikan tipe data arg1 sebagai arg2", fn () {
ada siswa = kelasIni.baru(["nama", "umur"])
siswa
.kelasUntuk("nama", Kata)
.kelasUntuk("umur", Integer)
})
ia("akan bermasalah jika alias belum terdefinisikan", fn () {
ada siswa = kelasIni.baru(["nama", "umur"])
tuntut coba {
siswa.kelasUntuk("xyz", Integer)
salah
} tahan (e) {
tuntut e itu MasalahRangkap
tuntut e.pesan == "`xyz` belum terdefinisikan"
benar
} == benar
})
ia("akan bermasalah jika alias bukan Kata", fn () {
ada siswa = kelasIni.baru(["nama", "umur"])
tuntut coba {
siswa.kelasUntuk(1, Integer)
salah
} tahan (e) {
tuntut e itu MasalahRangkap
tuntut e.pesan == "alias harus Kata"
benar
} == benar
})
ia("akan bermasalah jika arg2 bukan Kelas", fn () {
ada siswa = kelasIni.baru(["nama", "umur"])
tuntut coba {
siswa.kelasUntuk("nama", 1)
salah
} tahan (e) {
tuntut e itu MasalahRangkap
tuntut e.pesan == "seharusnya Kelas tapi menerima Integer"
benar
} == benar
})
})
tentang(".picu()", fn () {
// todo: ganti ke def("siswa", fn () { })
ada siswa = kelasIni.baru(["nama", "umur"])
ia("dapat membuat Rangkap", fn () {
ada s1 = siswa("Adam", 12)
tuntut s1 itu Rangkap
tuntut s1[0] == "Adam"
tuntut s1["nama"] == "Adam"
tuntut s1[1] == 12
tuntut s1["umur"] == 12
})
ia("bermasalah jika argumen kurang dari yang dibutuhkan", fn () {
tuntut coba {
siswa("Adam")
salah
} tahan (e) {
tuntut e itu MasalahRangkap
tuntut e.pesan == "seharusnya 2 rangkap: [\"nama\", \"umur\"], tapi menerima: <\"Adam\">"
benar
} == benar
})
tentang("saat memiliki tipe yang terdefinisikan", fn () {
ia("dapat membuat Rangkap jika sesuai tipe", fn () {
ada siswa = kelasIni.baru(["nama", "umur"])
.kelasUntuk("nama", Kata)
.kelasUntuk("umur", Integer) // ganti ke (sebelum(fn() {}))
ada s = siswa("Adam", 12)
tuntut s["nama"] == "Adam"
tuntut s["umur"] == 12
})
ia("akan bermasalah jika tidak sesuai tipe", fn () {
ada siswa = kelasIni.baru(["nama", "umur"])
.kelasUntuk("nama", Kata)
.kelasUntuk("umur", Integer) // ganti ke (sebelum(fn() {}))
tuntut coba {
siswa(1, 12)
salah
} tahan (e) {
tuntut e itu MasalahRangkap
tuntut e.pesan == "`nama` harus bertipe Kata"
benar
} == benar
})
})
})
})