| ''' |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| ''' |
| |
| import pexpect |
| |
| |
| class TestConsole(object): |
| |
| # the base command must pass -C because if colors are enabled pexpect gets garbled input and tests won't pass |
| gremlinsh = "bash gremlin-console/bin/gremlin.sh -C " |
| |
| def test_basic_console_operations(self): |
| child = pexpect.spawn(TestConsole.gremlinsh) |
| TestConsole._expect_gremlin_header(child) |
| TestConsole._send(child, "1-1") |
| child.expect("==>0\r\n") |
| TestConsole._expect_prompt(child) |
| TestConsole._close(child) |
| |
| def test_just_dash_i(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "-i x.script") |
| TestConsole._expect_gremlin_header(child) |
| TestConsole._send(child, "x") |
| child.expect("==>2\r\n") |
| TestConsole._expect_prompt(child) |
| TestConsole._close(child) |
| |
| def test_just_dash_dash_interactive(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "--interactive x.script") |
| TestConsole._expect_gremlin_header(child) |
| TestConsole._send(child, "x") |
| child.expect("==>2\r\n") |
| TestConsole._expect_prompt(child) |
| TestConsole._close(child) |
| |
| def test_dash_i_with_args(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "-i y.script 1 2 3") |
| TestConsole._expect_gremlin_header(child) |
| TestConsole._send(child, "y") |
| child.expect("==>6\r\n") |
| TestConsole._expect_prompt(child) |
| TestConsole._close(child) |
| |
| def test_dash_dash_interactive_with_args(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "--interactive y.script 1 2 3") |
| TestConsole._expect_gremlin_header(child) |
| TestConsole._send(child, "y") |
| child.expect("==>6\r\n") |
| TestConsole._expect_prompt(child) |
| TestConsole._close(child) |
| |
| def test_dash_dash_interactive_with_args_and_equals(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "--interactive=\"y.script 1 2 3\"") |
| TestConsole._expect_gremlin_header(child) |
| TestConsole._send(child, "y") |
| child.expect("==>6\r\n") |
| TestConsole._expect_prompt(child) |
| TestConsole._close(child) |
| |
| def test_dash_i_multiple_scripts(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "-i y.script 1 2 3 -i x.script -i \"z.script x -i = --color -D\"") |
| TestConsole._expect_gremlin_header(child) |
| TestConsole._send(child, "y") |
| child.expect("==>6\r\n") |
| TestConsole._expect_prompt(child) |
| TestConsole._send(child, "x") |
| child.expect("==>2\r\n") |
| TestConsole._expect_prompt(child) |
| TestConsole._send(child, "z") |
| child.expect("==>argument=\\[x, -i, =, --color, -D\\]\r\n") |
| TestConsole._expect_prompt(child) |
| TestConsole._close(child) |
| |
| def test_dash_dash_interactive_multiple_scripts(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "--interactive y.script 1 2 3 --interactive x.script -i \"z.script x -i = --color -D\"") |
| TestConsole._expect_gremlin_header(child) |
| TestConsole._send(child, "y") |
| child.expect("==>6\r\n") |
| TestConsole._expect_prompt(child) |
| TestConsole._send(child, "x") |
| child.expect("==>2\r\n") |
| TestConsole._expect_prompt(child) |
| TestConsole._send(child, "z") |
| child.expect("==>argument=\\[x, -i, =, --color, -D\\]\r\n") |
| TestConsole._expect_prompt(child) |
| TestConsole._close(child) |
| |
| def test_mixed_interactive_long_short_opts_with_multiple_scripts(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "--interactive y.script 1 2 3 --interactive x.script -i \"z.script x -i = --color -D\"") |
| TestConsole._expect_gremlin_header(child) |
| TestConsole._send(child, "y") |
| child.expect("==>6\r\n") |
| TestConsole._expect_prompt(child) |
| TestConsole._send(child, "x") |
| child.expect("==>2\r\n") |
| TestConsole._expect_prompt(child) |
| TestConsole._send(child, "z") |
| child.expect("==>argument=\\[x, -i, =, --color, -D\\]\r\n") |
| TestConsole._expect_prompt(child) |
| TestConsole._close(child) |
| |
| def test_just_dash_e(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "-e x-printed.script") |
| child.expect("2\r\n") |
| TestConsole._close(child) |
| |
| def test_just_dash_e_file_not_found(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "-e=x-printed.script") |
| child.expect("Gremlin file not found at \\[=x-printed.script\\]\\.\r\n") |
| child.expect(pexpect.EOF) |
| |
| def test_just_dash_dash_execute(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "--execute x-printed.script") |
| child.expect("2\r\n") |
| TestConsole._close(child) |
| |
| def test_dash_e_with_args(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "-e y-printed.script 1 2 3") |
| child.expect("6\r\n") |
| TestConsole._close(child) |
| |
| def test_dash_dash_execute_with_args(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "--execute y-printed.script 1 2 3") |
| child.expect("6\r\n") |
| TestConsole._close(child) |
| |
| def test_dash_e_multiple_scripts(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "-e y-printed.script 1 2 3 -e x-printed.script -e \"z-printed.script x -e = --color -D\"") |
| child.expect("6\r\n") |
| child.expect("2\r\n") |
| child.expect("argument=\\[x, -e, =, --color, -D\\]\r\n") |
| TestConsole._close(child) |
| |
| def test_dash_dash_execute_multiple_scripts(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "--execute y-printed.script 1 2 3 --execute x-printed.script --execute \"z-printed.script x -e = --color -D\"") |
| child.expect("6\r\n") |
| child.expect("2\r\n") |
| child.expect("argument=\\[x, -e, =, --color, -D\\]\r\n") |
| TestConsole._close(child) |
| |
| def test_mixed_execute_long_short_opts_with_multiple_scripts(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "--execute y-printed.script 1 2 3 -e x-printed.script --execute \"z-printed.script x -e = --color -D\"") |
| child.expect("6\r\n") |
| child.expect("2\r\n") |
| child.expect("argument=\\[x, -e, =, --color, -D\\]\r\n") |
| TestConsole._close(child) |
| |
| def test_no_mix_dash_i_and_dash_e(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "-i y.script 1 2 3 -i x.script -e \"z.script x -i --color -D\"") |
| child.expect("-i and -e options are mutually exclusive - provide one or the other") |
| child.expect(pexpect.EOF) |
| |
| def test_debug_logging(self): |
| child = pexpect.spawn(TestConsole.gremlinsh + "-l DEBUG --execute y-printed.script 1 2 3") |
| child.expect("6\r\n") |
| TestConsole._close(child) |
| |
| @staticmethod |
| def _expect_gremlin_header(child): |
| # skip/read the Gremlin graphics |
| child.expect("\r\n") |
| child.expect(["plugin activated: tinkerpop.remote", "plugin activated: tinkerpop.utilities", "plugin activated: tinkerpop.tinkergraph"]) |
| child.expect(["plugin activated: tinkerpop.remote", "plugin activated: tinkerpop.utilities", "plugin activated: tinkerpop.tinkergraph"]) |
| child.expect(["plugin activated: tinkerpop.remote", "plugin activated: tinkerpop.utilities", "plugin activated: tinkerpop.tinkergraph"]) |
| TestConsole._expect_prompt(child) |
| |
| @staticmethod |
| def _send(child, line): |
| child.sendline(line) |
| child.expect(line + "\r\n") |
| |
| @staticmethod |
| def _expect_prompt(child): |
| child.expect("gremlin> ") |
| |
| @staticmethod |
| def _close(child): |
| child.sendline(":x") |