$:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib') $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'og', 'lib') require 'test/unit' require 'og' require 'glue/logger' require 'glue/attribute' def VarChar(size) return String, :sql => "VARCHAR(#{ size })" end NotNull = {:sql => "NOT NULL"}.freeze Null = {:sql => "NULL"}.freeze module Test # :nodoc: all class Msg include Og::Unmanageable attr_accessor :owner_oid, Fixnum attr_accessor :val1, :val2, :val3, Fixnum, :sql => "smallint" attr_accessor :title, :body, String attr_accessor :test, String, :sql => "char(10) NOT NULL" attr_accessor :count, Fixnum attr_accessor :create_time, Time # a marshaled property attr_accessor :options, Array # property with macro arguments! attr_accessor :address, VarChar(30), NotNull def initialize @create_time = Time.now @options = [] end end class SubMsg < Msg # to avoid conflicts with tc_og.rb include Og::Unmanageable # duplicate definition with different type! attr_accessor :count, Float # another property attr_accessor :another, Fixnum end class C attr_accessor :name attr_accessor :description end class C attr_accessor :name, String attr_accessor :description, String end class TC_N_Attributes < Test::Unit::TestCase def setup Msg.define_force_methods @msg1 = Msg.new end def teardown @msg1 = nil end def test_props # bug: props for subclasses. # bug: props propagated to base classes. assert(SubMsg.serializable_attributes) assert_equal(Msg.serializable_attributes.size(), SubMsg.serializable_attributes.size() - 1) assert_equal(11, Msg.serializable_attributes.size) assert_equal(12, SubMsg.serializable_attributes.size) # bug: duplicate definition a = SubMsg.serializable_attributes.find { |p| :count == p } assert_equal(Float, SubMsg.ann[SubMsg.serializable_attributes.find { |p| :count == p }].class) # dont force conversion. @msg1.count = 2.4 assert_equal(Float, @msg1.count.class) # force conversion @msg1.__force_count(2.4) assert_equal(Fixnum, @msg1.count.class) end def test_macro_params sql = Msg.ann[Msg.serializable_attributes.find { |p| :address == p}].sql # FIXME: Temporarily dissabled. # assert_equal 'VARCHAR(30) NOT NULL', sql end def test_soc assert_equal String, C.ann.name.class end end end