File: environment_test.rb

package info (click to toggle)
ruby-rgen 0.10.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,428 kB
  • sloc: ruby: 11,344; xml: 1,368; yacc: 72; makefile: 10
file content (90 lines) | stat: -rw-r--r-- 2,320 bytes parent folder | download
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
$:.unshift File.join(File.dirname(__FILE__),"..","lib")

require 'minitest/autorun'
require 'rgen/environment'
require 'rgen/metamodel_builder'

class EnvironmentTest < Minitest::Test

	class Model
		attr_accessor :name
	end
	
	class ModelSub < Model
	end
	
	class ClassSuperA < RGen::MetamodelBuilder::MMBase
	end
	
	class ClassSuperB < RGen::MetamodelBuilder::MMBase
	end
	
	class ClassC < RGen::MetamodelBuilder::MMMultiple(ClassSuperA, ClassSuperB)
		has_attr 'name', String
	end
	
	class ClassSubD < ClassC
	end
	
	class ClassSubE < ClassC
	end

	def test_find_mmbase
		env = RGen::Environment.new
		mA1 = env.new(ClassSuperA)
		mB1 = env.new(ClassSuperB)
		mD1 = env.new(ClassSubD, :name => "mD1")
		mD2 = env.new(ClassSubD, :name => "mD2")
		mE = env.new(ClassSubE, :name => "mE")
		
		resultA = env.find(:class => ClassSuperA)
		assert_equal sortById([mA1,mD1,mD2,mE]), sortById(resultA)
		resultNamedA = env.find(:class => ClassSuperA, :name => "mD1")
		assert_equal sortById([mD1]), sortById(resultNamedA)
		
		resultB = env.find(:class => ClassSuperB)
		assert_equal sortById([mB1,mD1,mD2,mE]), sortById(resultB)
		resultNamedB = env.find(:class => ClassSuperB, :name => "mD1")
		assert_equal sortById([mD1]), sortById(resultNamedB)
		
		resultC = env.find(:class => ClassC)
		assert_equal sortById([mD1,mD2,mE]), sortById(resultC)
		
		resultD = env.find(:class => ClassSubD)
		assert_equal sortById([mD1,mD2]), sortById(resultD)
	end
	
	def test_find
		m1 = Model.new
		m1.name = "M1"
		m2 = ModelSub.new
		m2.name = "M2"
		m3 = "justAString"
		env = RGen::Environment.new << m1 << m2 << m3
		
		result = env.find(:class => Model, :name => "M1")
		assert result.is_a?(Array)
		assert_equal 1, result.size
		assert_equal m1, result.first

		result = env.find(:class => Model)
		assert result.is_a?(Array)
		assert_equal sortById([m1,m2]), sortById(result)
		
		result = env.find(:name => "M2")
		assert result.is_a?(Array)
		assert_equal 1, result.size
		assert_equal m2, result.first		
		
		result = env.find(:class => [Model, String])
		assert result.is_a?(Array)
		assert_equal sortById([m1,m2,m3]), sortById(result)
	end
	
	private
	
	def sortById(array)
		array.sort{|a,b| a.object_id <=> b.object_id}
	end
	
end