/*
 * Copyright 2013-2016 Grzegorz Ligas <ligasgr@gmail.com> and other contributors
 * (see the CONTRIBUTORS file).
 *
 * 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 org.intellij.xquery.runner.rt.xqj;

import org.basex.BaseXServer;
import org.intellij.xquery.runner.rt.RunnerAppTest;
import org.intellij.xquery.runner.rt.XQueryDataSourceType;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.experimental.theories.DataPoints;

import java.io.File;

import static org.intellij.xquery.runner.rt.XQueryItemType.TEXT;
import static org.intellij.xquery.runner.rt.XQueryItemType.XS_BYTE;
import static org.intellij.xquery.runner.rt.XQueryItemType.XS_DURATION;
import static org.intellij.xquery.runner.rt.XQueryItemType.XS_LANGUAGE;
import static org.intellij.xquery.runner.rt.XQueryItemType.XS_NORMALIZED_STRING;
import static org.intellij.xquery.runner.rt.XQueryItemType.XS_TOKEN;
import static org.intellij.xquery.runner.rt.XQueryItemType.XS_UNTYPED_ATOMIC;
import static org.intellij.xquery.runner.rt.XQueryRunConfigBuilder.runConfig;

public class BaseXRunnerAppTest extends RunnerAppTest {
    private static BaseXServer server;

    @BeforeClass
    public static void startServer() throws Exception {
        server = new BaseXServer();
    }

    @AfterClass
    public static void stopServer() throws Exception {
        server.stop();
    }

    @DataPoints
    public static DataPair[] getBaseXCompatibleData() {
        return new DataPair[]{
                DataPair.pair(XS_DURATION, "P3Y6M4DT12H30M5S"),
                DataPair.pair(XS_BYTE, "32"),
                DataPair.pair(XS_NORMALIZED_STRING, VALUE),
                DataPair.pair(XS_TOKEN, VALUE),
                DataPair.pair(XS_LANGUAGE, VALUE),
                DataPair.pair(XS_UNTYPED_ATOMIC, VALUE),
                DataPair.pair(TEXT, VALUE),
        };
    }

    @Override
    protected String getDataSourceType() {
        return XQueryDataSourceType.BASEX.toString();
    }


    protected String prepareConfigurationForMainFile(File xqueryMainFile) {
        return runConfig()
                .withTypeName(getDataSourceType())
                .withMainFileName(xqueryMainFile.getAbsolutePath())
                .withConnectionData("localhost", "1984", "admin", "admin")
                .build();
    }

    protected String prepareConfigurationWithContextItemForMainFile(File xqueryMainFile, String contextItemValue,
                                                                    String contextItemType) {
        return runConfig()
                .withTypeName(getDataSourceType())
                .withMainFileName(xqueryMainFile.getAbsolutePath())
                .withContextItemType(contextItemType)
                .withContextItemValue(contextItemValue)
                .withConnectionData("localhost", "1984", "admin", "admin")
                .build();
    }

    protected String prepareConfigurationWithVariableForMainFile(File xqueryMainFile, String value, String type) {
        return runConfig()
                .withTypeName(getDataSourceType())
                .withMainFileName(xqueryMainFile.getAbsolutePath())
                .withVariable("v", value, type)
                .withConnectionData("localhost", "1984", "admin", "admin")
                .build();
    }
}

@@ -17,17 +17,17 @@
 2013-201
-6
+7
  Grzegor
@@ -712,16 +712,46 @@
 t.xqj;%0A%0A
+import org.basex.BaseXClient;%0A
 import o
@@ -1801,24 +1801,118 @@
 eXServer();%0A
+        new BaseXClient(new String%5B%5D %7B%22-U%22, %22admin%22, %22-P%22, %22admin%22, %22-c%22, %22CREATE DB test%22%7D);%0A
     %7D%0A%0A    @
@@ -2906,32 +2906,70 @@
 dmin%22, %22admin%22)%0A
+                .withDatabase(%22test%22)%0A
                 
@@ -3516,32 +3516,70 @@
 dmin%22, %22admin%22)%0A
+                .withDatabase(%22test%22)%0A
                 
@@ -3900,24 +3900,24 @@
 alue, type)%0A
-
             
@@ -3971,32 +3971,70 @@
 dmin%22, %22admin%22)%0A
+                .withDatabase(%22test%22)%0A
                 

Add command that creates test DB so that message from lang_en.txt does not have to be fetched (prevents failure).