diff --git a/src/sinol_make/commands/verify/__init__.py b/src/sinol_make/commands/verify/__init__.py index 76c4b4cc..37a1fad2 100644 --- a/src/sinol_make/commands/verify/__init__.py +++ b/src/sinol_make/commands/verify/__init__.py @@ -50,6 +50,12 @@ def configure_subparser(self, subparser): 'This flag will be passed to the run command.') parsers.add_time_tool_argument(parser) parsers.add_compilation_arguments(parser) + parser.add_argument('--no-gen', action='store_true', default=False, + help='do not generate tests') + parser.add_argument('--no-ingen', action='store_true', default=False, + help='do not generate input tests') + parser.add_argument('--no-outgen', action='store_true', default=False, + help='do not generate output tests') def correct_contest_type(self): if self.args.expected_contest_type is not None: @@ -151,10 +157,16 @@ def run(self, args: argparse.Namespace): self.run_stresstests() # Generate tests - print(util.bold(' Generating tests '.center(util.get_terminal_size()[1], '='))) - gen = GenCommand() - gen.run(self.prepare_args(gen)) - self.verify_scores(package_util.get_groups(package_util.get_all_inputs(self.task_id), self.task_id)) + if not self.args.no_gen and (not self.args.no_ingen or not self.args.no_outgen): + print(util.bold(' Generating tests '.center(util.get_terminal_size()[1], '='))) + gen = GenCommand() + args = self.prepare_args(gen) + if self.args.no_ingen: + args.only_outputs = True + if self.args.no_outgen: + args.only_inputs = True + gen.run(args) + self.verify_scores(package_util.get_groups(package_util.get_all_inputs(self.task_id), self.task_id)) # Generate problem statements print(util.bold(' Generating problem statements '.center(util.get_terminal_size()[1], '='))) diff --git a/tests/commands/verify/test_integration.py b/tests/commands/verify/test_integration.py index d6b39d9a..8402c6af 100644 --- a/tests/commands/verify/test_integration.py +++ b/tests/commands/verify/test_integration.py @@ -148,3 +148,29 @@ def test_expected_contest_and_no_scores(capsys, create_package): assert e.value.code == 1 out = capsys.readouterr().out assert "Scores are not defined in config.yml." in out + + +@pytest.mark.parametrize("create_package", [util.get_simple_package_path()], indirect=True) +def test_no_gen_parameters(capsys, create_package): + """ + Test if --no-gen, --no-ingen and --no-outgen flags work correctly. + """ + with pytest.raises(SystemExit) as e: + run(["--no-gen"]) + assert e.value.code == 1 + out = capsys.readouterr().out + assert "There are no tests to run." in out + assert not os.path.exists(os.path.join(create_package, "in", "abc2a.in")) + assert not os.path.exists(os.path.join(create_package, "out", "abc2a.out")) + + with pytest.raises(SystemExit) as e: + run(["--no-outgen"]) + assert e.value.code == 1 + out = capsys.readouterr().out + assert "There are tests without outputs." in out + assert os.path.exists(os.path.join(create_package, "in", "abc2a.in")) + assert not os.path.exists(os.path.join(create_package, "out", "abc2a.out")) + + run(["--no-ingen"]) + assert os.path.exists(os.path.join(create_package, "in", "abc2a.in")) + assert os.path.exists(os.path.join(create_package, "out", "abc2a.out"))