Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: dff803d5e636f5c5f38677fca5a0a6f69143b166 (plain) (blame)
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
150
151
/**
 * Test association-related expressions.
 **/
active class Expressions_Association {

    // Supporting declarations *************************************************
    
      class Person { 
          public name: String = "Jack";
          @Create public Person(in name: String[0..1]) {
//            if (name != null) {
//              this.name = name;
//            }
          }
      }
      class House { 
          public id: Integer;
          @Create public House(in id: Integer) {
//              this.id = id;
          }
      }
      class Player specializes Person { 
          @Create public Player(in name: String[0..1]) {
//              super(name);
          }
      }
      class Team { 
          public name: String;
          @Create public Team(in name: String) {
//              this.name = name;
          }
      }
      class Season { 
          public year: Integer;
          @Create public Season(in year: Integer) {
//              this.year = year;
          }
      }
      
      assoc Owns {
          owner: Person;
          house: House;
      }
      
      assoc Owns1 {
          owner1: Person;
          house1: House[*] ordered;
      }
      
      assoc Roster {
          player: Player[*];
          team: Team;
          season: Season[*];
    }
      
    //**************************************************************************

    test(
       out owner: Person, out house: House, 
       out house_a: House, out house_b: House[0..1], 
       out owner1_a: Person, out house1_a: House[*],
       out owner1_b: Person, out house1_b: House[*], out house1_c: House[*],
       out players1_a: Player[*], out players2_a: Player[*],
       out players1_b: Player[*], out players2_b: Player[*]
       ) 
    {
      
      jack = new Person();
      oldHouse = new House(1);
      newHouse = new House(2);
      
      Owns.createLink(jack, oldHouse);
      Owns.createLink(owner=>jack, house=>oldHouse);
      
      house = jack.house;
      owner = Owns::owner(oldHouse);
      
      Owns.createLink(oldHouse.owner, newHouse);
      Owns.createLink(Owns.owner(oldHouse), newHouse);
      
      house_a = jack.house;
      
      Owns.destroyLink(owner=>jack, house=>newHouse);

      house_b = jack.house;
      
      Owns1.createLink(owner1=>jack, house1[1]=>oldHouse);
      Owns1.createLink(owner1=>jack, house1[2]=>newHouse);
      Owns1.createLink(owner1=>jack, house1[1]=>newHouse);
     
      house1_a = jack.house1;
      owner1_a = Owns1::owner1(newHouse);
      
      Owns1.createLink(owner1=>new Person("Jane"), house1[1]=>newHouse);
      
      house1_b = jack.house1;
      owner1_b = Owns1::owner1(newHouse);
      
      Owns1.createLink(owner1=>jack, house1[2]=>new House(3));
      
      house1_c = jack.house1;

      Owns.clearAssoc(jack);
      
      p1 = new Player("Fred");
      p2 = new Player("Marvin");
      t1 = new Team("A");
      t2 = new Team("B");
      y = new Season(2011);
      
      Roster.createLink(p1, t1, y);
      Roster.createLink(p2, t1, y);
      
      players1_a = Roster.player(t1, y);
      players2_a = Roster.player(t2, y);
      
      Roster.createLink(p1, t2, y);
      
      players1_b = Roster.player(t1, y);
      players2_b = Roster.player(t2, y);
      
    }

} do {
    this.test(owner, house, house_a, house_b,
        owner1_a, house1_a, owner1_b, house1_b, house1_c,
        players1_a, players2_a, players1_b, players2_b);
/*    
    AssertEqual("owner.name", owner.name, "Jack");
    AssertEqual("house.id", house.id, 1);
    AssertEqual("house_a.id", house_a.id, 2);
    AssertTrue("house_b->isEmpty()", house_b->isEmpty());
    AssertEqual("owner1_a.name", owner1_a.name, "Jack");
    AssertEqual("house1_a->size()", house1_a->size(), 2);
    AssertEqual("house1_a[1].id", house1_a[1].id, 2);
    AssertEqual("house1_a[2].id", house1_a[2].id, 1);
    AssertEqual("owner1_b.name", owner1_b.name, "Jane");
    AssertEqual("house1_b->size()", house1_b->size(), 1);
    AssertEqual("house1_b[1].id", house1_b[1].id, 1);
    AssertEqual("house1_c->size()", house1_c->size(), 2);
    AssertEqual("house1_c[1].id", house1_c[1].id, 1);
    AssertEqual("house1_c[2].id", house1_c[2].id, 3);

    AssertList("players1_a.name", players1_a.name, String[]{"Fred","Marvin"});
    AssertTrue("players2_a->isEmpty()", players2_a->isEmpty());
    AssertList("players1_b.name", players1_b.name, "Marvin");
    AssertList("players2_b.name", players2_b.name, "Fred");

    WriteLine("Done");
    */
}

Back to the top