summaryrefslogtreecommitdiff
path: root/tests/objects/bug741465.vala
blob: 638d4447db44bb14690569ec255382a71c4fe72a (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
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
[Compact]
abstract class AbstractFoo {
	public int field = 23;
	public abstract int prop { get; set; }
	public abstract unowned string foo ();
}

[Compact]
class Foo : AbstractFoo {
	public override int prop {
		get { return field + 1; }
		set { field = value - 1; }
	}

	public Foo () {
		assert (field == 23);
		field = 37;
		assert (prop == 38);
	}

	public override unowned string foo () {
		return "Foo";
	}
}

[Compact]
class Bar : Foo {
	public override int prop {
		get { return field * 2; }
		set { field = value / 2; }
	}

	public Bar () {
		assert (field == 37);
		field = 42;
		assert (prop == 84);
	}

	public override unowned string foo () {
		return "Bar";
	}
}

[Compact]
class Manam {
	public int field = 23;

	public virtual int prop {
		get { return field + 1; }
		set { field = value - 1; }
	}

	public virtual unowned string foo () {
		return "Manam";
	}

	[NoWrapper]
	public virtual int foo_plain () {
		return 13;
	}
}

[Compact]
class Baz : Manam {
	public override unowned string foo () {
		return "Baz";
	}

	public override int foo_plain () {
		return 23;
	}
}

void main () {
	var foo = new Foo ();
	assert (foo.foo () == "Foo");
	assert (foo.prop == 38);
	foo.prop = 4711;
	assert (foo.field == 4710);

	var bar = new Bar ();
	assert (bar.foo () == "Bar");
	assert (bar.prop == 84);
	bar.prop = 32;
	assert (bar.field == 16);

	var manam = new Manam ();
	assert (manam.foo () == "Manam");
	assert (manam.prop == 24);
	assert (manam.foo_plain () == 13);

	var baz = new Baz ();
	assert (baz.foo () == "Baz");
	baz.prop = 42;
	assert (baz.prop == 42);
	assert (baz.foo_plain () == 23);
}