aboutsummaryrefslogtreecommitdiff
path: root/Examples/test-suite/csharp/director_basic_runme.cs
blob: de299b145416fdfe2db0c11b9d85dd4a00bb85cf (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
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
using System;

namespace director_basicNamespace {

public class runme
{
  static void Main() 
  {
    runme r = new runme();
    r.run();
  }

  void run()
  {
    director_basic_MyFoo a = new director_basic_MyFoo();

    if (a.ping() != "director_basic_MyFoo::ping()") {
      throw new Exception ( "a.ping()" );
    }

    if (a.pong() != "Foo::pong();director_basic_MyFoo::ping()") {
      throw new Exception ( "a.pong()" );
    }

    Foo b = new Foo();

    if (b.ping() != "Foo::ping()") {
      throw new Exception ( "b.ping()" );
    }

    if (b.pong() != "Foo::pong();Foo::ping()") {
      throw new Exception ( "b.pong()" );
    }

    A1 a1 = new A1(1, false);
    a1.Dispose();

    {
      MyOverriddenClass my = new MyOverriddenClass();

      my.expectNull = true;
      if (MyClass.call_pmethod(my, null) != null)
        throw new Exception("null pointer marshalling problem");

      Bar myBar = new Bar();
      my.expectNull = false;
      Bar myNewBar = MyClass.call_pmethod(my, myBar);
      if (myNewBar == null)
        throw new Exception("non-null pointer marshalling problem");
      myNewBar.x = 10;

      // Low level implementation check
//      my.testSwigDerivedClassHasMethod();

      // These should not call the C# implementations as they are not overridden
      int v;
      v = MyClass.call_nonVirtual(my);
      if (v != 100) throw new Exception("call_nonVirtual broken() " + v);

      v = MyClass.call_nonOverride(my);
      if (v != 101) throw new Exception("call_nonOverride broken() " + v);

      // A mix of overridden and non-overridden
      MyClassEnd myend = new MyClassEnd();
      MyClass mc = myend;

      v = mc.nonVirtual();
      if (v != 202) throw new Exception("mc.nonVirtual() broken " + v);

      v = MyClass.call_nonVirtual(mc);
      if (v != 202) throw new Exception("call_nonVirtual(mc) broken " + v);

      v = MyClass.call_nonVirtual(myend);
      if (v != 202) throw new Exception("call_nonVirtual(myend) broken" + v);

      v = MyClass.call_nonOverride(mc);
      if (v != 101) throw new Exception("call_nonOverride(mc) broken" + v);

      v = MyClass.call_nonOverride(myend);
      if (v != 101) throw new Exception("call_nonOverride(myend) broken" + v);
    }
  }
}

class director_basic_MyFoo : Foo {
  public director_basic_MyFoo() : base() {
  }

  public override string ping() {
    return "director_basic_MyFoo::ping()";
  }
}

class MyOverriddenClass : MyClass {
  public bool expectNull = false;
  public bool nonNullReceived = false;
  public override Bar pmethod(Bar b) {
    if ( expectNull && (b != null) )
      throw new Exception("null not received as expected");
    return b;
  }

  public new bool nonVirtual() {
    throw new Exception("non-virtual overrides virtual method");
  }

  public new virtual bool nonOverride() {
    throw new Exception("non-override overrides virtual method");
  }
}

class MyClassMiddle : MyClass {
  public override int nonVirtual() {
    return 202;
  }
}

class MyClassEnd : MyClassMiddle {
  public new bool nonVirtual() {
    throw new Exception("non-virtual overrides virtual method");
  }

  public new virtual bool nonOverride() {
    throw new Exception("non-override overrides virtual method");
  }
}

}