summaryrefslogtreecommitdiff
path: root/mcs/tests/test-188.cs
blob: e33e525582eb067efe4098784f13e8a32bbfc768 (plain)
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
//
// Test that the foreach statement generated by mcs invokes the Dispose()
// method even if the enumerator class returned by GetEnumerator () does not
// implement IDisposable.
//

using System;

public class Enumerator {

	int counter;

	public Enumerator () {
		counter = 3;
	}

	public bool MoveNext () {
		return (counter -- > 0);
	}

	public char Current {
		get {
			return 'a';
		}
	}
}

class RealEnumerator : Enumerator, IDisposable {

	Coll c;

	public RealEnumerator (Coll c) {
		this.c = c;
	}

	public void Dispose () {
		c.disposed = true;
	}
}

public class Coll {

	public bool disposed;

	public Enumerator GetEnumerator () {
		return new RealEnumerator (this);
	}
}

class Test {

	public static int Main(String[] args)
	{
		Coll coll = new Coll ();
		foreach (char c in coll) {
		}
		return (coll.disposed ? 0 : 1);
	}
}