Ejemplo n.º 1
0
  void test_access_variable() {
    AccessVariable* av = AccessVariable::allocate(state);

    Arguments args(state->symbol("blah"), G(object));

    av->name(state, state->symbol("@blah"));

    G(object)->set_ivar(state, av->name(), state->symbol("Sweet"));

    Object* ret = av->execute(state, av, G(object), args);
    TS_ASSERT(try_as<Symbol>(ret));

    TS_ASSERT_EQUALS(std::string("Sweet"), as<Symbol>(ret)->cpp_str(state));
  }
Ejemplo n.º 2
0
    void test_access_variable_is_slot() {
        AccessVariable* av = AccessVariable::allocate(state);
        Task* task = Task::create(state, 10);
        Message msg(state);
        msg.recv = G(object);
        msg.method = av;
        msg.use_from_task(task, 0);
        av->name(state, state->symbol("@name"));

        TS_ASSERT(!av->execute(state, task, msg));
        Object* ret = task->pop();
        TS_ASSERT(try_as<Symbol>(ret));

        TS_ASSERT_EQUALS(std::string("Object"), as<Symbol>(ret)->c_str(state));
    }
Ejemplo n.º 3
0
  void test_write_variable() {
    AccessVariable* av = AccessVariable::allocate(state);

    Symbol* val = state->symbol("Blah");
    Object* ary[1] = {val};
    Arguments args(state->symbol("blah"), G(object), 1, ary);

    av->name(state, state->symbol("@blah"));
    av->write(state, cTrue);

    Object* ret = av->execute(state, av, G(object), args);
    TS_ASSERT_EQUALS(ret, val);

    Symbol* out = as<Symbol>(G(object)->get_ivar(state, av->name()));
    TS_ASSERT_EQUALS(val, out);
  }
Ejemplo n.º 4
0
    void test_write_variable_is_slot() {
        AccessVariable* av = AccessVariable::allocate(state);
        Task* task = Task::create(state, 10);
        Message msg(state);
        msg.recv = G(object);
        msg.method = av;
        msg.use_from_task(task, 0);
        av->name(state, state->symbol("@name"));
        av->write(state, Qtrue);

        Symbol* val = state->symbol("Blah");

        msg.unshift_argument(state, val);

        TS_ASSERT(!av->execute(state, task, msg));
        Object* ret = task->pop();
        TS_ASSERT_EQUALS(ret, val);

        TS_ASSERT_EQUALS(val, G(object)->name());
    }