Hex Artifact Content
Not logged in

Artifact 867da205425d870f66b8a6a9f940dcb7781515f6:


0000: 70 61 63 6b 61 67 65 20 6f 72 67 2e 69 6e 74 65  package org.inte
0010: 72 6c 65 64 67 65 72 2e 63 6f 64 65 63 73 2e 6f  rledger.codecs.o
0020: 65 72 3b 0a 0a 69 6d 70 6f 72 74 20 73 74 61 74  er;..import stat
0030: 69 63 20 6f 72 67 2e 68 61 6d 63 72 65 73 74 2e  ic org.hamcrest.
0040: 43 6f 72 65 4d 61 74 63 68 65 72 73 2e 69 73 3b  CoreMatchers.is;
0050: 0a 69 6d 70 6f 72 74 20 73 74 61 74 69 63 20 6f  .import static o
0060: 72 67 2e 68 61 6d 63 72 65 73 74 2e 4d 61 74 63  rg.hamcrest.Matc
0070: 68 65 72 41 73 73 65 72 74 2e 61 73 73 65 72 74  herAssert.assert
0080: 54 68 61 74 3b 0a 69 6d 70 6f 72 74 20 73 74 61  That;.import sta
0090: 74 69 63 20 6f 72 67 2e 6a 75 6e 69 74 2e 41 73  tic org.junit.As
00a0: 73 65 72 74 2e 61 73 73 65 72 74 41 72 72 61 79  sert.assertArray
00b0: 45 71 75 61 6c 73 3b 0a 0a 69 6d 70 6f 72 74 20  Equals;..import 
00c0: 6f 72 67 2e 69 6e 74 65 72 6c 65 64 67 65 72 2e  org.interledger.
00d0: 63 6f 64 65 63 73 2e 43 6f 64 65 63 43 6f 6e 74  codecs.CodecCont
00e0: 65 78 74 3b 0a 69 6d 70 6f 72 74 20 6f 72 67 2e  ext;.import org.
00f0: 69 6e 74 65 72 6c 65 64 67 65 72 2e 63 6f 64 65  interledger.code
0100: 63 73 2e 6f 65 72 2e 4f 65 72 49 41 35 53 74 72  cs.oer.OerIA5Str
0110: 69 6e 67 43 6f 64 65 63 2e 4f 65 72 49 41 35 53  ingCodec.OerIA5S
0120: 74 72 69 6e 67 3b 0a 69 6d 70 6f 72 74 20 6f 72  tring;.import or
0130: 67 2e 69 6e 74 65 72 6c 65 64 67 65 72 2e 63 6f  g.interledger.co
0140: 64 65 63 73 2e 6f 65 72 2e 4f 65 72 4c 65 6e 67  decs.oer.OerLeng
0150: 74 68 50 72 65 66 69 78 43 6f 64 65 63 2e 4f 65  thPrefixCodec.Oe
0160: 72 4c 65 6e 67 74 68 50 72 65 66 69 78 3b 0a 0a  rLengthPrefix;..
0170: 69 6d 70 6f 72 74 20 63 6f 6d 2e 67 6f 6f 67 6c  import com.googl
0180: 65 2e 63 6f 6d 6d 6f 6e 2e 69 6f 2e 42 61 73 65  e.common.io.Base
0190: 45 6e 63 6f 64 69 6e 67 3b 0a 69 6d 70 6f 72 74  Encoding;.import
01a0: 20 6f 72 67 2e 6a 75 6e 69 74 2e 42 65 66 6f 72   org.junit.Befor
01b0: 65 3b 0a 69 6d 70 6f 72 74 20 6f 72 67 2e 6a 75  e;.import org.ju
01c0: 6e 69 74 2e 54 65 73 74 3b 0a 69 6d 70 6f 72 74  nit.Test;.import
01d0: 20 6f 72 67 2e 6a 75 6e 69 74 2e 72 75 6e 6e 65   org.junit.runne
01e0: 72 2e 52 75 6e 57 69 74 68 3b 0a 69 6d 70 6f 72  r.RunWith;.impor
01f0: 74 20 6f 72 67 2e 6a 75 6e 69 74 2e 72 75 6e 6e  t org.junit.runn
0200: 65 72 73 2e 50 61 72 61 6d 65 74 65 72 69 7a 65  ers.Parameterize
0210: 64 3b 0a 69 6d 70 6f 72 74 20 6f 72 67 2e 6a 75  d;.import org.ju
0220: 6e 69 74 2e 72 75 6e 6e 65 72 73 2e 50 61 72 61  nit.runners.Para
0230: 6d 65 74 65 72 69 7a 65 64 2e 50 61 72 61 6d 65  meterized.Parame
0240: 74 65 72 73 3b 0a 0a 69 6d 70 6f 72 74 20 6a 61  ters;..import ja
0250: 76 61 2e 69 6f 2e 42 79 74 65 41 72 72 61 79 49  va.io.ByteArrayI
0260: 6e 70 75 74 53 74 72 65 61 6d 3b 0a 69 6d 70 6f  nputStream;.impo
0270: 72 74 20 6a 61 76 61 2e 69 6f 2e 42 79 74 65 41  rt java.io.ByteA
0280: 72 72 61 79 4f 75 74 70 75 74 53 74 72 65 61 6d  rrayOutputStream
0290: 3b 0a 69 6d 70 6f 72 74 20 6a 61 76 61 2e 75 74  ;.import java.ut
02a0: 69 6c 2e 41 72 72 61 79 73 3b 0a 69 6d 70 6f 72  il.Arrays;.impor
02b0: 74 20 6a 61 76 61 2e 75 74 69 6c 2e 43 6f 6c 6c  t java.util.Coll
02c0: 65 63 74 69 6f 6e 3b 0a 0a 2f 2a 2a 0a 20 2a 20  ection;../**. * 
02d0: 50 61 72 61 6d 65 74 65 72 69 7a 65 64 20 75 6e  Parameterized un
02e0: 69 74 20 74 65 73 74 73 20 66 6f 72 20 65 6e 63  it tests for enc
02f0: 6f 64 69 6e 67 20 61 6e 20 69 6e 73 74 61 6e 63  oding an instanc
0300: 65 20 6f 66 20 7b 40 6c 69 6e 6b 20 4f 65 72 49  e of {@link OerI
0310: 41 35 53 74 72 69 6e 67 43 6f 64 65 63 7d 2e 0a  A5StringCodec}..
0320: 20 2a 2f 0a 40 52 75 6e 57 69 74 68 28 50 61 72   */.@RunWith(Par
0330: 61 6d 65 74 65 72 69 7a 65 64 2e 63 6c 61 73 73  ameterized.class
0340: 29 0a 70 75 62 6c 69 63 20 63 6c 61 73 73 20 4f  ).public class O
0350: 65 72 49 41 35 53 74 72 69 6e 67 43 6f 64 65 63  erIA5StringCodec
0360: 54 65 73 74 20 7b 0a 0a 20 20 70 72 69 76 61 74  Test {..  privat
0370: 65 20 43 6f 64 65 63 43 6f 6e 74 65 78 74 20 63  e CodecContext c
0380: 6f 64 65 63 43 6f 6e 74 65 78 74 3b 0a 20 20 70  odecContext;.  p
0390: 72 69 76 61 74 65 20 4f 65 72 49 41 35 53 74 72  rivate OerIA5Str
03a0: 69 6e 67 43 6f 64 65 63 20 6f 65 72 49 41 35 53  ingCodec oerIA5S
03b0: 74 72 69 6e 67 43 6f 64 65 63 3b 0a 20 20 70 72  tringCodec;.  pr
03c0: 69 76 61 74 65 20 66 69 6e 61 6c 20 53 74 72 69  ivate final Stri
03d0: 6e 67 20 73 74 72 69 6e 67 56 61 6c 75 65 3b 0a  ng stringValue;.
03e0: 20 20 70 72 69 76 61 74 65 20 66 69 6e 61 6c 20    private final 
03f0: 62 79 74 65 5b 5d 20 61 73 6e 31 42 79 74 65 56  byte[] asn1ByteV
0400: 61 6c 75 65 3b 0a 0a 20 20 2f 2a 2a 0a 20 20 20  alue;..  /**.   
0410: 2a 20 43 6f 6e 73 74 72 75 63 74 20 61 6e 20 69  * Construct an i
0420: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
0430: 70 61 72 61 6d 65 74 65 72 69 7a 65 64 20 74 65  parameterized te
0440: 73 74 20 77 69 74 68 20 74 68 65 20 73 75 70 70  st with the supp
0450: 6c 69 65 64 20 69 6e 70 75 74 73 2e 0a 20 20 20  lied inputs..   
0460: 2a 0a 20 20 20 2a 20 40 70 61 72 61 6d 20 73 74  *.   * @param st
0470: 72 69 6e 67 56 61 6c 75 65 20 54 68 65 20 65 78  ringValue The ex
0480: 70 65 63 74 65 64 20 76 61 6c 75 65 2c 20 61 73  pected value, as
0490: 20 61 20 7b 40 6c 69 6e 6b 20 53 74 72 69 6e 67   a {@link String
04a0: 7d 2c 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69  }, of the suppli
04b0: 65 64 20 7b 40 63 6f 64 65 20 61 73 6e 31 42 79  ed {@code asn1By
04c0: 74 65 73 7d 2e 0a 20 20 20 2a 20 40 70 61 72 61  tes}..   * @para
04d0: 6d 20 61 73 6e 31 42 79 74 65 73 20 20 20 41 20  m asn1Bytes   A 
04e0: 62 79 74 65 20 61 72 72 61 79 20 72 65 70 72 65  byte array repre
04f0: 73 65 6e 74 69 6e 67 20 6f 63 74 65 74 73 20 74  senting octets t
0500: 6f 20 62 65 20 65 6e 63 6f 64 65 64 2e 0a 20 20  o be encoded..  
0510: 20 2a 2f 0a 20 20 70 75 62 6c 69 63 20 4f 65 72   */.  public Oer
0520: 49 41 35 53 74 72 69 6e 67 43 6f 64 65 63 54 65  IA5StringCodecTe
0530: 73 74 28 66 69 6e 61 6c 20 53 74 72 69 6e 67 20  st(final String 
0540: 73 74 72 69 6e 67 56 61 6c 75 65 2c 20 66 69 6e  stringValue, fin
0550: 61 6c 20 62 79 74 65 5b 5d 20 61 73 6e 31 42 79  al byte[] asn1By
0560: 74 65 73 29 20 7b 0a 20 20 20 20 74 68 69 73 2e  tes) {.    this.
0570: 73 74 72 69 6e 67 56 61 6c 75 65 20 3d 20 73 74  stringValue = st
0580: 72 69 6e 67 56 61 6c 75 65 3b 0a 20 20 20 20 74  ringValue;.    t
0590: 68 69 73 2e 61 73 6e 31 42 79 74 65 56 61 6c 75  his.asn1ByteValu
05a0: 65 20 3d 20 61 73 6e 31 42 79 74 65 73 3b 0a 20  e = asn1Bytes;. 
05b0: 20 7d 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 54   }..  /**.   * T
05c0: 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 69 73  he data for this
05d0: 20 74 65 73 74 2e 2e 2e 0a 20 20 20 2a 2f 0a 20   test....   */. 
05e0: 20 40 50 61 72 61 6d 65 74 65 72 73 0a 20 20 70   @Parameters.  p
05f0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 43 6f 6c  ublic static Col
0600: 6c 65 63 74 69 6f 6e 3c 4f 62 6a 65 63 74 5b 5d  lection<Object[]
0610: 3e 20 64 61 74 61 28 29 20 7b 0a 20 20 20 20 72  > data() {.    r
0620: 65 74 75 72 6e 20 41 72 72 61 79 73 2e 61 73 4c  eturn Arrays.asL
0630: 69 73 74 28 6e 65 77 20 4f 62 6a 65 63 74 5b 5d  ist(new Object[]
0640: 5b 5d 7b 0a 20 20 20 20 20 20 20 20 2f 2f 20 5b  []{.        // [
0650: 69 6e 70 75 74 5f 76 61 6c 75 65 5d 5b 6e 75 6d  input_value][num
0660: 5f 6f 63 74 65 74 73 5f 77 72 69 74 74 65 6e 5d  _octets_written]
0670: 5b 62 79 74 65 5f 76 61 6c 75 65 73 5d 0a 20 20  [byte_values].  
0680: 20 20 20 20 20 20 2f 2f 20 30 0a 20 20 20 20 20        // 0.     
0690: 20 20 20 7b 22 22 2c 20 42 61 73 65 45 6e 63 6f     {"", BaseEnco
06a0: 64 69 6e 67 2e 62 61 73 65 31 36 28 29 2e 64 65  ding.base16().de
06b0: 63 6f 64 65 28 22 30 30 22 29 7d 2c 0a 20 20 20  code("00")},.   
06c0: 20 20 20 20 20 2f 2f 20 31 0a 20 20 20 20 20 20       // 1.      
06d0: 20 20 7b 22 61 22 2c 20 42 61 73 65 45 6e 63 6f    {"a", BaseEnco
06e0: 64 69 6e 67 2e 62 61 73 65 31 36 28 29 2e 64 65  ding.base16().de
06f0: 63 6f 64 65 28 22 30 31 36 31 22 29 7d 2c 0a 20  code("0161")},. 
0700: 20 20 20 20 20 20 20 2f 2f 20 32 0a 20 20 20 20         // 2.    
0710: 20 20 20 20 7b 22 61 62 63 22 2c 20 42 61 73 65      {"abc", Base
0720: 45 6e 63 6f 64 69 6e 67 2e 62 61 73 65 31 36 28  Encoding.base16(
0730: 29 2e 64 65 63 6f 64 65 28 22 30 33 36 31 36 32  ).decode("036162
0740: 36 33 22 29 7d 2c 0a 20 20 20 20 20 20 20 20 2f  63")},.        /
0750: 2f 20 33 0a 20 20 20 20 20 20 20 20 7b 22 68 65  / 3.        {"he
0760: 6c 6c 6f 20 77 6f 72 6c 64 22 2c 20 42 61 73 65  llo world", Base
0770: 45 6e 63 6f 64 69 6e 67 2e 62 61 73 65 31 36 28  Encoding.base16(
0780: 29 2e 64 65 63 6f 64 65 28 22 30 42 36 38 36 35  ).decode("0B6865
0790: 36 43 36 43 36 46 32 30 37 37 36 46 37 32 36 43  6C6C6F20776F726C
07a0: 36 34 22 29 7d 2c 0a 20 20 20 20 20 20 20 20 2f  64")},.        /
07b0: 2f 20 34 0a 20 20 20 20 20 20 20 20 7b 22 67 2e  / 4.        {"g.
07c0: 74 65 73 74 2e 66 6f 6f 22 2c 20 42 61 73 65 45  test.foo", BaseE
07d0: 6e 63 6f 64 69 6e 67 2e 62 61 73 65 31 36 28 29  ncoding.base16()
07e0: 2e 64 65 63 6f 64 65 28 22 30 41 36 37 32 45 37  .decode("0A672E7
07f0: 34 36 35 37 33 37 34 32 45 36 36 36 46 36 46 22  46573742E666F6F"
0800: 29 7d 2c 0a 20 20 20 20 20 20 20 20 2f 2f 20 34  )},.        // 4
0810: 0a 20 20 20 20 20 20 20 20 7b 22 67 2e 74 65 73  .        {"g.tes
0820: 74 2e 31 30 32 34 2e 41 41 41 41 41 41 41 41 41  t.1024.AAAAAAAAA
0830: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0840: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0850: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0860: 41 41 41 41 41 41 41 41 41 41 41 41 22 0a 20 20  AAAAAAAAAAAA".  
0870: 20 20 20 20 20 20 20 20 20 20 2b 20 22 41 41 41            + "AAA
0880: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0890: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
08a0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
08b0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
08c0: 41 41 41 41 41 41 41 41 41 22 0a 20 20 20 20 20  AAAAAAAAA".     
08d0: 20 20 20 20 20 20 20 2b 20 22 41 41 41 41 41 41         + "AAAAAA
08e0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
08f0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0900: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0910: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0920: 41 41 41 41 41 41 22 0a 20 20 20 20 20 20 20 20  AAAAAA".        
0930: 20 20 20 20 2b 20 22 41 41 41 41 41 41 41 41 41      + "AAAAAAAAA
0940: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0950: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0960: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0970: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0980: 41 41 41 22 0a 20 20 20 20 20 20 20 20 20 20 20  AAA".           
0990: 20 2b 20 22 41 41 41 41 41 41 41 41 41 41 41 41   + "AAAAAAAAAAAA
09a0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
09b0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
09c0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
09d0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
09e0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 2b 20  ".            + 
09f0: 22 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  "AAAAAAAAAAAAAAA
0a00: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0a10: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0a20: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0a30: 41 41 41 41 41 41 41 41 41 41 41 41 41 22 0a 20  AAAAAAAAAAAAA". 
0a40: 20 20 20 20 20 20 20 20 20 20 20 2b 20 22 41 41             + "AA
0a50: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0a60: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0a70: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0a80: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0a90: 41 41 41 41 41 41 41 41 41 41 22 0a 20 20 20 20  AAAAAAAAAA".    
0aa0: 20 20 20 20 20 20 20 20 2b 20 22 41 41 41 41 41          + "AAAAA
0ab0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0ac0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0ad0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0ae0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0af0: 41 41 41 41 41 41 41 22 0a 20 20 20 20 20 20 20  AAAAAAA".       
0b00: 20 20 20 20 20 2b 20 22 41 41 41 41 41 41 41 41       + "AAAAAAAA
0b10: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0b20: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0b30: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0b40: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0b50: 41 41 41 41 22 0a 20 20 20 20 20 20 20 20 20 20  AAAA".          
0b60: 20 20 2b 20 22 41 41 41 41 41 41 41 41 41 41 41    + "AAAAAAAAAAA
0b70: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0b80: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0b90: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0ba0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0bb0: 41 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 2b  A".            +
0bc0: 20 22 41 41 41 41 41 41 41 41 41 41 41 41 41 41   "AAAAAAAAAAAAAA
0bd0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0be0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0bf0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0c00: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 22 0a  AAAAAAAAAAAAAA".
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 22 41              + "A
0c20: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0c30: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0c40: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0c50: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0c60: 41 41 41 41 41 41 41 41 41 41 41 22 0a 20 20 20  AAAAAAAAAAA".   
0c70: 20 20 20 20 20 20 20 20 20 2b 20 22 41 41 41 41           + "AAAA
0c80: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0c90: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0ca0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0cb0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0cc0: 41 41 41 41 41 41 41 41 22 0a 20 20 20 20 20 20  AAAAAAAA".      
0cd0: 20 20 20 20 20 20 2b 20 22 41 41 41 41 41 41 41        + "AAAAAAA
0ce0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0cf0: 41 41 41 41 41 41 41 22 2c 0a 20 20 20 20 20 20  AAAAAAA",.      
0d00: 20 20 20 20 20 20 42 61 73 65 45 6e 63 6f 64 69        BaseEncodi
0d10: 6e 67 2e 62 61 73 65 31 36 28 29 0a 20 20 20 20  ng.base16().    
0d20: 20 20 20 20 20 20 20 20 20 20 20 20 2e 64 65 63              .dec
0d30: 6f 64 65 28 22 38 32 30 33 46 46 36 37 32 45 37  ode("8203FF672E7
0d40: 34 36 35 37 33 37 34 32 45 33 31 33 30 33 32 33  46573742E3130323
0d50: 34 32 45 34 31 34 31 34 31 34 31 34 31 34 31 34  42E4141414141414
0d60: 31 34 31 34 31 34 22 0a 20 20 20 20 20 20 20 20  141414".        
0d70: 20 20 20 20 20 20 20 20 2b 20 22 31 34 31 34 31          + "14141
0d80: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
0d90: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
0da0: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
0db0: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
0dc0: 34 31 34 31 22 0a 20 20 20 20 20 20 20 20 20 20  4141".          
0dd0: 20 20 20 20 20 20 2b 20 22 34 31 34 31 34 31 34        + "4141414
0de0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
0df0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
0e00: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
0e10: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
0e20: 31 34 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  14".            
0e30: 20 20 20 20 2b 20 22 31 34 31 34 31 34 31 34 31      + "141414141
0e40: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
0e50: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
0e60: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
0e70: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
0e80: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
0e90: 20 20 2b 20 22 34 31 34 31 34 31 34 31 34 31 34    + "41414141414
0ea0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
0eb0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
0ec0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
0ed0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 22 0a  14141414141414".
0ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ef0: 2b 20 22 31 34 31 34 31 34 31 34 31 34 31 34 31  + "1414141414141
0f00: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
0f10: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
0f20: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
0f30: 34 31 34 31 34 31 34 31 34 31 34 31 22 0a 20 20  414141414141".  
0f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
0f50: 22 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  "414141414141414
0f60: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
0f70: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
0f80: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
0f90: 31 34 31 34 31 34 31 34 31 34 22 0a 20 20 20 20  1414141414".    
0fa0: 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 22 31              + "1
0fb0: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
0fc0: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
0fd0: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
0fe0: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
0ff0: 34 31 34 31 34 31 34 31 22 0a 20 20 20 20 20 20  41414141".      
1000: 20 20 20 20 20 20 20 20 20 20 2b 20 22 34 31 34            + "414
1010: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1020: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1030: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1040: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1050: 31 34 31 34 31 34 22 0a 20 20 20 20 20 20 20 20  141414".        
1060: 20 20 20 20 20 20 20 20 2b 20 22 31 34 31 34 31          + "14141
1070: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1080: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1090: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
10a0: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
10b0: 34 31 34 31 22 0a 20 20 20 20 20 20 20 20 20 20  4141".          
10c0: 20 20 20 20 20 20 2b 20 22 34 31 34 31 34 31 34        + "4141414
10d0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
10e0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
10f0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1100: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1110: 31 34 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  14".            
1120: 20 20 20 20 2b 20 22 31 34 31 34 31 34 31 34 31      + "141414141
1130: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1140: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1150: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1160: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1170: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
1180: 20 20 2b 20 22 34 31 34 31 34 31 34 31 34 31 34    + "41414141414
1190: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
11a0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
11b0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
11c0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 22 0a  14141414141414".
11d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e0: 2b 20 22 31 34 31 34 31 34 31 34 31 34 31 34 31  + "1414141414141
11f0: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1200: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1210: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1220: 34 31 34 31 34 31 34 31 34 31 34 31 22 0a 20 20  414141414141".  
1230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
1240: 22 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  "414141414141414
1250: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1260: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1270: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1280: 31 34 31 34 31 34 31 34 31 34 22 0a 20 20 20 20  1414141414".    
1290: 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 22 31              + "1
12a0: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
12b0: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
12c0: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
12d0: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
12e0: 34 31 34 31 34 31 34 31 22 0a 20 20 20 20 20 20  41414141".      
12f0: 20 20 20 20 20 20 20 20 20 20 2b 20 22 34 31 34            + "414
1300: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1310: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1320: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1330: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1340: 31 34 31 34 31 34 22 0a 20 20 20 20 20 20 20 20  141414".        
1350: 20 20 20 20 20 20 20 20 2b 20 22 31 34 31 34 31          + "14141
1360: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1370: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1380: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1390: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
13a0: 34 31 34 31 22 0a 20 20 20 20 20 20 20 20 20 20  4141".          
13b0: 20 20 20 20 20 20 2b 20 22 34 31 34 31 34 31 34        + "4141414
13c0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
13d0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
13e0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
13f0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1400: 31 34 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  14".            
1410: 20 20 20 20 2b 20 22 31 34 31 34 31 34 31 34 31      + "141414141
1420: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1430: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1440: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1450: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1460: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
1470: 20 20 2b 20 22 34 31 34 31 34 31 34 31 34 31 34    + "41414141414
1480: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1490: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
14a0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
14b0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 22 0a  14141414141414".
14c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d0: 2b 20 22 31 34 31 34 31 34 31 34 31 34 31 34 31  + "1414141414141
14e0: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
14f0: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1500: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1510: 34 31 34 31 34 31 34 31 34 31 34 31 22 0a 20 20  414141414141".  
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
1530: 22 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  "414141414141414
1540: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1550: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1560: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1570: 31 34 31 34 31 34 31 34 31 34 22 0a 20 20 20 20  1414141414".    
1580: 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 22 31              + "1
1590: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
15a0: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
15b0: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
15c0: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
15d0: 34 31 34 31 34 31 34 31 22 0a 20 20 20 20 20 20  41414141".      
15e0: 20 20 20 20 20 20 20 20 20 20 2b 20 22 34 31 34            + "414
15f0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1600: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1610: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1620: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1630: 31 34 31 34 31 34 22 0a 20 20 20 20 20 20 20 20  141414".        
1640: 20 20 20 20 20 20 20 20 2b 20 22 31 34 31 34 31          + "14141
1650: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1660: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1670: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1680: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1690: 34 31 34 31 22 0a 20 20 20 20 20 20 20 20 20 20  4141".          
16a0: 20 20 20 20 20 20 2b 20 22 34 31 34 31 34 31 34        + "4141414
16b0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
16c0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
16d0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
16e0: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
16f0: 31 34 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  14".            
1700: 20 20 20 20 2b 20 22 31 34 31 34 31 34 31 34 31      + "141414141
1710: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1720: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1730: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1740: 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31  4141414141414141
1750: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
1760: 20 20 2b 20 22 34 31 34 31 34 31 34 31 34 31 34    + "41414141414
1770: 31 34 31 34 31 34 31 34 31 34 31 34 31 34 31 34  1414141414141414
1780: 31 34 31 34 31 22 29 7d 2c 7d 29 3b 0a 20 20 7d  14141")},});.  }
1790: 0a 0a 20 20 2f 2a 2a 0a 20 20 20 2a 20 54 65 73  ..  /**.   * Tes
17a0: 74 20 73 65 74 75 70 2e 0a 20 20 20 2a 2f 0a 20  t setup..   */. 
17b0: 20 40 42 65 66 6f 72 65 0a 20 20 70 75 62 6c 69   @Before.  publi
17c0: 63 20 76 6f 69 64 20 73 65 74 55 70 28 29 20 74  c void setUp() t
17d0: 68 72 6f 77 73 20 45 78 63 65 70 74 69 6f 6e 20  hrows Exception 
17e0: 7b 0a 20 20 20 20 2f 2f 20 52 65 67 69 73 74 65  {.    // Registe
17f0: 72 20 74 68 65 20 63 6f 64 65 63 20 74 6f 20 62  r the codec to b
1800: 65 20 74 65 73 74 65 64 2e 2e 2e 0a 20 20 20 20  e tested....    
1810: 66 69 6e 61 6c 20 4f 65 72 4c 65 6e 67 74 68 50  final OerLengthP
1820: 72 65 66 69 78 43 6f 64 65 63 20 6f 65 72 4c 65  refixCodec oerLe
1830: 6e 67 74 68 50 72 65 66 69 78 43 6f 64 65 20 3d  ngthPrefixCode =
1840: 20 6e 65 77 20 4f 65 72 4c 65 6e 67 74 68 50 72   new OerLengthPr
1850: 65 66 69 78 43 6f 64 65 63 28 29 3b 0a 20 20 20  efixCodec();.   
1860: 20 6f 65 72 49 41 35 53 74 72 69 6e 67 43 6f 64   oerIA5StringCod
1870: 65 63 20 3d 20 6e 65 77 20 4f 65 72 49 41 35 53  ec = new OerIA5S
1880: 74 72 69 6e 67 43 6f 64 65 63 28 29 3b 0a 20 20  tringCodec();.  
1890: 20 20 63 6f 64 65 63 43 6f 6e 74 65 78 74 20 3d    codecContext =
18a0: 20 6e 65 77 20 43 6f 64 65 63 43 6f 6e 74 65 78   new CodecContex
18b0: 74 28 29 2e 72 65 67 69 73 74 65 72 28 4f 65 72  t().register(Oer
18c0: 4c 65 6e 67 74 68 50 72 65 66 69 78 2e 63 6c 61  LengthPrefix.cla
18d0: 73 73 2c 20 6f 65 72 4c 65 6e 67 74 68 50 72 65  ss, oerLengthPre
18e0: 66 69 78 43 6f 64 65 29 0a 20 20 20 20 20 20 20  fixCode).       
18f0: 20 2e 72 65 67 69 73 74 65 72 28 4f 65 72 49 41   .register(OerIA
1900: 35 53 74 72 69 6e 67 2e 63 6c 61 73 73 2c 20 6f  5String.class, o
1910: 65 72 49 41 35 53 74 72 69 6e 67 43 6f 64 65 63  erIA5StringCodec
1920: 29 3b 0a 20 20 7d 0a 0a 20 20 40 54 65 73 74 0a  );.  }..  @Test.
1930: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 72 65    public void re
1940: 61 64 28 29 20 74 68 72 6f 77 73 20 45 78 63 65  ad() throws Exce
1950: 70 74 69 6f 6e 20 7b 0a 20 20 20 20 2f 2f 20 54  ption {.    // T
1960: 68 69 73 20 73 74 72 65 61 6d 20 61 6c 6c 6f 77  his stream allow
1970: 73 20 74 68 65 20 63 6f 64 65 63 20 74 6f 20 72  s the codec to r
1980: 65 61 64 20 74 68 65 20 61 73 6e 31 42 79 74 65  ead the asn1Byte
1990: 73 2e 2e 2e 0a 20 20 20 20 42 79 74 65 41 72 72  s....    ByteArr
19a0: 61 79 49 6e 70 75 74 53 74 72 65 61 6d 20 69 6e  ayInputStream in
19b0: 70 75 74 53 74 72 65 61 6d 20 3d 20 6e 65 77 20  putStream = new 
19c0: 42 79 74 65 41 72 72 61 79 49 6e 70 75 74 53 74  ByteArrayInputSt
19d0: 72 65 61 6d 28 61 73 6e 31 42 79 74 65 56 61 6c  ream(asn1ByteVal
19e0: 75 65 29 3b 0a 0a 20 20 20 20 2f 2f 20 41 73 73  ue);..    // Ass
19f0: 65 72 74 20 74 68 61 74 20 74 68 65 20 63 6f 64  ert that the cod
1a00: 65 64 20 72 65 61 64 20 62 79 74 65 73 20 74 68  ed read bytes th
1a10: 61 74 20 65 71 75 61 6c 20 77 68 61 74 20 74 68  at equal what th
1a20: 65 20 68 61 72 6e 65 73 73 20 70 75 74 20 69 6e  e harness put in
1a30: 74 6f 20 6f 63 74 65 74 42 79 74 65 73 2e 0a 20  to octetBytes.. 
1a40: 20 20 20 66 69 6e 61 6c 20 53 74 72 69 6e 67 20     final String 
1a50: 61 63 74 75 61 6c 56 61 6c 75 65 20 3d 20 6f 65  actualValue = oe
1a60: 72 49 41 35 53 74 72 69 6e 67 43 6f 64 65 63 2e  rIA5StringCodec.
1a70: 72 65 61 64 28 63 6f 64 65 63 43 6f 6e 74 65 78  read(codecContex
1a80: 74 2c 20 69 6e 70 75 74 53 74 72 65 61 6d 29 2e  t, inputStream).
1a90: 67 65 74 56 61 6c 75 65 28 29 3b 0a 20 20 20 20  getValue();.    
1aa0: 61 73 73 65 72 74 54 68 61 74 28 61 63 74 75 61  assertThat(actua
1ab0: 6c 56 61 6c 75 65 2c 20 69 73 28 73 74 72 69 6e  lValue, is(strin
1ac0: 67 56 61 6c 75 65 29 29 3b 0a 20 20 7d 0a 0a 20  gValue));.  }.. 
1ad0: 20 40 54 65 73 74 0a 20 20 70 75 62 6c 69 63 20   @Test.  public 
1ae0: 76 6f 69 64 20 77 72 69 74 65 28 29 20 74 68 72  void write() thr
1af0: 6f 77 73 20 45 78 63 65 70 74 69 6f 6e 20 7b 0a  ows Exception {.
1b00: 20 20 20 20 2f 2f 20 41 6c 6c 6f 77 20 74 68 65      // Allow the
1b10: 20 43 6f 64 65 63 20 74 6f 20 77 72 69 74 65 20   Codec to write 
1b20: 74 6f 20 27 6f 75 74 70 75 74 53 74 72 65 61 6d  to 'outputStream
1b30: 27 0a 20 20 20 20 66 69 6e 61 6c 20 42 79 74 65  '.    final Byte
1b40: 41 72 72 61 79 4f 75 74 70 75 74 53 74 72 65 61  ArrayOutputStrea
1b50: 6d 20 6f 75 74 70 75 74 53 74 72 65 61 6d 20 3d  m outputStream =
1b60: 20 6e 65 77 20 42 79 74 65 41 72 72 61 79 4f 75   new ByteArrayOu
1b70: 74 70 75 74 53 74 72 65 61 6d 28 29 3b 0a 20 20  tputStream();.  
1b80: 20 20 6f 65 72 49 41 35 53 74 72 69 6e 67 43 6f    oerIA5StringCo
1b90: 64 65 63 2e 77 72 69 74 65 28 63 6f 64 65 63 43  dec.write(codecC
1ba0: 6f 6e 74 65 78 74 2c 20 6e 65 77 20 4f 65 72 49  ontext, new OerI
1bb0: 41 35 53 74 72 69 6e 67 28 73 74 72 69 6e 67 56  A5String(stringV
1bc0: 61 6c 75 65 29 2c 20 6f 75 74 70 75 74 53 74 72  alue), outputStr
1bd0: 65 61 6d 29 3b 0a 0a 20 20 20 20 2f 2f 20 41 73  eam);..    // As
1be0: 73 65 72 74 20 74 68 61 74 20 74 68 65 20 62 79  sert that the by
1bf0: 74 65 73 20 77 72 69 74 74 65 6e 20 74 6f 20 27  tes written to '
1c00: 6f 75 74 70 75 74 53 74 72 65 61 6d 27 20 6d 61  outputStream' ma
1c10: 74 63 68 20 74 68 65 20 63 6f 6e 74 65 6e 74 73  tch the contents
1c20: 20 74 68 61 74 20 74 68 65 20 68 61 72 6e 65 73   that the harnes
1c30: 73 20 70 75 74 0a 20 20 20 20 2f 2f 20 69 6e 74  s put.    // int
1c40: 6f 20 61 73 6e 31 42 79 74 65 56 61 6c 75 65 2e  o asn1ByteValue.
1c50: 0a 20 20 20 20 61 73 73 65 72 74 41 72 72 61 79  .    assertArray
1c60: 45 71 75 61 6c 73 28 61 73 6e 31 42 79 74 65 56  Equals(asn1ByteV
1c70: 61 6c 75 65 2c 20 6f 75 74 70 75 74 53 74 72 65  alue, outputStre
1c80: 61 6d 2e 74 6f 42 79 74 65 41 72 72 61 79 28 29  am.toByteArray()
1c90: 29 3b 0a 20 20 7d 0a 0a 20 20 40 54 65 73 74 0a  );.  }..  @Test.
1ca0: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 77 72    public void wr
1cb0: 69 74 65 54 68 65 6e 52 65 61 64 28 29 20 74 68  iteThenRead() th
1cc0: 72 6f 77 73 20 45 78 63 65 70 74 69 6f 6e 20 7b  rows Exception {
1cd0: 0a 20 20 20 20 2f 2f 20 57 72 69 74 65 20 6f 63  .    // Write oc
1ce0: 74 65 74 73 2e 2e 2e 0a 20 20 20 20 66 69 6e 61  tets....    fina
1cf0: 6c 20 42 79 74 65 41 72 72 61 79 4f 75 74 70 75  l ByteArrayOutpu
1d00: 74 53 74 72 65 61 6d 20 6f 75 74 70 75 74 53 74  tStream outputSt
1d10: 72 65 61 6d 20 3d 20 6e 65 77 20 42 79 74 65 41  ream = new ByteA
1d20: 72 72 61 79 4f 75 74 70 75 74 53 74 72 65 61 6d  rrayOutputStream
1d30: 28 29 3b 0a 20 20 20 20 6f 65 72 49 41 35 53 74  ();.    oerIA5St
1d40: 72 69 6e 67 43 6f 64 65 63 2e 77 72 69 74 65 28  ringCodec.write(
1d50: 63 6f 64 65 63 43 6f 6e 74 65 78 74 2c 20 6e 65  codecContext, ne
1d60: 77 20 4f 65 72 49 41 35 53 74 72 69 6e 67 28 73  w OerIA5String(s
1d70: 74 72 69 6e 67 56 61 6c 75 65 29 2c 20 6f 75 74  tringValue), out
1d80: 70 75 74 53 74 72 65 61 6d 29 3b 0a 0a 20 20 20  putStream);..   
1d90: 20 2f 2f 20 52 65 61 64 20 6f 63 74 65 74 73 2e   // Read octets.
1da0: 2e 2e 0a 20 20 20 20 66 69 6e 61 6c 20 42 79 74  ...    final Byt
1db0: 65 41 72 72 61 79 49 6e 70 75 74 53 74 72 65 61  eArrayInputStrea
1dc0: 6d 20 69 6e 70 75 74 53 74 72 65 61 6d 20 3d 20  m inputStream = 
1dd0: 6e 65 77 20 42 79 74 65 41 72 72 61 79 49 6e 70  new ByteArrayInp
1de0: 75 74 53 74 72 65 61 6d 28 6f 75 74 70 75 74 53  utStream(outputS
1df0: 74 72 65 61 6d 2e 74 6f 42 79 74 65 41 72 72 61  tream.toByteArra
1e00: 79 28 29 29 3b 0a 20 20 20 20 66 69 6e 61 6c 20  y());.    final 
1e10: 4f 65 72 49 41 35 53 74 72 69 6e 67 20 61 63 74  OerIA5String act
1e20: 75 61 6c 20 3d 20 6f 65 72 49 41 35 53 74 72 69  ual = oerIA5Stri
1e30: 6e 67 43 6f 64 65 63 2e 72 65 61 64 28 63 6f 64  ngCodec.read(cod
1e40: 65 63 43 6f 6e 74 65 78 74 2c 20 69 6e 70 75 74  ecContext, input
1e50: 53 74 72 65 61 6d 29 3b 0a 20 20 20 20 61 73 73  Stream);.    ass
1e60: 65 72 74 54 68 61 74 28 61 63 74 75 61 6c 2e 67  ertThat(actual.g
1e70: 65 74 56 61 6c 75 65 28 29 2c 20 69 73 28 73 74  etValue(), is(st
1e80: 72 69 6e 67 56 61 6c 75 65 29 29 3b 0a 0a 20 20  ringValue));..  
1e90: 20 20 2f 2f 20 57 72 69 74 65 20 6f 63 74 65 74    // Write octet
1ea0: 73 20 61 67 61 69 6e 2e 2e 2e 0a 20 20 20 20 66  s again....    f
1eb0: 69 6e 61 6c 20 42 79 74 65 41 72 72 61 79 4f 75  inal ByteArrayOu
1ec0: 74 70 75 74 53 74 72 65 61 6d 20 6f 75 74 70 75  tputStream outpu
1ed0: 74 53 74 72 65 61 6d 32 20 3d 20 6e 65 77 20 42  tStream2 = new B
1ee0: 79 74 65 41 72 72 61 79 4f 75 74 70 75 74 53 74  yteArrayOutputSt
1ef0: 72 65 61 6d 28 29 3b 0a 20 20 20 20 6f 65 72 49  ream();.    oerI
1f00: 41 35 53 74 72 69 6e 67 43 6f 64 65 63 2e 77 72  A5StringCodec.wr
1f10: 69 74 65 28 63 6f 64 65 63 43 6f 6e 74 65 78 74  ite(codecContext
1f20: 2c 20 61 63 74 75 61 6c 2c 20 6f 75 74 70 75 74  , actual, output
1f30: 53 74 72 65 61 6d 32 29 3b 0a 0a 20 20 20 20 2f  Stream2);..    /
1f40: 2f 20 41 73 73 65 72 74 20 6f 72 69 67 69 6e 61  / Assert origina
1f50: 6c 6c 79 20 77 72 69 74 74 65 6e 20 62 79 74 65  lly written byte
1f60: 73 20 65 71 75 61 6c 73 20 6e 65 77 6c 79 20 77  s equals newly w
1f70: 72 69 74 74 65 6e 20 62 79 74 65 73 2e 0a 20 20  ritten bytes..  
1f80: 20 20 61 73 73 65 72 74 41 72 72 61 79 45 71 75    assertArrayEqu
1f90: 61 6c 73 28 6f 75 74 70 75 74 53 74 72 65 61 6d  als(outputStream
1fa0: 2e 74 6f 42 79 74 65 41 72 72 61 79 28 29 2c 20  .toByteArray(), 
1fb0: 6f 75 74 70 75 74 53 74 72 65 61 6d 32 2e 74 6f  outputStream2.to
1fc0: 42 79 74 65 41 72 72 61 79 28 29 29 3b 0a 20 20  ByteArray());.  
1fd0: 7d 0a 7d 0a                                      }.}.