BaseCodeTest.java 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package de.jplag;
  2. import static org.junit.jupiter.api.Assertions.assertEquals;
  3. import static org.junit.jupiter.api.Assertions.assertThrows;
  4. import java.io.File;
  5. import java.util.Set;
  6. import org.junit.jupiter.api.Test;
  7. import de.jplag.exceptions.BasecodeException;
  8. import de.jplag.exceptions.ExitException;
  9. import de.jplag.exceptions.RootDirectoryException;
  10. public class BaseCodeTest extends TestBase {
  11. @Test
  12. void testBasecodeUserSubmissionComparison() throws ExitException {
  13. JPlagResult result = runJPlag("basecode",
  14. it -> it.withBaseCodeSubmissionDirectory(new File(it.submissionDirectories().iterator().next(), "base")));
  15. verifyResults(result);
  16. }
  17. @Test
  18. void testTinyBasecode() {
  19. assertThrows(BasecodeException.class, () -> runJPlag("TinyBasecode",
  20. it -> it.withBaseCodeSubmissionDirectory(new File(it.submissionDirectories().iterator().next(), "base"))));
  21. }
  22. @Test
  23. void testEmptySubmission() throws ExitException {
  24. JPlagResult result = runJPlag("emptysubmission",
  25. it -> it.withBaseCodeSubmissionDirectory(new File(it.submissionDirectories().iterator().next(), "base")));
  26. verifyResults(result);
  27. }
  28. protected void verifyResults(JPlagResult result) {
  29. assertEquals(2, result.getNumberOfSubmissions());
  30. assertEquals(1, result.getAllComparisons().size());
  31. assertEquals(1, result.getAllComparisons().get(0).matches().size());
  32. assertEquals(1, result.getSimilarityDistribution()[8]);
  33. assertEquals(0.85, result.getAllComparisons().get(0).similarity(), DELTA);
  34. }
  35. @Test
  36. void testBasecodePathComparison() throws ExitException {
  37. JPlagResult result = runJPlag("basecode", it -> it.withBaseCodeSubmissionDirectory(new File(BASE_PATH, "basecode-base")));
  38. assertEquals(3, result.getNumberOfSubmissions()); // "basecode/base" is now a user submission.
  39. }
  40. @Test
  41. void testInvalidRoot() {
  42. assertThrows(RootDirectoryException.class, () -> runJPlag("basecode", it -> it.withSubmissionDirectories(Set.of(new File("WrongRoot")))));
  43. }
  44. @Test
  45. void testInvalidBasecode() {
  46. assertThrows(BasecodeException.class, () -> runJPlag("basecode",
  47. it -> it.withBaseCodeSubmissionDirectory(new File(it.submissionDirectories().iterator().next(), "WrongBasecode"))));
  48. }
  49. /**
  50. * The simple duplicate contains obvious plagiarism.
  51. */
  52. @Test
  53. void testSubdirectoryGlobalBasecode() throws ExitException {
  54. String basecode = getBasePath("SubdirectoryBase");
  55. JPlagResult result = runJPlag("SubdirectoryDuplicate",
  56. it -> it.withSubdirectoryName("src").withBaseCodeSubmissionDirectory(new File(basecode)));
  57. verifySimpleSubdirectoryDuplicate(result, 3, 3);
  58. }
  59. /**
  60. * The simple duplicate contains obvious plagiarism.
  61. */
  62. @Test
  63. void testSubdirectoryLocalBasecode() throws ExitException {
  64. JPlagResult result = runJPlag("SubdirectoryDuplicate",
  65. it -> it.withSubdirectoryName("src").withBaseCodeSubmissionDirectory(new File(it.submissionDirectories().iterator().next(), "Base")));
  66. verifySimpleSubdirectoryDuplicate(result, 2, 1);
  67. }
  68. protected void verifySimpleSubdirectoryDuplicate(JPlagResult result, int submissions, int comparisons) {
  69. result.getSubmissions().getSubmissions().forEach(this::hasSubdirectoryRoot);
  70. hasSubdirectoryRoot(result.getSubmissions().getBaseCode());
  71. assertEquals(submissions, result.getNumberOfSubmissions());
  72. assertEquals(comparisons, result.getAllComparisons().size());
  73. assertEquals(1, result.getAllComparisons().get(0).matches().size());
  74. assertEquals(1, result.getSimilarityDistribution()[6]);
  75. assertEquals(0.6207, result.getAllComparisons().get(0).similarity(), DELTA);
  76. }
  77. private void hasSubdirectoryRoot(Submission submission) {
  78. assertEquals("src", submission.getRoot().getName());
  79. }
  80. }