def test_stream_wrong_code(self): s = open('tests/resources/qwerty') stream = prologio.Stream(s) stream.stream_term = Compound('$stream', Atomic(999)) prologio.stream_terms[str(stream.stream_term)] = stream # FIXME Single quotes are not preserved in atoms self.assertFalse(self.engine.solve("peek_code('$stream'(999), 0'p).")) self.assertEquals('qwerty', s.read()) del prologio.stream_terms[str(stream.stream_term)]
def test_end_of_stream(self): s = open('tests/resources/editor') stream = prologio.Stream(s) stream.stream_term = Compound('$stream', Atomic(999)) prologio.stream_terms[str(stream.stream_term)] = stream # FIXME Single quotes are not preserved in atoms self.assertTrue(self.engine.solve("peek_code('$stream'(999), Code).")) self.assertEquals(Atomic(-1), self.engine.currsubst()['Code']) del prologio.stream_terms[str(stream.stream_term)]
def test_current_input_stream_code(self): s = open('tests/resources/qwerty') stream = prologio.Stream(s) old_current_input_stream = prologio.current_input_stream prologio.current_input_stream = stream self.assertTrue(self.engine.solve('peek_code(Code).')) self.assertEquals(Atomic(113), self.engine.currsubst()['Code']) self.assertEquals('qwerty', s.read()) prologio.current_input_stream = old_current_input_stream
def test_current_input_stream_char(self): s = open('tests/resources/qwerty') stream = prologio.Stream(s) old_current_input_stream = prologio.current_input_stream prologio.current_input_stream = stream self.assertTrue(self.engine.solve('get_char(Char).')) self.assertEquals(Atomic('q'), self.engine.currsubst()['Char']) self.assertEquals('werty', s.read()) prologio.current_input_stream = old_current_input_stream
def test_wrong_term(self): s = StringIO('3.1. term2.') s.name = 'terms' s.fileno = lambda: 999 stream = prologio.Stream(s) old_current_input_stream = prologio.current_input_stream prologio.current_input_stream = stream self.assertFalse(self.engine.solve('read(4.1).')) self.assertEquals('term2.', s.read()) prologio.current_input_stream = old_current_input_stream
def test_stream_quote(self): s = open('tests/resources/quoted_qwerty') stream = prologio.Stream(s) stream.stream_term = Compound('$stream', Atomic(999)) prologio.stream_terms[str(stream.stream_term)] = stream # FIXME Single quotes are not preserved in atoms self.assertTrue(self.engine.solve("peek_char('$stream'(999), Char).")) self.assertEquals(Atomic("'"), self.engine.currsubst()['Char']) self.assertEquals("'qwerty'", s.read()) del prologio.stream_terms[str(stream.stream_term)]
def test_stream_code(self): s = open('tests/resources/qwerty') stream = prologio.Stream(s) stream.stream_term = Compound('$stream', Atomic(999)) prologio.stream_terms[str(stream.stream_term)] = stream # FIXME Single quotes are not preserved in atoms self.assertTrue(self.engine.solve("get_code('$stream'(999), Code).")) self.assertEquals(Atomic(113), self.engine.currsubst()['Code']) self.assertEquals('werty', s.read()) del prologio.stream_terms[str(stream.stream_term)]
def test_term_from_stream(self): s = StringIO('term1. term2.') s.name = 'terms' s.fileno = lambda: 999 stream = prologio.Stream(s) prologio.stream_terms[str(stream.stream_term)] = stream # FIXME Single quotes are not preserved in atoms self.assertTrue(self.engine.solve("read('$stream'(999), term1).")) self.assertEquals('term2.', s.read()) del prologio.stream_terms[str(stream.stream_term)]
def test_end_of_stream(self): s = open('tests/resources/editor') stream = prologio.Stream(s) stream.stream_term = Compound('$stream', Atomic(999)) prologio.stream_terms[str(stream.stream_term)] = stream # FIXME Single quotes are not preserved in atoms self.assertTrue(self.engine.solve("get_char('$stream'(999), Char).")) self.assertEquals(Atomic('end_of_file'), self.engine.currsubst()['Char']) # The stream-position past-end-of-stream is not supported del prologio.stream_terms[str(stream.stream_term)]
def test_quoted_atom_with_quotes(self): s = StringIO() s.name = 'quoted_atom' s.fileno = lambda: 999 stream = prologio.Stream(s, mode='w') prologio.stream_terms[str(stream.stream_term)] = stream # FIXME Single quotes are not preserved in atoms self.assertTrue(self.engine.solve("writeq('$stream'(999), '1<2').")) s.seek(0) self.assertEquals("'1<2'", s.read()) del prologio.stream_terms[str(stream.stream_term)]
def test_list(self): s = StringIO() s.name = 'list' s.fileno = lambda: 999 stream = prologio.Stream(s, mode='w') prologio.stream_terms[str(stream.stream_term)] = stream # FIXME Single quotes are not preserved in atoms self.assertTrue(self.engine.solve("write('$stream'(999), [1,2,3]).")) s.seek(0) self.assertEquals('[1,2,3]', s.read()) del prologio.stream_terms[str(stream.stream_term)]
def test_term_from_current_input_stream(self): s = StringIO('term1. term2.') s.name = 'terms' s.fileno = lambda: 999 stream = prologio.Stream(s) old_current_input_stream = prologio.current_input_stream prologio.current_input_stream = stream self.assertTrue(self.engine.solve('read(T).')) self.assertEquals(Atomic('term1'), self.engine.currsubst()['T']) self.assertEquals('term2.', s.read()) prologio.current_input_stream = old_current_input_stream
def test_term_without_end_token(self): s = StringIO('3.1') s.name = 'terms' s.fileno = lambda: 999 stream = prologio.Stream(s) old_current_input_stream = prologio.current_input_stream prologio.current_input_stream = stream goal = "read(T)." caught = self.assertRaises(PrologError, self.engine.solve, goal) self.assertEquals('syntax_error', caught.error_term().value[0]) self.assertEquals('', s.read()) prologio.current_input_stream = old_current_input_stream
def test_current_output_stream_newline_and_char(self): s = StringIO('qwer') s.seek(4) s.name = 'qwer' s.fileno = lambda: 999 stream = prologio.Stream(s, mode='w') old_current_output_stream = prologio.current_output_stream prologio.current_output_stream = stream self.assertTrue(self.engine.solve('nl, put_char(a).')) s.seek(0) self.assertEquals('qwer\na', s.read()) prologio.current_output_stream = old_current_output_stream
def test_current_output_stream_code(self): s = StringIO('qwer') s.seek(4) s.name = 'qwer' s.fileno = lambda: 999 stream = prologio.Stream(s, mode='w') old_current_output_stream = prologio.current_output_stream prologio.current_output_stream = stream self.assertTrue(self.engine.solve("put_code(0't).")) s.seek(0) self.assertEquals('qwert', s.read()) prologio.current_output_stream = old_current_output_stream
def test_stream_code(self): s = StringIO('qwer') s.seek(4) s.name = 'qwer' s.fileno = lambda: 999 stream = prologio.Stream(s, mode='w') prologio.stream_terms[str(stream.stream_term)] = stream # FIXME Single quotes are not preserved in atoms self.assertTrue(self.engine.solve("put_code('$stream'(999), 0't).")) s.seek(0) self.assertEquals('qwert', s.read()) del prologio.stream_terms[str(stream.stream_term)]
def test_stream_newline_and_char(self): s = StringIO('qwer') s.seek(4) s.name = 'qwer' s.fileno = lambda: 999 stream = prologio.Stream(s, mode='w') prologio.stream_terms[str(stream.stream_term)] = stream # FIXME Single quotes are not preserved in atoms goal = "nl('$stream'(999)), put_char('$stream'(999), a)." self.assertTrue(self.engine.solve(goal)) s.seek(0) self.assertEquals('qwer\na', s.read()) del prologio.stream_terms[str(stream.stream_term)]