def setUp(self): super().setUp() self.content = "def bar():\n"\ " print('qux')\n" with open("foo.py", "w") as f: f.write(self.content) self.file = data.Submission(".", ["foo.py"]).files[0]
def test_first_span_missing(self): missing_tokens = [] def preprocessor(tokens): missing_tokens.append(tokens[0]) return tokens[1:] self.file = data.Submission(".", ["foo.py"], preprocessor=preprocessor).files[0] spans = api.missing_spans(self.file) resulting_span = self.span(0, missing_tokens[0].end) self.assertEqual(spans, [resulting_span])
def test_last_span_missing(self): missing_tokens = [] def preprocessor(tokens): missing_tokens.append(tokens[-1]) return tokens[:-1] self.file = data.Submission(".", ["foo.py"], preprocessor=preprocessor).files[0] spans = api.missing_spans(self.file) resulting_span = self.span(missing_tokens[0].start, len(self.content)) self.assertEqual(spans, [resulting_span])
def setUp(self): self.working_directory = tempfile.TemporaryDirectory() self._wd = os.getcwd() os.chdir(self.working_directory.name) self.content = "def bar():\n"\ " print('qux')\n" with open("foo.py", "w") as f: f.write(self.content) self.file = data.Submission(".", ["foo.py"]).files[0]
def test_middle_span_missing(self): missing_tokens = [] def preprocessor(tokens): middle = len(tokens) // 2 missing_tokens.append(tokens[middle]) return tokens[:middle] + tokens[middle + 1:] self.file = data.Submission(".", ["foo.py"], preprocessor=preprocessor).files[0] spans = api.missing_spans(self.file) resulting_span = self.span(missing_tokens[0].start, missing_tokens[0].end) self.assertEqual(spans, [resulting_span])
def test_ignore_half(self): ignore_content = self.content.split("\n")[0] with open("ignore.py", "w") as f: f.write(ignore_content) ignored_file = data.Submission(".", ["ignore.py"]).files[0] ignored_index = winnowing.CompareIndex(k=2) ignored_index.include(ignored_file) relevant_token_lists = ignored_index.unignored_tokens(self.file) end = list(ignored_file.tokens())[-1].end expected_tokens = [t for t in self.file.tokens() if t.start >= end] self.assertEqual(len(relevant_token_lists), 1) self.assertEqual(relevant_token_lists[0], expected_tokens)
def span(self, start, end): file = data.Submission(".", ["bar/foo"]).files[0] return data.Span(file, start, end)
def test_all_spans_missing(self): self.file = data.Submission(".", ["foo.py"], preprocessor=lambda tokens: []).files[0] resulting_span = self.span(0, len(self.content)) spans = api.missing_spans(self.file) self.assertEqual(spans, [resulting_span])