ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
assFormulaQuestionTest.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3
12{
13 protected $backupGlobals = FALSE;
14
15 protected function setUp()
16 {
17 if (defined('ILIAS_PHPUNIT_CONTEXT'))
18 {
19 include_once("./Services/PHPUnit/classes/class.ilUnitUtil.php");
20 ilUnitUtil::performInitialisation();
21 }
22 else
23 {
24 chdir( dirname( __FILE__ ) );
25 chdir('../../../');
26
27 require_once './Services/UICore/classes/class.ilCtrl.php';
28 $ilCtrl_mock = $this->getMock('ilCtrl');
29 $ilCtrl_mock->expects( $this->any() )->method( 'saveParameter' );
30 $ilCtrl_mock->expects( $this->any() )->method( 'saveParameterByClass' );
31 global $ilCtrl;
32 $ilCtrl = $ilCtrl_mock;
33
34 require_once './Services/Language/classes/class.ilLanguage.php';
35 $lng_mock = $this->getMock('ilLanguage', array('txt'), array(), '', false);
36 //$lng_mock->expects( $this->once() )->method( 'txt' )->will( $this->returnValue('Test') );
37 global $lng;
38 $lng = $lng_mock;
39
40 $ilias_mock = new stdClass();
41 $ilias_mock->account = new stdClass();
42 $ilias_mock->account->id = 6;
43 $ilias_mock->account->fullname = 'Esther Tester';
44 global $ilias;
45 $ilias = $ilias_mock;
46 }
47 }
48
50 {
51 // Arrange
52 require_once './Modules/TestQuestionPool/classes/class.assFormulaQuestion.php';
53
54 // Act
55 $instance = new assFormulaQuestion();
56
57 $this->assertInstanceOf('assFormulaQuestion', $instance);
58 }
59
70 assFormulaQuestionResult $result, array $variables, array $results, $userResult, $userResultUnit, $expectedResult
71 )
72 {
73 $isCorrect = $result->isCorrect($variables, $results, $userResult, $userResultUnit);
74 $this->assertEquals($expectedResult, $isCorrect);
75 }
76
81 {
82 $points = 5;
83 $precision = 2;
84
85 $meter = new assFormulaQuestionUnit();
86 $meter->initFormArray([
87 'unit_id' => 1,
88 'category' => 1,
89 'sequence' => 1,
90 'unit' => 'Meter',
91 'factor' => 1,
92 'baseunit_fi' => -1,
93 'baseunit_title' => ''
94 ]);
95
96 $centimeter = new assFormulaQuestionUnit();
97 $centimeter->initFormArray([
98 'unit_id' => 2,
99 'category' => 1,
100 'sequence' => 2,
101 'unit' => 'Centimeter',
102 'factor' => 0.01,
103 'baseunit_fi' => 1,
104 'baseunit_title' => 'Meter'
105 ]);
106
107 $newtonmetre = new assFormulaQuestionUnit();
108 $newtonmetre->initFormArray([
109 'unit_id' => 3,
110 'category' => 1,
111 'sequence' => 3,
112 'unit' => 'Newton Metre',
113 'factor' => 1,
114 'baseunit_fi' => -1,
115 'baseunit_title' => ''
116 ]);
117
118 $newtoncentimeter = new assFormulaQuestionUnit();
119 $newtoncentimeter->initFormArray([
120 'unit_id' => 4,
121 'category' => 1,
122 'sequence' => 4,
123 'unit' => 'Newton Centimeter',
124 'factor' => 0.01,
125 'baseunit_fi' => 3,
126 'baseunit_title' => 'Newton Metre'
127 ]);
128
129 $v1 = new assFormulaQuestionVariable('$v1', 1, 20, $newtonmetre, 1);
130 $v2 = new assFormulaQuestionVariable('$v2', 1, 10, $centimeter, 1);
131 $v1->setValue(19.6);
132 $v1->setIntprecision(1);
133 $v2->setValue(6.6);
134 $v2->setIntprecision(1);
135
136 $v3 = clone $v1;
137 $v4 = clone $v2;
138 $v3->setUnit(null);
139 $v3->setVariable('$v3');
140 $v4->setUnit(null);
141 $v4->setVariable('$v4');
142
143 $r1 = new assFormulaQuestionResult(
144 '$r1', 0, 0, 0, $newtoncentimeter, '$v1 * $v2', $points, $precision, true, 33, 34, 33, assFormulaQuestionResult::RESULT_DEC
145 );
146 $r2 = new assFormulaQuestionResult(
147 '$r2', 0, 0, 0, $newtonmetre, '$v1 * $v2', $points, $precision, true, 33, 34, 33, assFormulaQuestionResult::RESULT_DEC
148 );
149 $r3 = new assFormulaQuestionResult(
150 '$r3', 0, 0, 0, null, '$v1 * $v2', $points, $precision, true, 33, 34, 33, assFormulaQuestionResult::RESULT_DEC
151 );
152 $r4 = new assFormulaQuestionResult(
153 '$r4', 0, 0, 0, null, '$v1 * $v2', $points, $precision, true, 33, 34, 33, assFormulaQuestionResult::RESULT_DEC
154 );
155 $r5 = new assFormulaQuestionResult(
156 '$r5', 0, 0, 0, null, '$v1 * $v2', $points, $precision, true, 33, 34, 33, assFormulaQuestionResult::RESULT_DEC
157 );
158 $r6 = new assFormulaQuestionResult(
159 '$r6', 0, 0, 0, null, '$v3 * $v4', $points, $precision, true, 33, 34, 33, assFormulaQuestionResult::RESULT_DEC
160 );
161
162 // RESULT_FRAC
163 $v5 = new assFormulaQuestionVariable('$v5', 1, 20, null, 1);
164 $v6 = new assFormulaQuestionVariable('$v6', 1, 10, null, 1);
165 $v5->setValue(1);
166 $v6->setValue(3);
167
168 $v7 = new assFormulaQuestionVariable('$v7', 1, 20, null, 1);
169 $v8 = new assFormulaQuestionVariable('$v8', 1, 10, null, 1);
170 $v7->setValue(2);
171 $v8->setValue(4);
172
173 $r7 = new assFormulaQuestionResult(
174 '$r7', 0, 0, 0, null, '$v5/$v6', $points, $precision, true, 33, 34, 33, assFormulaQuestionResult::RESULT_FRAC
175 );
176
177 $r8 = new assFormulaQuestionResult(
178 '$r8', 0, 0, 0, null, '$v7/$v8', $points, $precision, true, 33, 34, 33, assFormulaQuestionResult::RESULT_FRAC
179 );
180
181 // RESULT_CO_FRAC
182 $v9 = clone $v7;
183 $v9->setVariable('$v9');
184 $v10 = clone $v8;
185 $v10->setVariable('$v10');
186
187 $v11 = clone $v7;
188 $v11->setVariable('$v11');
189 $v12 = clone $v8;
190 $v12->setVariable('$v12');
191
192 $r9 = new assFormulaQuestionResult(
193 '$r9', 0, 0, 0, null, '$v9/$v10', $points, $precision, true, 33, 34, 33, assFormulaQuestionResult::RESULT_CO_FRAC
194 );
195
196 $r10 = new assFormulaQuestionResult(
197 '$r10', 0, 0, 0, null, '$v11/$v12', $points, $precision, true, 33, 34, 33, assFormulaQuestionResult::RESULT_CO_FRAC
198 );
199
200 // RESULT_NO_SELECTION
201 $v13 = new assFormulaQuestionVariable('$v13', 1, 20, null, 1);
202 $v14 = new assFormulaQuestionVariable('$v14', 1, 10, null, 1);
203 $v13->setValue(1);
204 $v14->setValue(3);
205 $r11 = new assFormulaQuestionResult(
206 '$r11', 0, 0, 0, null, '$v13/$v14', $points, $precision, true, 33, 34, 33, assFormulaQuestionResult::RESULT_NO_SELECTION);
207
208 $v15 = new assFormulaQuestionVariable('$v15', 200, 800, null, 0);
209 $v16 = new assFormulaQuestionVariable('$v16', 50, 250, null, 0);
210 $v17 = new assFormulaQuestionVariable('$v17', 3, 18, null, 0);
211 $v15->setIntprecision(25);
212 $v16->setIntprecision(5);
213 $v17->setIntprecision(1);
214 $v15->setValue(225);
215 $v16->setValue(85);
216 $v17->setValue(10);
217 $r12 = new assFormulaQuestionResult(
218 '$r12', 0, 0, 0, null, '1/(2*pi)*sqrt($v16*1000/$v15)+$v17-$v17', $points, 1, true, 33, 34, 33, assFormulaQuestionResult::RESULT_NO_SELECTION
219 );
220
221 $variables = [
222 $v1->getVariable() => $v1,
223 $v2->getVariable() => $v2,
224 $v3->getVariable() => $v3,
225 $v4->getVariable() => $v4,
226 $v5->getVariable() => $v5,
227 $v6->getVariable() => $v6,
228 $v7->getVariable() => $v7,
229 $v8->getVariable() => $v8,
230 $v9->getVariable() => $v9,
231 $v10->getVariable() => $v10,
232 $v11->getVariable() => $v11,
233 $v12->getVariable() => $v12,
234 $v13->getVariable() => $v13,
235 $v14->getVariable() => $v14,
236 $v15->getVariable() => $v15,
237 $v16->getVariable() => $v16,
238 $v17->getVariable() => $v17,
239 ];
240
241 $results = [
242 $r1->getResult() => $r1,
243 $r2->getResult() => $r2,
244 $r3->getResult() => $r3,
245 $r4->getResult() => $r4,
246 $r5->getResult() => $r5,
247 $r6->getResult() => $r6,
248 $r7->getResult() => $r7,
249 $r8->getResult() => $r8,
250 $r9->getResult() => $r9,
251 $r10->getResult() => $r10,
252 $r11->getResult() => $r11,
253 $r12->getResult() => $r12,
254 ];
255
256 return [
257 //result, all variables, all results, user solution, unit chosen by user for solution
258 [$r1, $variables, $results, '129.36', $newtoncentimeter, true],
259 [$r2, $variables, $results, '1.29', $newtonmetre, true],
260 [$r3, $variables, $results, '1.29', $newtonmetre, true],
261 [$r4, $variables, $results, '129.36', $newtoncentimeter, true],
262 [$r5, $variables, $results, '1.29', null, true],
263 [$r6, $variables, $results, '129.36', null, true],
264 // RESULT_FRAC
265 [$r7, $variables, $results, '1/3', null, true],
266 [$r8, $variables, $results, '4/8', null, true],
267 // RESULT_CO_FRAC
268 [$r9, $variables, $results, '1/2', null, true],
269 [$r10, $variables, $results, '4/8', null, false],
270 // RESULT_NO_SELECTION
271 [$r11, $variables, $results, '1/3', null, true],
272 // Test for #22381
273 [$r12, $variables, $results, '3.1', null, true],
274 ];
275 }
276}
$result
An exception for terminatinating execution or to throw for unit testing.
testSimpleRatedFormulaQuestionCalculations(assFormulaQuestionResult $result, array $variables, array $results, $userResult, $userResultUnit, $expectedResult)
@dataProvider simpleRatedCalculationsData
Class for single choice questions assFormulaQuestion is a class for single choice questions.
global $ilCtrl
Definition: ilias.php:18
defined( 'APPLICATION_ENV')||define( 'APPLICATION_ENV'
Definition: bootstrap.php:27
global $lng
Definition: privfeed.php:17
$results