File: DecoderTest.cs

package info (click to toggle)
mono-reference-assemblies 3.12.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 604,240 kB
  • ctags: 625,505
  • sloc: cs: 3,967,741; xml: 2,793,081; ansic: 418,042; java: 60,435; sh: 14,833; makefile: 11,576; sql: 7,956; perl: 1,467; cpp: 1,446; yacc: 1,203; python: 598; asm: 422; sed: 16; php: 1
file content (149 lines) | stat: -rw-r--r-- 3,581 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
//
// DecoderTest.cs
//
// Author:
//	Atsushi Enomoto  <atsushi@ximian.com>
//
// (C) 2006 Novell, Inc.
// 
using NUnit.Framework;
using System;
using System.Text;

namespace MonoTests.System.Text
{
	[TestFixture]
	public class DecoderTest
	{
#if NET_2_0
		[Test]
		[ExpectedException (typeof (ArgumentNullException))]
		public void ConvertNullChars ()
		{
			int charsUsed, bytesUsed;
			bool done;
			Encoding.UTF8.GetDecoder ().Convert (
				null, 0, 100, new char [100], 0, 100, false,
				out charsUsed, out bytesUsed, out done);
		}

		[Test]
		[ExpectedException (typeof (ArgumentNullException))]
		public void ConvertNullBytes ()
		{
			int charsUsed, bytesUsed;
			bool done;
			Encoding.UTF8.GetDecoder ().Convert (
				new byte [100], 0, 100, null, 0, 100, false,
				out charsUsed, out bytesUsed, out done);
		}

		[Test]
		public void ConvertLimitedDestination ()
		{
			char [] chars = new char [10000];
			byte [] bytes = new byte [10000];

			Decoder conv = new ExposedDecoder ();
			int charsUsed, bytesUsed;
			bool done;

			conv.Convert (bytes, 0, 10000, chars, 0, 1000, true,
				      out charsUsed, out bytesUsed, out done);

			Assert.IsFalse (done, "#1");
			Assert.AreEqual (625, charsUsed, "#2");
			Assert.AreEqual (625, bytesUsed, "#3");
		}

		[Test]
		public void ConvertLimitedDestinationUTF8 ()
		{
			char [] chars = new char [10000];
			byte [] bytes = new byte [10000];

			Decoder conv = Encoding.UTF8.GetDecoder ();
			int charsUsed, bytesUsed;
			bool done;

			conv.Convert (bytes, 0, 10000, chars, 0, 1000, true,
				      out charsUsed, out bytesUsed, out done);

			Assert.IsFalse (done, "#1");
			Assert.AreEqual (1000, charsUsed, "#2");
			Assert.AreEqual (1000, bytesUsed, "#3");
		}


		[Test]
		public void CustomEncodingGetDecoder ()
		{
			var encoding = new CustomEncoding ();
			var decoder = encoding.GetDecoder ();
			Assert.IsNotNull (decoder);
		}

		class ExposedDecoder : Decoder {
			public override int GetCharCount (byte [] bytes, int index, int count)
			{
				return Encoding.UTF8.GetDecoder ().GetCharCount (bytes, index, count);
			}

			public override int GetChars (byte [] bytes, int byteIndex, int byteCount, char [] chars, int charIndex)
			{
				return Encoding.UTF8.GetDecoder ().GetChars (bytes, byteIndex, byteCount, chars, charIndex);
			}
		}

		class CustomEncoding : Encoding {

			public override int GetByteCount (char [] chars, int index, int count)
			{
				throw new NotSupportedException ();
			}

			public override int GetBytes (char [] chars, int charIndex, int charCount, byte [] bytes, int byteIndex)
			{
				throw new NotSupportedException ();
			}

			public override int GetCharCount (byte [] bytes, int index, int count)
			{
				throw new NotSupportedException ();
			}

			public override int GetChars (byte [] bytes, int byteIndex, int byteCount, char [] chars, int charIndex)
			{
				throw new NotSupportedException ();
			}

			public override int GetMaxByteCount (int charCount)
			{
				throw new NotSupportedException ();
			}

			public override int GetMaxCharCount (int byteCount)
			{
				throw new NotSupportedException ();
			}
		}
#endif

		[Test]
		public void Bug10789 ()
		{
			byte[] bytes = new byte[100];
			char[] chars = new char[100];  

			Decoder conv = Encoding.UTF8.GetDecoder ();
			int charsUsed, bytesUsed;
			bool completed;
			
			conv.Convert (bytes, 0, 0, chars, 100, 0, false, out bytesUsed, out charsUsed, out completed);

			Assert.IsTrue (completed, "#1");
			Assert.AreEqual (0, charsUsed, "#2");
			Assert.AreEqual (0, bytesUsed, "#3");
		}
	}
}