UNPKG

9.63 kBJavaScriptView Raw
1// Jasmine test to discover exercises
2// requires file ./auth-data.json with login and password (not under git!)
3
4var CodeGradX = require('../codegradxlib.js');
5var authData = require('./auth1-data.json'); // lambda student
6
7describe('CodeGradX', function () {
8
9 function make_faildone (done) {
10 return function faildone (reason) {
11 var state = CodeGradX.getCurrentState();
12 state.debug('faildone', reason).show();
13 //console.log(reason);
14 fail(reason);
15 done();
16 };
17 }
18
19 it('should be loaded', function (done) {
20 expect(CodeGradX).toBeDefined();
21 var state = new CodeGradX.State();
22 var faildone = make_faildone(done);
23 state.getAuthenticatedUser(authData.login, authData.password)
24 .then(function (user) {
25 expect(user).toBeDefined();
26 expect(user).toBe(state.currentUser);
27 done();
28 }, faildone);
29 });
30
31function _str2Date (str) {
32 var ms = Date.parse(str);
33 if ( ! isNaN(ms) ) {
34 var d = new Date(ms);
35 //console.log("STR:" + str + " => " + ms + " ==> " + d);
36 return d;
37 } else {
38 throw new Error("Cannot parse " + str);
39 }
40}
41
42 it("should have a working str2Date", function (done) {
43 var string1 = "2001-01-01 00:00:00+01";
44 var date1 = _str2Date(string1);
45 expect(date1.getFullYear()).toBe(2001);
46
47 var string2 = "2032-01-01 00:00:00+01";
48 var date2 = _str2Date(string2);
49 expect(date2.getFullYear()).toBe(2032);
50
51 var string3 = "2028-01-01T00:00:00";
52 var date3 = _str2Date(string3);
53 expect(date3.getFullYear()).toBe(2028);
54
55 var string4 = "2027-01-01 00:00:00Z";
56 var date4 = _str2Date(string4);
57 expect(date4.getFullYear()).toBe(2027);
58
59 var string5 = "2026-01-01T00:00:00Z";
60 var date5 = _str2Date(string5);
61 expect(date5.getFullYear()).toBe(2026);
62
63 done();
64 });
65
66 var campaign1; // the 'free' current campaign
67
68 it("should get campaign 'free'", function (done) {
69 var state = CodeGradX.getCurrentState();
70 var faildone = make_faildone(done);
71 expect(state.currentUser instanceof CodeGradX.User).toBeTruthy();
72 state.currentUser.getCampaign('free').then(function (campaign) {
73 expect(campaign instanceof CodeGradX.Campaign).toBeTruthy();
74 expect(campaign.name).toBe('free');
75 campaign1 = campaign;
76 //console.log(campaign); //
77 expect(campaign.starttime instanceof Date).toBeTruthy();
78 expect(campaign.endtime instanceof Date).toBeTruthy();
79 expect(campaign.starttime.getFullYear()).toBeLessThan(2008);
80 expect(campaign.endtime.getFullYear()).toBeGreaterThan(2028);
81 //console.log(campaign);
82 expect(campaign.exercisesSet).toBeUndefined();
83 campaign.getExercisesSet().then(function (es) {
84 //console.log(es);
85 expect(es instanceof CodeGradX.ExercisesSet).toBeTruthy();
86 expect(es).toBe(campaign.exercisesSet);
87 campaign.getExercisesSet().then(function (es2) {
88 expect(es2).toBe(es);
89 done();
90 }, faildone);
91 }, faildone);
92 }, faildone);
93 });
94
95 var campaign2; // the 'insta2-2016oct' past campaign
96
97 it("should get all campaigns", function (done) {
98 var state = CodeGradX.getCurrentState();
99 var faildone = make_faildone(done);
100 expect(state.currentUser instanceof CodeGradX.User).toBeTruthy();
101 state.currentUser.getCampaigns().then(function (campaigns) {
102 //console.log(campaigns);//DEBUG//////////////////
103 expect(campaigns.free).toBeDefined();
104 expect(campaigns.free.name).toBe('free');
105 campaign2 = campaigns['insta2-2016oct'];
106 //console.log(campaign2);// DEBUG
107 expect(campaign2).toBeDefined();
108 expect(campaign2.name).toBe('insta2-2016oct');
109 // the `free` campaign is active:
110 //console.log(campaign1.exercisesSet, 'one');//
111 state.currentUser.getCampaigns(true).then(function (campaigns2) {
112 expect(campaigns2.free.name).toBe(campaign1.name);
113 expect(Object.getOwnPropertyNames(campaigns2).length)
114 .toBeLessThan(Object.getOwnPropertyNames(campaigns).length);
115 done();
116 }).catch(faildone);
117 }).catch(faildone);
118 });
119
120 // Javascript test
121 it("checks replace globally", function () {
122 var re = new RegExp("^(.)*(<a>(.)*</a>)(.)*$", "g");
123 var s1 = "1234<a>X</a>567";
124 expect(s1.replace(re, "$2")).toBe("<a>X</a>");
125
126 var reg = new RegExp("<a>.*?</a>", "g");
127 expect(s1.match(reg).length).toBe(1);
128 expect(s1.match(reg)[0]).toBe("<a>X</a>");
129
130 var s2 = "1234<a>X</a>567<a>YZ</a>89";
131 //expect(s1.replace(re, "$2")).toBe("<a>X</a><a>YZ</a>");
132 expect(s2.match(reg).length).toBe(2);
133 expect(s2.match(reg)[0]).toBe("<a>X</a>");
134 expect(s2.match(reg)[1]).toBe("<a>YZ</a>");
135 });
136
137 var exercise1; // the org.fw4ex.li101.croissante.0 exercise
138
139 it("get one exercise description", function (done) {
140 var state = CodeGradX.getCurrentState();
141 var faildone = make_faildone(done);
142 expect(campaign1).toBeDefined();
143 //console.log(campaign1);////
144 campaign1.getExercisesSet().then(function (exercisesSet) {
145 expect(exercisesSet).toBeDefined();
146 //console.log(exercisesSet);////
147 exercise1 = campaign1.exercisesSet.exercises[0].exercises[0];
148 expect(exercise1 instanceof CodeGradX.Exercise).toBeTruthy();
149 expect(exercise1.nickname).toBe('croissante');
150 //console.log(exercise1);
151 exercise1.getDescription().then(function (description) {
152 //console.log(e);
153 expect(exercise1._XMLdescription).toBeDefined();
154 expect(exercise1._description).toBe(description);
155 expect(exercise1._description.fw4ex).toBeDefined();
156 expect(exercise1._description.fw4ex.exerciseContent).toBeDefined();
157 // Check authorship:
158 expect(exercise1.authorship.length).toBe(1);
159 expect(exercise1.authorship[0].firstname).toBe('Christian');
160 // check stem:
161 expect(exercise1.XMLcontent).toBeDefined();
162 // check inlineFileName
163 expect(exercise1.inlineFileName).toBe("croissante.scm");
164 //console.log(exercise1);
165 done();
166 }, faildone);
167 }, faildone);
168 }, 10*1000);
169
170 var exercise2;
171
172 it("get a precise exercise by its name", function (done) {
173 var state = CodeGradX.getCurrentState();
174 var faildone = make_faildone(done);
175 var exerciseName = "com.paracamplus.li205.function.1";
176 campaign1.getExercise(exerciseName).then(function (exercise) {
177 expect(exercise).toBeDefined();
178 expect(exercise.name).toBe(exerciseName);
179 exercise.getDescription().then(function (description) {
180 expect(exercise.inlineFileName).toBe("min.c");
181 exercise2 = exercise;
182 done();
183 }, faildone);
184 }, faildone);
185 });
186
187 // ExercisesSet.exercises[0]:
188 // 0 -> org.fw4ex.li101.croissante.0
189 // 1 -> org.fw4ex.li101.l2p
190 // 2 -> com.paracamplus.li205.function.1
191 // 3 -> com.paracamplus.li314.java.3
192 // 4 -> com.paracamplus.li362.sh.7
193 // 5 -> com.paracamplus.li362.tr.4
194 // 6 -> com.paracamplus.lt216.1
195 // 7 -> org.fw4ex.ocaml.1
196 // ExercisesSet.exercises[1]:
197 // 8 -> org.fw4ex.li218.devoir.2010nov.3
198 it("get a precise exercise by its rank", function (done) {
199 var state = CodeGradX.getCurrentState();
200 var faildone = make_faildone(done);
201 var exerciseName = "com.paracamplus.li314.java.3";
202 campaign1.getExercise(3).then(function (exercise) {
203 expect(exercise).toBeDefined();
204 expect(exercise.name).toBe(exerciseName);
205 done();
206 }, faildone);
207 });
208
209 it("get a precise exercise by its rank", function (done) {
210 var state = CodeGradX.getCurrentState();
211 var faildone = make_faildone(done);
212 var exerciseName = "com.paracamplus.li362.sh.7";
213 campaign1.getExercise(4).then(function (exercise) {
214 expect(exercise).toBeDefined();
215 expect(exercise.name).toBe(exerciseName);
216 done();
217 }, faildone);
218 });
219
220 it("get a precise exercise by its rank", function (done) {
221 var state = CodeGradX.getCurrentState();
222 var faildone = make_faildone(done);
223 var exerciseName = "org.fw4ex.li218.devoir.2010nov.3";
224 campaign1.getExercise(8).then(function (exercise) {
225 expect(exercise).toBeDefined();
226 expect(exercise.name).toBe(exerciseName);
227 done();
228 }, faildone);
229 });
230
231 it("get an absent exercise", function (done) {
232 var state = CodeGradX.getCurrentState();
233 var faildone = make_faildone(done);
234 var exerciseName = "com.paracamplus.li205.function.1,.XXX";
235 campaign1.getExercise(exerciseName).then(faildone, function (reason) {
236 done();
237 });
238 });
239
240 var code1 = "" +
241 "int min (int a, int b) { \n" +
242 " return (a<b)?a:b; \n" +
243 "}\n";
244
245 it("may send an answer", function (done) {
246 var state = CodeGradX.getCurrentState();
247 var faildone = make_faildone(done);
248 expect(exercise2).toBeDefined();
249 //console.log(exercise2);
250 exercise2.sendStringAnswer(code1).then(function (job) {
251 expect(job).toBeDefined();
252 //console.log(job);
253 expect(job instanceof CodeGradX.Job).toBeTruthy();
254 expect(job.jobid).toBeDefined();
255 job.getReport().then(function (j) {
256 //console.log(report);
257 expect(j).toBeDefined();
258 expect(j).toBe(job);
259 expect(j.finished).toBeDefined();
260 expect(j.exerciseid).toBeDefined();
261 expect(j.HTMLreport).toBeDefined();
262 job.getReport().then(function (j2) {
263 expect(j2).toBe(j);
264 done();
265 }, faildone);
266 }, faildone);
267 }, faildone);
268 }, 50*1000); // 50 seconds
269
270});