summaryrefslogtreecommitdiffstats
path: root/gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java')
-rw-r--r--gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java187
1 files changed, 0 insertions, 187 deletions
diff --git a/gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java b/gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java
deleted file mode 100644
index c0a21927a6..0000000000
--- a/gerrit-server/src/test/java/com/google/gerrit/rules/PrologTestCase.java
+++ /dev/null
@@ -1,187 +0,0 @@
-// Copyright (C) 2011 The Android Open Source Project
-//
-// Licensed 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.
-
-package com.google.gerrit.rules;
-
-import static com.google.common.truth.Truth.assertThat;
-import static com.google.common.truth.Truth.assertWithMessage;
-import static java.nio.charset.StandardCharsets.UTF_8;
-
-import com.google.gerrit.common.TimeUtil;
-import com.google.gerrit.testutil.GerritBaseTests;
-import com.google.inject.Guice;
-import com.google.inject.Module;
-import com.googlecode.prolog_cafe.exceptions.CompileException;
-import com.googlecode.prolog_cafe.lang.BufferingPrologControl;
-import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
-import com.googlecode.prolog_cafe.lang.Prolog;
-import com.googlecode.prolog_cafe.lang.PrologClassLoader;
-import com.googlecode.prolog_cafe.lang.PrologMachineCopy;
-import com.googlecode.prolog_cafe.lang.StructureTerm;
-import com.googlecode.prolog_cafe.lang.SymbolTerm;
-import com.googlecode.prolog_cafe.lang.Term;
-import com.googlecode.prolog_cafe.lang.VariableTerm;
-import java.io.BufferedReader;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PushbackReader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/** Base class for any tests written in Prolog. */
-public abstract class PrologTestCase extends GerritBaseTests {
- private static final SymbolTerm test_1 = SymbolTerm.intern("test", 1);
-
- private String pkg;
- private boolean hasSetup;
- private boolean hasTeardown;
- private List<Term> tests;
- protected PrologMachineCopy machine;
- protected PrologEnvironment.Factory envFactory;
-
- protected void load(String pkg, String prologResource, Module... modules)
- throws CompileException, IOException {
- ArrayList<Module> moduleList = new ArrayList<>();
- moduleList.add(new PrologModule.EnvironmentModule());
- moduleList.addAll(Arrays.asList(modules));
-
- envFactory = Guice.createInjector(moduleList).getInstance(PrologEnvironment.Factory.class);
- PrologEnvironment env = envFactory.create(newMachine());
- consult(env, getClass(), prologResource);
-
- this.pkg = pkg;
- hasSetup = has(env, "setup");
- hasTeardown = has(env, "teardown");
-
- StructureTerm head =
- new StructureTerm(
- ":", SymbolTerm.intern(pkg), new StructureTerm(test_1, new VariableTerm()));
-
- tests = new ArrayList<>();
- for (Term[] pair : env.all(Prolog.BUILTIN, "clause", head, new VariableTerm())) {
- tests.add(pair[0]);
- }
- assertThat(tests).isNotEmpty();
- machine = PrologMachineCopy.save(env);
- }
-
- /**
- * Set up the Prolog environment.
- *
- * @param env Prolog environment.
- */
- protected void setUpEnvironment(PrologEnvironment env) throws Exception {}
-
- private PrologMachineCopy newMachine() {
- BufferingPrologControl ctl = new BufferingPrologControl();
- ctl.setMaxDatabaseSize(16 * 1024);
- ctl.setPrologClassLoader(new PrologClassLoader(getClass().getClassLoader()));
- return PrologMachineCopy.save(ctl);
- }
-
- protected void consult(BufferingPrologControl env, Class<?> clazz, String prologResource)
- throws CompileException, IOException {
- try (InputStream in = clazz.getResourceAsStream(prologResource)) {
- if (in == null) {
- throw new FileNotFoundException(prologResource);
- }
- SymbolTerm pathTerm = SymbolTerm.create(prologResource);
- JavaObjectTerm inTerm =
- new JavaObjectTerm(
- new PushbackReader(
- new BufferedReader(new InputStreamReader(in, UTF_8)), Prolog.PUSHBACK_SIZE));
- if (!env.execute(Prolog.BUILTIN, "consult_stream", pathTerm, inTerm)) {
- throw new CompileException("Cannot consult " + prologResource);
- }
- }
- }
-
- private boolean has(BufferingPrologControl env, String name) {
- StructureTerm head = SymbolTerm.create(pkg, name, 0);
- return env.execute(Prolog.BUILTIN, "clause", head, new VariableTerm());
- }
-
- public void runPrologBasedTests() throws Exception {
- int errors = 0;
- long start = TimeUtil.nowMs();
-
- for (Term test : tests) {
- PrologEnvironment env = envFactory.create(machine);
- setUpEnvironment(env);
- env.setEnabled(Prolog.Feature.IO, true);
-
- System.out.format("Prolog %-60s ...", removePackage(test));
- System.out.flush();
-
- if (hasSetup) {
- call(env, "setup");
- }
-
- List<Term> all = env.all(Prolog.BUILTIN, "call", test);
-
- if (hasTeardown) {
- call(env, "teardown");
- }
-
- System.out.println(all.size() == 1 ? "OK" : "FAIL");
-
- if (all.size() > 0 && !test.equals(all.get(0))) {
- for (Term t : all) {
- Term head = ((StructureTerm) removePackage(t)).args()[0];
- Term[] args = ((StructureTerm) head).args();
- System.out.print(" Result: ");
- for (int i = 0; i < args.length; i++) {
- if (0 < i) {
- System.out.print(", ");
- }
- System.out.print(args[i]);
- }
- System.out.println();
- }
- System.out.println();
- }
-
- if (all.size() != 1) {
- errors++;
- }
- }
-
- long end = TimeUtil.nowMs();
- System.out.println("-------------------------------");
- System.out.format(
- "Prolog tests: %d, Failures: %d, Time elapsed %.3f sec",
- tests.size(), errors, (end - start) / 1000.0);
- System.out.println();
-
- assertThat(errors).isEqualTo(0);
- }
-
- private void call(BufferingPrologControl env, String name) {
- StructureTerm head = SymbolTerm.create(pkg, name, 0);
- assertWithMessage("Cannot invoke " + pkg + ":" + name)
- .that(env.execute(Prolog.BUILTIN, "call", head))
- .isTrue();
- }
-
- private Term removePackage(Term test) {
- Term name = test;
- if (name instanceof StructureTerm && ":".equals(name.name())) {
- name = name.arg(1);
- }
- return name;
- }
-}