<commit_before>/**
 * Copyright (c) 2013-2014, jcabi.com
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met: 1) Redistributions of source code must retain the above
 * copyright notice, this list of conditions and the following
 * disclaimer. 2) Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following
 * disclaimer in the documentation and/or other materials provided
 * with the distribution. 3) Neither the name of the jcabi.com nor
 * the names of its contributors may be used to endorse or promote
 * products derived from this software without specific prior written
 * permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
 * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package com.jcabi.github;

import com.jcabi.github.mock.MkGithub;
import com.jcabi.http.mock.MkAnswer;
import com.jcabi.http.mock.MkContainer;
import com.jcabi.http.mock.MkGrizzlyContainer;
import com.jcabi.http.request.ApacheRequest;
import java.io.IOException;
import java.net.BindException;
import java.net.HttpURLConnection;
import javax.json.Json;
import javax.json.JsonObject;
import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
import org.junit.Assume;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.MethodRule;
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.Statement;

/**
 * Test case for {@link RtFork}.
 *
 * @author <NAME> (<EMAIL>)
 * @version $Id$
 * @checkstyle ClassDataAbstractionCouplingCheck (500 lines)
 */
public final class RtForkTest {

    @Rule
    public MethodRule skipRule = new MethodRule() {
        @Override
        public Statement apply(
            final Statement base, final FrameworkMethod method,
            final Object target
        ) {
            return new Statement() {
                @Override
                public void evaluate() throws Throwable {
                    try{
                        base.evaluate();
                    } catch (final BindException ignored) {
                        Assume.assumeTrue(false);
                    }
                }
            };
        }
    };

    /**
     * RtFork can patch comment and return new json.
     * @throws IOException if has some problems with json parsing.
     */
    @Test
    public void patchAndCheckJsonFork() throws IOException {
        final String original = "some organization";
        final String patched = "some patched organization";
        final MkContainer container =
            new MkGrizzlyContainer().next(this.answer(original))
                .next(this.answer(patched)).next(this.answer(original)).start();
        final MkContainer forksContainer = new MkGrizzlyContainer().start();
        final RtRepo repo =
            new RtRepo(
                new MkGithub(),
                new ApacheRequest(forksContainer.home()),
                new Coordinates.Simple("test_user", "test_repo")
            );
        final RtFork fork = new RtFork(
            new ApacheRequest(container.home()), repo, 1
        );
        fork.patch(RtForkTest.fork(patched));
        MatcherAssert.assertThat(
            new Fork.Smart(fork).organization(),
            Matchers.equalTo(patched)
        );
        MatcherAssert.assertThat(
            new Fork.Smart(fork).name(),
            Matchers.notNullValue()
        );
        container.stop();
        forksContainer.stop();
    }

    /**
     * Create and return success MkAnswer object to test.
     * @param organization The organization of the fork
     * @return Success MkAnswer
     */
    private MkAnswer.Simple answer(final String organization) {
        return new MkAnswer.Simple(
            HttpURLConnection.HTTP_OK,
            RtForkTest.fork(organization).toString()
        );
    }

    /**
     * Create and return JsonObject to test.
     * @param organization The organization of the fork
     * @return JsonObject
     */
    private static JsonObject fork(final String organization) {
        return Json.createObjectBuilder()
            .add("organization", organization)
            .add("name", "nm")
            .build();
    }
}<commit_msg>style<commit_after>/**
 * Copyright (c) 2013-2014, jcabi.com
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met: 1) Redistributions of source code must retain the above
 * copyright notice, this list of conditions and the following
 * disclaimer. 2) Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following
 * disclaimer in the documentation and/or other materials provided
 * with the distribution. 3) Neither the name of the jcabi.com nor
 * the names of its contributors may be used to endorse or promote
 * products derived from this software without specific prior written
 * permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
 * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package com.jcabi.github;

import com.jcabi.github.mock.MkGithub;
import com.jcabi.http.mock.MkAnswer;
import com.jcabi.http.mock.MkContainer;
import com.jcabi.http.mock.MkGrizzlyContainer;
import com.jcabi.http.request.ApacheRequest;
import com.jcabi.log.Logger;
import java.io.IOException;
import java.net.BindException;
import java.net.HttpURLConnection;
import javax.json.Json;
import javax.json.JsonObject;
import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
import org.junit.Assume;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.MethodRule;
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.Statement;

/**
 * Test case for {@link RtFork}.
 *
 * @author <NAME> (<EMAIL>)
 * @version $Id$
 * @checkstyle ClassDataAbstractionCouplingCheck (500 lines)
 */
public final class RtForkTest {
    /**
     * The rule for skipping test if there's BindException.
     * @todo 989 Apply this rule to other classes that use MkGrizzlyContainer
     *  to avoid tests fail with BindException.
     * @checkstyle VisibilityModifierCheck (3 lines)
     */
    @Rule
    public final transient MethodRule rule = new RtForkTest.SkipBindException();

    /**
     * RtFork can patch comment and return new json.
     * @throws IOException if has some problems with json parsing.
     */
    @Test
    public void patchAndCheckJsonFork() throws IOException {
        final String original = "some organization";
        final String patched = "some patched organization";
        final MkContainer container =
            new MkGrizzlyContainer().next(this.answer(original))
                .next(this.answer(patched)).next(this.answer(original)).start();
        final MkContainer forksContainer = new MkGrizzlyContainer().start();
        final RtRepo repo =
            new RtRepo(
                new MkGithub(),
                new ApacheRequest(forksContainer.home()),
                new Coordinates.Simple("test_user", "test_repo")
            );
        final RtFork fork = new RtFork(
            new ApacheRequest(container.home()), repo, 1
        );
        fork.patch(RtForkTest.fork(patched));
        MatcherAssert.assertThat(
            new Fork.Smart(fork).organization(),
            Matchers.equalTo(patched)
        );
        MatcherAssert.assertThat(
            new Fork.Smart(fork).name(),
            Matchers.notNullValue()
        );
        container.stop();
        forksContainer.stop();
    }

    /**
     * Create and return success MkAnswer object to test.
     * @param organization The organization of the fork
     * @return Success MkAnswer
     */
    private MkAnswer.Simple answer(final String organization) {
        return new MkAnswer.Simple(
            HttpURLConnection.HTTP_OK,
            RtForkTest.fork(organization).toString()
        );
    }

    /**
     * Create and return JsonObject to test.
     * @param organization The organization of the fork
     * @return JsonObject
     */
    private static JsonObject fork(final String organization) {
        return Json.createObjectBuilder()
            .add("organization", organization)
            .add("name", "nm")
            .build();
    }

    private static class SkipBindException implements MethodRule {
        @Override
        public Statement apply(
            final Statement base, final FrameworkMethod method,
            final Object target
        ) {
            return new Statement() {
                @Override
                // @checkstyle IllegalThrowsCheck (1 line)
                public void evaluate() throws Throwable {
                    try {
                        base.evaluate();
                    } catch (final BindException ex) {
                        Logger.warn(
                            base,
                            "Test failed due to BindException, skipping"
                        );
                        Assume.assumeTrue(false);
                    }
                }
            };
        }
    }
}
{'fraction_non_alphanumeric': 0.08100216633700669, 'fraction_numerical': 0.003296599792785156, 'mean_word_length': 2.5606975184439973, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2227495', 'n_tokens_mistral': 2896, 'n_tokens_neox': 2679, 'n_words': 945}