11using System ;
2+ using System . Runtime . InteropServices ;
23using Microsoft . VisualStudio . TestTools . UnitTesting ;
34using SysadminsLV . Asn1Parser ;
45
@@ -39,78 +40,89 @@ 0020 f7 42 87 e7 c4 36 .B...6
3940
4041 [ TestMethod ]
4142 public void TestHex ( ) {
42- String str = AsnFormatter . BinaryToString ( _rawData , EncodingType . Hex ) ;
43- Assert . AreEqual ( HEX , str . TrimEnd ( ) ) ;
44- str = AsnFormatter . BinaryToString ( _rawData , EncodingType . Hex , forceUpperCase : true ) ;
45- Assert . AreEqual ( HEX . ToUpper ( ) , str . TrimEnd ( ) ) ;
43+ runTest ( _rawData , EncodingType . Hex , HEX , true ) ;
4644 }
4745 [ TestMethod ]
4846 public void TestHexRaw ( ) {
49- String str = AsnFormatter . BinaryToString ( _rawData ) ;
50- Assert . AreEqual ( HEX_RAW , str . TrimEnd ( ) ) ;
51- str = AsnFormatter . BinaryToString ( _rawData , forceUpperCase : true ) ;
52- Assert . AreEqual ( HEX_RAW . ToUpper ( ) , str . TrimEnd ( ) ) ;
47+ runTest ( _rawData , EncodingType . HexRaw , HEX_RAW , true ) ;
5348 }
5449 [ TestMethod ]
5550 public void TestHexAddr ( ) {
56- String str = AsnFormatter . BinaryToString ( _rawData , EncodingType . HexAddress ) ;
57- Assert . AreEqual ( HEX_ADDR + HEX , str . TrimEnd ( ) ) ;
51+ runTest ( _rawData , EncodingType . HexAddress , HEX_ADDR + HEX , true ) ;
5852 }
5953 [ TestMethod ]
6054 public void TestHexAscii ( ) {
61- String str = AsnFormatter . BinaryToString ( _rawData , EncodingType . HexAscii ) ;
62- Assert . AreEqual ( HEX + HEX_ASCII , str . TrimEnd ( ) ) ;
55+ runTest ( _rawData , EncodingType . HexAscii , HEX + HEX_ASCII , true ) ;
6356 }
6457 [ TestMethod ]
6558 public void TestHexAddrAscii ( ) {
66- String str = AsnFormatter . BinaryToString ( _rawData , EncodingType . HexAsciiAddress ) ;
67- Assert . AreEqual ( HEX_ADDR + HEX + HEX_ASCII , str . TrimEnd ( ) ) ;
59+ runTest ( _rawData , EncodingType . HexAsciiAddress , HEX_ADDR + HEX + HEX_ASCII , true ) ;
6860 }
6961 [ TestMethod ]
7062 public void TestHexAddrTruncated ( ) {
71- String str = AsnFormatter . BinaryToString ( _rawDataTruncated , EncodingType . HexAddress ) ;
72- Assert . AreEqual ( HEX_ADDR + TRUNCATED_HEX , str . TrimEnd ( ) ) ;
63+ runTest ( _rawDataTruncated , EncodingType . HexAddress , HEX_ADDR + TRUNCATED_HEX , true ) ;
7364 }
7465 [ TestMethod ]
7566 public void TestHexAsciiTruncated ( ) {
76- String str = AsnFormatter . BinaryToString ( _rawDataTruncated , EncodingType . HexAscii ) ;
77- Assert . AreEqual ( TRUNCATED_HEX + TRUNCATED_HEX_ASCII , str . TrimEnd ( ) ) ;
67+ runTest ( _rawDataTruncated , EncodingType . HexAscii , TRUNCATED_HEX + TRUNCATED_HEX_ASCII , true ) ;
7868 }
7969 [ TestMethod ]
8070 public void TestHexAddrAsciiTruncated ( ) {
81- String str = AsnFormatter . BinaryToString ( _rawDataTruncated , EncodingType . HexAsciiAddress ) ;
82- Assert . AreEqual ( HEX_ADDR + TRUNCATED_HEX + TRUNCATED_HEX_ASCII , str . TrimEnd ( ) ) ;
71+ runTest ( _rawDataTruncated , EncodingType . HexAsciiAddress , HEX_ADDR + TRUNCATED_HEX + TRUNCATED_HEX_ASCII , true ) ;
8372 }
8473
8574 [ TestMethod ]
8675 public void TestComplexHexRaw ( ) {
87- String str = AsnFormatter . BinaryToString ( _complexRawData ) ;
88- Assert . AreEqual ( COMPLEX_HEX_RAW , str . TrimEnd ( ) ) ;
89- str = AsnFormatter . BinaryToString ( _complexRawData , forceUpperCase : true ) ;
90- Assert . AreEqual ( COMPLEX_HEX_RAW . ToUpper ( ) , str . TrimEnd ( ) ) ;
76+ runTest ( _complexRawData , EncodingType . HexRaw , COMPLEX_HEX_RAW , true ) ;
9177 }
9278 [ TestMethod ]
9379 public void TestComplexHex ( ) {
94- String str = AsnFormatter . BinaryToString ( _complexRawData , EncodingType . Hex ) ;
95- Assert . AreEqual ( COMPLEX_HEX , str . TrimEnd ( ) ) ;
96- str = AsnFormatter . BinaryToString ( _complexRawData , EncodingType . Hex , forceUpperCase : true ) ;
97- Assert . AreEqual ( COMPLEX_HEX . ToUpper ( ) , str . TrimEnd ( ) ) ;
80+ runTest ( _complexRawData , EncodingType . Hex , COMPLEX_HEX , true ) ;
9881 }
9982 [ TestMethod ]
10083 public void TestComplexHexAddr ( ) {
101- String str = AsnFormatter . BinaryToString ( _complexRawData , EncodingType . HexAddress ) ;
102- Assert . AreEqual ( COMPLEX_HEX_ADDR , str . TrimEnd ( ) ) ;
103- str = AsnFormatter . BinaryToString ( _complexRawData , EncodingType . HexAddress , forceUpperCase : true ) ;
104- Assert . AreEqual ( COMPLEX_HEX_ADDR . ToUpper ( ) , str . TrimEnd ( ) ) ;
84+ runTest ( _complexRawData , EncodingType . HexAddress , COMPLEX_HEX_ADDR , true ) ;
10585 }
10686 [ TestMethod ]
10787 public void TestComplexHexAscii ( ) {
108- String str = AsnFormatter . BinaryToString ( _complexRawData , EncodingType . HexAscii ) ;
109- Assert . AreEqual ( COMPLEX_HEX_ASCII , str . TrimEnd ( ) ) ;
88+ runTest ( _complexRawData , EncodingType . HexAscii , COMPLEX_HEX_ASCII , false ) ;
11089 }
11190 [ TestMethod ]
11291 public void TestComplexHexAddrAscii ( ) {
113- String str = AsnFormatter . BinaryToString ( _complexRawData , EncodingType . HexAsciiAddress ) ;
114- Assert . AreEqual ( COMPLEX_HEX_ADDR_ASCII , str . TrimEnd ( ) ) ;
92+ runTest ( _complexRawData , EncodingType . HexAsciiAddress , COMPLEX_HEX_ADDR_ASCII , false ) ;
11593 }
94+
95+ void runTest ( Byte [ ] rawData , EncodingType encoding , String expected , Boolean testUppercase ) {
96+ String str = AsnFormatter . BinaryToString ( rawData , encoding ) ;
97+ Assert . AreEqual ( expected , str . TrimEnd ( ) ) ;
98+ EncodingType testedEncoding = AsnFormatter . TestInputString ( str ) ;
99+ EncodingType capiEncoding = tryCapiDecode ( str ) ;
100+ // commented for now. Need research for these tests
101+ //Assert.AreEqual(encoding, testedEncoding);
102+ //Assert.AreEqual(capiEncoding, testedEncoding);
103+ if ( testUppercase ) {
104+ str = AsnFormatter . BinaryToString ( rawData , encoding , forceUpperCase : true ) ;
105+ Assert . AreEqual ( expected . ToUpper ( ) , str . TrimEnd ( ) ) ;
106+ }
107+ }
108+
109+ EncodingType tryCapiDecode ( String s ) {
110+ UInt32 pcbBinary = 0 ;
111+ if ( ! CryptStringToBinary ( s , s . Length , 0x7 , null , ref pcbBinary , out UInt32 pdwSkip , out EncodingType pdwFlags ) ) {
112+ Console . WriteLine ( Marshal . GetLastWin32Error ( ) ) ;
113+ return EncodingType . Binary ;
114+ }
115+
116+ return pdwFlags ;
117+ }
118+ [ DllImport ( "crypt32.dll" , CharSet = CharSet . Auto , SetLastError = true ) ]
119+ static extern Boolean CryptStringToBinary (
120+ [ In ] String pszString ,
121+ [ In ] Int32 cchString ,
122+ [ In ] UInt32 dwFlags ,
123+ [ In ] Byte [ ] ? pbBinary ,
124+ [ In , Out ] ref UInt32 pcbBinary ,
125+ [ Out ] out UInt32 pdwSkip ,
126+ [ Out ] out EncodingType pdwFlags
127+ ) ;
116128}
0 commit comments