예제 #1
0
 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)]
예제 #2
0
 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)]
예제 #3
0
 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
예제 #4
0
 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
예제 #5
0
 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
예제 #6
0
 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)]
예제 #7
0
 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)]
예제 #8
0
 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)]
예제 #9
0
 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)]
예제 #10
0
 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)]
예제 #11
0
 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)]
예제 #12
0
 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
예제 #13
0
 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
예제 #14
0
 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
예제 #15
0
 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
예제 #16
0
 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)]
예제 #17
0
 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)]