diff --git a/app/Http/Controllers/PHP/PHPController.php b/app/Http/Controllers/PHP/PHPController.php index 9d4421e..68b8dc1 100644 --- a/app/Http/Controllers/PHP/PHPController.php +++ b/app/Http/Controllers/PHP/PHPController.php @@ -279,7 +279,7 @@ function unittesting(){ $pa = "vendor\bin\phpunit -c $path_test --filter HomepageLayoutTest::$unitesting_run"; $path = base_path($pa); $output = shell_exec($path); - //echo "
$output"; + echo "
$pa"; $sql = DB::select("SELECT * FROM php_testing_rule WHERE testing_name = '$testing_number_one'"); $row = $sql[0]; diff --git a/app/Http/Controllers/PHP/Student/WelcomeController.php b/app/Http/Controllers/PHP/Student/WelcomeController.php index ee5829e..dc0bdbb 100644 --- a/app/Http/Controllers/PHP/Student/WelcomeController.php +++ b/app/Http/Controllers/PHP/Student/WelcomeController.php @@ -51,17 +51,22 @@ function result_test(){ "); $row = $sql[0]; - $html2 = htmlspecialchars($row->ket); + $html2 = htmlspecialchars($row->output); $test = str_replace(array("\r\n","\r","\n"," "),"",$html2); - $result_content2 = str_replace(array("\r\n","\r"," "),"", $test); + + $studentFile = storage_path('app/public/uploads/Amal Dermawan Udjir/GuideA2.php'); + ob_start(); + include $studentFile; // Jalankan file PHP siswa + $studentOutput = ob_get_clean(); // Tangkap hasil output yang dihasilkan oleh kode siswa + $result_content = str_replace(array("\r\n","\r"," "),"", $studentOutput); /* $actual = storage_path("app/private/{$username}/{$userfile}"); $php_output = shell_exec("PHP $actual 2>&1"); $test = str_replace(array("\r\n","\r","\n"," "),"",highlight_string($php_output)); */ return view('php.student.task.result_submssion_task',[ - 'result_up' => $html2, + 'result_up' => $result_content, ]); // echo "$value == $sess_name"; diff --git a/tests/Unit/HomepageLayoutTest.php b/tests/Unit/HomepageLayoutTest.php index 5d6cff7..e50496c 100644 --- a/tests/Unit/HomepageLayoutTest.php +++ b/tests/Unit/HomepageLayoutTest.php @@ -30,21 +30,44 @@ public function testLatihanNumberOne():void{ } public function testLatihanNumberTwo():void{ - - - $response = $this->get("/phpunit/result-test-student/"); - - $sql = DB::select("SELECT * FROM php_testing_rule WHERE testing_name = 'testing_number_two'"); + $sql = DB::select("SELECT * FROM php_testing_rule WHERE testing_name = 'testing_number_two'"); $row = $sql[0]; $html = $row->testing_rule; - - $test = str_replace(array("\r\n","\r","\n"," "),"",$html); - $result_test = htmlspecialchars($test); - - $result_content = str_replace(array("\r\n","\r"," "),"", $response->content()); - $this->assertStringContainsString($result_test, $result_content); - + $output = $row->output; + + + $studentFile = storage_path('app/public/uploads/Amal Dermawan Udjir/GuideA2.php'); + if (!file_exists($studentFile)) { + $this->fail("❌ File siswa tidak ditemukan: $studentFile"); + return; + } + // Ambil isi file PHP siswa + $studentCode = file_get_contents($studentFile); + + // Normalisasi kunci jawaban dan kode siswa untuk perbandingan + $normalizedHtml = $this->normalize($html); // Normalisasi kode kunci jawaban + $normalizedStudentCode = $this->normalize($studentCode); // Normalisasi kode siswa + if ($normalizedHtml === $normalizedStudentCode) { + // Jika kode siswa sesuai dengan kunci jawaban + $this->assertEquals( + $normalizedHtml, + $normalizedStudentCode, + "Struktur kode yang dikirim siswa tidak sesuai dengan kunci jawaban." + ); + } else { + // Jika struktur kode tidak sesuai, periksa output dari respons HTTP + $response = $this->get("/phpunit/result-test-student/"); + $actualOutput = $response->content(); + // Bandingkan output yang diterima dengan output yang diharapkan + $this->assertEquals( + trim($output), + trim($actualOutput), + "Output dari respons HTTP tidak sesuai dengan output kunci jawaban." + ); + } + + } @@ -184,4 +207,24 @@ public function add($a, $b): int { return $a + $b; } + private function normalize($string): string + { + return preg_replace('/\s+/', '', $string); // hilangkan semua spasi, tab, newline + } + // Fungsi untuk mengganti nama variabel dengan placeholder + private function normalizeVariables(string $code): string + { + // Menangkap nama variabel menggunakan ekspresi regular + preg_match_all('/\$(\w+)/', $code, $matches); + + // Membuat daftar variabel unik + $uniqueVariables = array_unique($matches[1]); + + // Gantikan nama variabel dengan placeholder dinamis + foreach ($uniqueVariables as $index => $variable) { + $code = str_replace('$' . $variable, '$var' . $index, $code); // Ganti variabel dengan placeholder + } + + return $code; + } }