// Copyright (C) 2019 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.googlesource.gerrit.plugins.copyright.lib;

import static com.google.common.truth.Truth.assertThat;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.CharBuffer;
import java.nio.charset.StandardCharsets;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

@RunWith(JUnit4.class)
public class IndexedLineReaderTest {

  private static final int BUFSIZE = 1024;
  private static final String I18N_STRING =
      "2Îñţļ3国際化4\uD84F\uDCFE\uD843\uDE6D\uD84D\uDF3F8\uD83D\uDC69\uD83C\uDFFD";

  private static final String AMPERSAND_QUOT_STRING = "\n&quot;I think therefore I am.&quot;\n";
  private static final String HEX_QUOTE_STRING = "\n&#34;I think therefore I am.&#34;\n";
  private static final String VAR_QUOTE_STRING = "\n<var>I think therefore I am.</var>\n";
  private static final String ESCAPED_QUOTE = "\"I think therefore I am.\"";

  private final char[] buf = new char[BUFSIZE];
  private final CharBuffer cb = CharBuffer.wrap(buf);
  private final StringBuilder sb = new StringBuilder();

  private IndexedLineReader reader;

  @Before
  public void setUp() throws Exception {
    cb.clear();
    sb.setLength(0);
  }

  @After
  public void tearDown() throws Exception {
    if (reader != null) {
      reader.close();
    }
  }

  @Test
  public void testEmptyStream_read() throws Exception {
    reader = readerFromString("");
    assertThat(reader.read(cb)).isEqualTo(0);
    cb.flip();
    assertThat(cb.toString()).isEmpty();
  }

  @Test
  public void testEmptyStream_readString() throws Exception {
    reader = readerFromString("");

    assertThat(reader.readString('\n', sb)).isAtMost(0);
    assertThat(sb.toString()).isEmpty();
  }

  @Test
  public void testSimpleStream_read() throws Exception {
    reader = readerFromString("Hello there!");
    assertThat(reader.read(cb)).isEqualTo(12);
    cb.flip();
    assertThat(cb.toString()).isEqualTo("Hello there!");
  }

  @Test
  public void testSimpleStream_readString() throws Exception {
    reader = readerFromString("Hello there!");

    assertThat(reader.readString('\n', sb)).isEqualTo(12);
    assertThat(sb.toString()).isEqualTo("Hello there!");
    sb.setLength(0);
    assertThat(reader.readString('\n', sb)).isLessThan(0);
    assertThat(sb.toString()).isEmpty();
  }

  @Test
  public void testNulDelimitedStream_readString() throws Exception {
    reader = readerFromString("line1\000line");

    assertThat(reader.readString('\000', sb)).isEqualTo(6);
    assertThat(sb.toString()).isEqualTo("line1");
    sb.setLength(0);
    assertThat(reader.readString('\000', sb)).isEqualTo(4);
    assertThat(sb.toString()).isEqualTo("line");
    sb.setLength(0);
    assertThat(reader.readString('\000', sb)).isLessThan(0);
    assertThat(sb.toString()).isEmpty();
  }

  @Test
  public void testI18nStream_read() throws Exception {
    reader = readerFromString(I18N_STRING);
    assertThat(reader.read(cb)).isEqualTo(I18N_STRING.length());
    cb.flip();
    assertThat(cb.toString()).isEqualTo(I18N_STRING);
  }

  @Test
  public void testI18nStream_readString() throws Exception {
    reader = readerFromString(I18N_STRING);

    assertThat(reader.readString('\n', sb)).isEqualTo(I18N_STRING.length());
    assertThat(sb.toString()).isEqualTo(I18N_STRING);
    sb.setLength(0);
    assertThat(reader.readString('\n', sb)).isLessThan(0);
    assertThat(sb.toString()).isEmpty();
  }

  @Test
  public void testAmpersandQuotStream_read() throws Exception {
    reader = readerFromString(AMPERSAND_QUOT_STRING);
    assertThat(reader.read(cb)).isEqualTo(AMPERSAND_QUOT_STRING.length());
    cb.flip();
    assertThat(cb.toString()).isEqualTo("\n" + ESCAPED_QUOTE + "\n");
  }

  @Test
  public void testAmpersandQuotStream_readString() throws Exception {
    reader = readerFromString(AMPERSAND_QUOT_STRING);

    assertThat(reader.readString('\n', sb)).isEqualTo(1);
    assertThat(sb.toString()).isEmpty();
    sb.setLength(0);
    reader.readString('\n', sb);
    assertThat(sb.toString()).isEqualTo(ESCAPED_QUOTE);
    sb.setLength(0);
    assertThat(reader.readString('\n', sb)).isLessThan(0);
    assertThat(sb.toString()).isEmpty();
  }

  @Test
  public void testHexQuoteStream_read() throws Exception {
    reader = readerFromString(HEX_QUOTE_STRING);
    assertThat(reader.read(cb)).isEqualTo(HEX_QUOTE_STRING.length());
    cb.flip();
    assertThat(cb.toString()).isEqualTo("\n" + ESCAPED_QUOTE + "\n");
  }

  @Test
  public void testHexQuoteStream_readString() throws Exception {
    reader = readerFromString(HEX_QUOTE_STRING);

    assertThat(reader.readString('\n', sb)).isEqualTo(1);
    assertThat(sb.toString()).isEmpty();
    sb.setLength(0);
    reader.readString('\n', sb);
    assertThat(sb.toString()).isEqualTo(ESCAPED_QUOTE);
    sb.setLength(0);
    assertThat(reader.readString('\n', sb)).isLessThan(0);
    assertThat(sb.toString()).isEmpty();
  }

  @Test
  public void testVarQuoteStream_read() throws Exception {
    reader = readerFromString(VAR_QUOTE_STRING);
    assertThat(reader.read(cb)).isEqualTo(VAR_QUOTE_STRING.length());
    cb.flip();
    assertThat(cb.toString()).isEqualTo("\n" + ESCAPED_QUOTE + "\n");
  }

  @Test
  public void testVarQuoteStream_readString() throws Exception {
    reader = readerFromString(VAR_QUOTE_STRING);

    assertThat(reader.readString('\n', sb)).isEqualTo(1);
    assertThat(sb.toString()).isEmpty();
    sb.setLength(0);
    reader.readString('\n', sb);
    assertThat(sb.toString()).isEqualTo(ESCAPED_QUOTE);
    sb.setLength(0);
    assertThat(reader.readString('\n', sb)).isLessThan(0);
    assertThat(sb.toString()).isEmpty();
  }

  @Test
  public void testBytes_read() throws Exception {
    byte[] bytes = new byte[128];
    for (int i = 0; i <= 127; i++) {
      bytes[i] = (byte) (i + 0x80);
    }

    reader = readerFromByteArray(bytes);
    assertThat(reader.read(cb)).isEqualTo(128);
    cb.flip();

    // Select malformed chars mapped to spaces, symbols or accented chars. Rest mapped to '?'.
    assertThat(cb.toString())
        .isEqualTo(
            "?????™?*????????????ö????™?????? ?????? ?©??? ®??????? *????????ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ"
                + "ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ");
  }

  @Test
  public void testBytes_readString() throws Exception {
    byte[] bytes = new byte[128];
    for (int i = 0; i <= 127; i++) {
      bytes[i] = (byte) (i + 0x80);
    }

    reader = readerFromByteArray(bytes);
    assertThat(reader.readString('\n', sb)).isEqualTo(128);

    // Select malformed chars mapped to spaces, symbols or accented chars. Rest mapped to '?'.
    assertThat(sb.toString())
        .isEqualTo(
            "?????™?*????????????ö????™?????? ?????? ?©??? ®??????? *????????ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ"
                + "ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ");
    sb.setLength(0);
    assertThat(reader.readString('\n', sb)).isLessThan(0);
  }

  private IndexedLineReader readerFromString(String text) {
    return new IndexedLineReader("test", -1, newInputStream(text));
  }

  private IndexedLineReader readerFromByteArray(byte[] bytes) {
    return new IndexedLineReader("test", -1, new ByteArrayInputStream(bytes));
  }

  private InputStream newInputStream(String text) {
    return new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8));
  }
}
