package jetbrains.jetpad.base.base64;

import org.junit.Test;

import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;

public class Base64EncoderTest {
  @Test
  public void encodeLenIs0Mod3() {
    assertEquals("Q2F0", Base64Coder.encode(new byte[] {'C', 'a', 't'}));
  }

  @Test
  public void decodeLenIs0Mod3() {
    assertArrayEquals(new byte[] {'C', 'a', 't'}, Base64Coder.decodeBytes("Q2F0"));
  }

  @Test
  public void encodeLenIs1Mod3() {
    assertEquals("Q2F0cw==", Base64Coder.encode(new byte[] {'C', 'a', 't', 's'}));
  }

  @Test
  public void decodeLenIs1Mod3() {
    assertArrayEquals(new byte[] {'C', 'a', 't', 's'}, Base64Coder.decodeBytes("Q2F0cw=="));
  }

  @Test
  public void encodeLenIs2Mod3() {
    assertEquals("QnJhaW4=", Base64Coder.encode(new byte[] { 'B', 'r', 'a', 'i', 'n' }));
  }

  @Test
  public void decodeLenIs2Mod3() {
    assertArrayEquals(new byte[] { 'B', 'r', 'a', 'i', 'n' }, Base64Coder.decodeBytes("QnJhaW4="));
  }

  @Test
  public void encodeNegativeBytes() {
    assertEquals("////", Base64Coder.encode(new byte[] { -1, -1, -1 }));
  }

  @Test
  public void decodeNegativeBytes() {
    assertArrayEquals(new byte[] { -1, -1, -1 }, Base64Coder.decodeBytes("////"));
  }

  @Test
  public void negativeDecodeBug() {
    assertArrayEquals(new byte[] { -1, 0, -1 }, Base64Coder.decodeBytes("/wD/"));
  }
}

@@ -1,8 +1,610 @@
+/*%0A * Copyright 2012-2014 JetBrains s.r.o%0A *%0A * Licensed under the Apache License, Version 2.0 (the %22License%22);%0A * you may not use this file except in compliance with the License.%0A * You may obtain a copy of the License at%0A *%0A *   http://www.apache.org/licenses/LICENSE-2.0%0A *%0A * Unless required by applicable law or agreed to in writing, software%0A * distributed under the License is distributed on an %22AS IS%22 BASIS,%0A * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0A * See the License for the specific language governing permissions and%0A * limitations under the License.%0A */%0A
 package 
@@ -1988,9 +1988,8 @@
 );%0A  %7D%0A%7D
-%0A

update headers