You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

161 lines
5.3 KiB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
  1. from django.test import TestCase
  2. from django.core.exceptions import ValidationError
  3. from django.db.utils import IntegrityError
  4. from mixer.backend.django import mixer
  5. from ..models import Label, DocumentAnnotation, SequenceAnnotation, Seq2seqAnnotation
  6. from ..serializers import DocumentAnnotationSerializer
  7. from ..serializers import SequenceAnnotationSerializer
  8. from ..serializers import Seq2seqAnnotationSerializer
  9. class TestTextClassificationProject(TestCase):
  10. @classmethod
  11. def setUpTestData(cls):
  12. cls.project = mixer.blend('server.TextClassificationProject')
  13. def test_image(self):
  14. image_url = self.project.image
  15. self.assertTrue(image_url.endswith('.jpg'))
  16. def test_get_template_name(self):
  17. template = self.project.get_template_name()
  18. self.assertEqual(template, 'annotation/document_classification.html')
  19. def test_get_annotation_serializer(self):
  20. serializer = self.project.get_annotation_serializer()
  21. self.assertEqual(serializer, DocumentAnnotationSerializer)
  22. def test_get_annotation_class(self):
  23. klass = self.project.get_annotation_class()
  24. self.assertEqual(klass, DocumentAnnotation)
  25. class TestSequenceLabelingProject(TestCase):
  26. @classmethod
  27. def setUpTestData(cls):
  28. cls.project = mixer.blend('server.SequenceLabelingProject')
  29. def test_image(self):
  30. image_url = self.project.image
  31. self.assertTrue(image_url.endswith('.jpg'))
  32. def test_get_template_name(self):
  33. template = self.project.get_template_name()
  34. self.assertEqual(template, 'annotation/sequence_labeling.html')
  35. def test_get_annotation_serializer(self):
  36. serializer = self.project.get_annotation_serializer()
  37. self.assertEqual(serializer, SequenceAnnotationSerializer)
  38. def test_get_annotation_class(self):
  39. klass = self.project.get_annotation_class()
  40. self.assertEqual(klass, SequenceAnnotation)
  41. class TestSeq2seqProject(TestCase):
  42. @classmethod
  43. def setUpTestData(cls):
  44. cls.project = mixer.blend('server.Seq2seqProject')
  45. def test_image(self):
  46. image_url = self.project.image
  47. self.assertTrue(image_url.endswith('.jpg'))
  48. def test_get_template_name(self):
  49. template = self.project.get_template_name()
  50. self.assertEqual(template, 'annotation/seq2seq.html')
  51. def test_get_annotation_serializer(self):
  52. serializer = self.project.get_annotation_serializer()
  53. self.assertEqual(serializer, Seq2seqAnnotationSerializer)
  54. def test_get_annotation_class(self):
  55. klass = self.project.get_annotation_class()
  56. self.assertEqual(klass, Seq2seqAnnotation)
  57. class TestLabel(TestCase):
  58. def test_shortcut_uniqueness(self):
  59. label = mixer.blend('server.Label', shortcut='a')
  60. mixer.blend('server.Label', shortcut=label.shortcut)
  61. with self.assertRaises(IntegrityError):
  62. Label(project=label.project, shortcut=label.shortcut).save()
  63. def test_create_none_shortcut(self):
  64. label = mixer.blend('server.Label', shortcut=None)
  65. self.assertEqual(label.shortcut, None)
  66. def test_text_uniqueness(self):
  67. label = mixer.blend('server.Label')
  68. mixer.blend('server.Label', text=label.text)
  69. with self.assertRaises(IntegrityError):
  70. Label(project=label.project, text=label.text).save()
  71. class TestTextClassificationDocument(TestCase):
  72. @classmethod
  73. def setUpTestData(cls):
  74. cls.doc = mixer.blend('server.TextClassificationDocument')
  75. def test_get_annotations(self):
  76. self.assertEqual(self.doc.get_annotations().count(), 0)
  77. class TestSequenceLabelingDocument(TestCase):
  78. @classmethod
  79. def setUpTestData(cls):
  80. cls.doc = mixer.blend('server.SequenceLabelingDocument')
  81. def test_get_annotations(self):
  82. self.assertEqual(self.doc.get_annotations().count(), 0)
  83. class TestSeq2seqDocument(TestCase):
  84. @classmethod
  85. def setUpTestData(cls):
  86. cls.doc = mixer.blend('server.Seq2seqDocument')
  87. def test_get_annotations(self):
  88. self.assertEqual(self.doc.get_annotations().count(), 0)
  89. class TestDocumentAnnotation(TestCase):
  90. def test_uniqueness(self):
  91. a = mixer.blend('server.DocumentAnnotation')
  92. with self.assertRaises(IntegrityError):
  93. DocumentAnnotation(document=a.document, user=a.user, label=a.label).save()
  94. class TestSequenceAnnotation(TestCase):
  95. def test_uniqueness(self):
  96. a = mixer.blend('server.SequenceAnnotation')
  97. with self.assertRaises(IntegrityError):
  98. SequenceAnnotation(document=a.document,
  99. user=a.user,
  100. label=a.label,
  101. start_offset=a.start_offset,
  102. end_offset=a.end_offset).save()
  103. def test_position_constraint(self):
  104. with self.assertRaises(ValidationError):
  105. mixer.blend('server.SequenceAnnotation',
  106. start_offset=1, end_offset=0).clean()
  107. class TestSeq2seqAnnotation(TestCase):
  108. def test_uniqueness(self):
  109. a = mixer.blend('server.Seq2seqAnnotation')
  110. with self.assertRaises(IntegrityError):
  111. Seq2seqAnnotation(document=a.document,
  112. user=a.user,
  113. text=a.text).save()