intermine 0.98.01

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,29 @@
1
+ {"lists":[
2
+ {
3
+ "name":"test-list-1",
4
+ "title":"test1",
5
+ "description":"An example test list",
6
+ "type": "Employee",
7
+ "size": 42,
8
+ "dateCreated": "2011-05-07T19:52:03",
9
+ "authorized": true,
10
+ "tags": ["tag1", "tag2", "tag3"]
11
+ },
12
+ {
13
+ "name":"test-list-2",
14
+ "title":"test2",
15
+ "description":"Another example test list",
16
+ "type": "Manager",
17
+ "size": 7,
18
+ "dateCreated": "2011-05-07T10:11:12",
19
+ "authorized": false
20
+ },
21
+ {
22
+ "name":"test-list-3",
23
+ "title":"test3",
24
+ "description":"Yet Another example test list",
25
+ "type": "CEO",
26
+ "size": 8,
27
+ "dateCreated": "2011-05-07T10:11:12"
28
+ }
29
+ ],"wasSuccessful":true,"error":null,"statusCode":200}
@@ -0,0 +1,3 @@
1
+ {"model":{
2
+ "name":"testmodel","classes":{"Broke":{"name":"Broke","extends":[],"isInterface":true,"attributes":{"debt":{"name":"debt","type":"int"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{"bank":{"name":"bank","referencedType":"Bank","reverseReference":"debtors"}},"collections":{}},"Thing":{"name":"Thing","extends":[],"isInterface":true,"attributes":{"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{}},"Employable":{"name":"Employable","extends":["Thing"],"isInterface":true,"attributes":{"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{}},"HasAddress":{"name":"HasAddress","extends":[],"isInterface":true,"attributes":{"id":{"name":"id","type":"java.lang.Integer"}},"references":{"address":{"name":"address","referencedType":"Address"}},"collections":{}},"HasSecretarys":{"name":"HasSecretarys","extends":[],"isInterface":true,"attributes":{"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{"secretarys":{"name":"secretarys","referencedType":"Secretary"}}},"Contractor":{"name":"Contractor","extends":["Employable","ImportantPerson"],"isInterface":false,"attributes":{"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"},"seniority":{"name":"seniority","type":"java.lang.Integer"}},"references":{"personalAddress":{"name":"personalAddress","referencedType":"Address"},"businessAddress":{"name":"businessAddress","referencedType":"Address"}},"collections":{"companys":{"name":"companys","referencedType":"Company","reverseReference":"contractors"},"oldComs":{"name":"oldComs","referencedType":"Company","reverseReference":"oldContracts"}}},"Manager":{"name":"Manager","extends":["Employee","ImportantPerson"],"isInterface":false,"attributes":{"title":{"name":"title","type":"java.lang.String"},"fullTime":{"name":"fullTime","type":"boolean"},"age":{"name":"age","type":"int"},"end":{"name":"end","type":"java.lang.String"},"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"},"seniority":{"name":"seniority","type":"java.lang.Integer"}},"references":{"department":{"name":"department","referencedType":"Department","reverseReference":"employees"},"departmentThatRejectedMe":{"name":"departmentThatRejectedMe","referencedType":"Department","reverseReference":"rejectedEmployee"},"address":{"name":"address","referencedType":"Address"}},"collections":{"simpleObjects":{"name":"simpleObjects","referencedType":"SimpleObject","reverseReference":"employee"}}},"Employee":{"name":"Employee","extends":["Employable","HasAddress"],"isInterface":false,"attributes":{"fullTime":{"name":"fullTime","type":"boolean"},"age":{"name":"age","type":"int"},"end":{"name":"end","type":"java.lang.String"},"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{"department":{"name":"department","referencedType":"Department","reverseReference":"employees"},"departmentThatRejectedMe":{"name":"departmentThatRejectedMe","referencedType":"Department","reverseReference":"rejectedEmployee"},"address":{"name":"address","referencedType":"Address"}},"collections":{"simpleObjects":{"name":"simpleObjects","referencedType":"SimpleObject","reverseReference":"employee"}}},"Department":{"name":"Department","extends":["RandomInterface"],"isInterface":false,"attributes":{"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{"company":{"name":"company","referencedType":"Company","reverseReference":"departments"},"manager":{"name":"manager","referencedType":"Manager"}},"collections":{"employees":{"name":"employees","referencedType":"Employee","reverseReference":"department"},"rejectedEmployee":{"name":"rejectedEmployee","referencedType":"Employee","reverseReference":"departmentThatRejectedMe"}}},"Company":{"name":"Company","extends":["RandomInterface","HasAddress","HasSecretarys"],"isInterface":true,"attributes":{"name":{"name":"name","type":"java.lang.String"},"vatNumber":{"name":"vatNumber","type":"int"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{"CEO":{"name":"CEO","referencedType":"CEO","reverseReference":"company"},"address":{"name":"address","referencedType":"Address"}},"collections":{"departments":{"name":"departments","referencedType":"Department","reverseReference":"company"},"contractors":{"name":"contractors","referencedType":"Contractor","reverseReference":"companys"},"oldContracts":{"name":"oldContracts","referencedType":"Contractor","reverseReference":"oldComs"},"secretarys":{"name":"secretarys","referencedType":"Secretary"}}},"Address":{"name":"Address","extends":["Thing"],"isInterface":false,"attributes":{"address":{"name":"address","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{}},"RandomInterface":{"name":"RandomInterface","extends":[],"isInterface":true,"attributes":{"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{}},"CEO":{"name":"CEO","extends":["Manager","HasSecretarys"],"isInterface":false,"attributes":{"salary":{"name":"salary","type":"int"},"title":{"name":"title","type":"java.lang.String"},"fullTime":{"name":"fullTime","type":"boolean"},"age":{"name":"age","type":"int"},"end":{"name":"end","type":"java.lang.String"},"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"},"seniority":{"name":"seniority","type":"java.lang.Integer"}},"references":{"company":{"name":"company","referencedType":"Company","reverseReference":"CEO"},"department":{"name":"department","referencedType":"Department","reverseReference":"employees"},"departmentThatRejectedMe":{"name":"departmentThatRejectedMe","referencedType":"Department","reverseReference":"rejectedEmployee"},"address":{"name":"address","referencedType":"Address"}},"collections":{"simpleObjects":{"name":"simpleObjects","referencedType":"SimpleObject","reverseReference":"employee"},"secretarys":{"name":"secretarys","referencedType":"Secretary"}}},"ImportantPerson":{"name":"ImportantPerson","extends":[],"isInterface":true,"attributes":{"seniority":{"name":"seniority","type":"java.lang.Integer"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{}},"Secretary":{"name":"Secretary","extends":[],"isInterface":false,"attributes":{"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{}},"Types":{"name":"Types","extends":[],"isInterface":false,"attributes":{"name":{"name":"name","type":"java.lang.String"},"booleanType":{"name":"booleanType","type":"boolean"},"floatType":{"name":"floatType","type":"float"},"doubleType":{"name":"doubleType","type":"double"},"shortType":{"name":"shortType","type":"short"},"intType":{"name":"intType","type":"int"},"longType":{"name":"longType","type":"long"},"booleanObjType":{"name":"booleanObjType","type":"java.lang.Boolean"},"floatObjType":{"name":"floatObjType","type":"java.lang.Float"},"doubleObjType":{"name":"doubleObjType","type":"java.lang.Double"},"shortObjType":{"name":"shortObjType","type":"java.lang.Short"},"intObjType":{"name":"intObjType","type":"java.lang.Integer"},"longObjType":{"name":"longObjType","type":"java.lang.Long"},"bigDecimalObjType":{"name":"bigDecimalObjType","type":"java.math.BigDecimal"},"dateObjType":{"name":"dateObjType","type":"java.util.Date"},"stringObjType":{"name":"stringObjType","type":"java.lang.String"},"clobObjType":{"name":"clobObjType","type":"org.intermine.objectstore.query.ClobAccess"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{}},"Bank":{"name":"Bank","extends":[],"isInterface":false,"attributes":{"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{"debtors":{"name":"debtors","referencedType":"Broke","reverseReference":"bank"}}},"SimpleObject":{"name":"SimpleObject","extends":["java.lang.Object"],"isInterface":false,"attributes":{"name":{"name":"name","type":"java.lang.String"}},"references":{"employee":{"name":"employee","referencedType":"Employee","reverseReference":"simpleObjects"}},"collections":{}},"Range":{"name":"Range","extends":[],"isInterface":false,"attributes":{"rangeStart":{"name":"rangeStart","type":"int"},"rangeEnd":{"name":"rangeEnd","type":"int"},"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{"parent":{"name":"parent","referencedType":"Company"}},"collections":{}}}
3
+ },"wasSuccessful":true,"error":null,"statusCode":200}
@@ -0,0 +1,3 @@
1
+ {"rootClass":"Pathway","modelName":"genomic","start":0,"views":["Pathway.identifier","Pathway.name","Pathway.genes.secondaryIdentifier","Pathway.genes.symbol"],"results":[
2
+ {"objectId":388000112,"genes":[{"symbol":"CG12398","objectId":355194908,"class":"Gene","secondaryIdentifier":"CG12398"},{"symbol":"Zw","objectId":355077327,"class":"Gene","secondaryIdentifier":"CG12529"},{"symbol":"CG12539","objectId":355713082,"class":"Gene","secondaryIdentifier":"CG12539"},{"symbol":"CG13369","objectId":355219881,"class":"Gene","secondaryIdentifier":"CG13369"},{"symbol":"CG15093","objectId":355220032,"class":"Gene","secondaryIdentifier":"CG15093"},{"symbol":"CG17010","objectId":355512718,"class":"Gene","secondaryIdentifier":"CG17010"},{"symbol":"CG17333","objectId":355223984,"class":"Gene","secondaryIdentifier":"CG17333"},{"symbol":"Tal","objectId":355205655,"class":"Gene","secondaryIdentifier":"CG2827"},{"symbol":"CG30410","objectId":355505527,"class":"Gene","secondaryIdentifier":"CG30410"},{"symbol":"CG30499","objectId":355006231,"class":"Gene","secondaryIdentifier":"CG30499"},{"symbol":"fbp","objectId":355206294,"class":"Gene","secondaryIdentifier":"CG31692"},{"symbol":"Pgd","objectId":355110188,"class":"Gene","secondaryIdentifier":"CG3724"},{"symbol":"Pfk","objectId":355129877,"class":"Gene","secondaryIdentifier":"CG4001"},{"symbol":"CG5103","objectId":355532927,"class":"Gene","secondaryIdentifier":"CG5103"},{"symbol":"Pgm","objectId":355115908,"class":"Gene","secondaryIdentifier":"CG5165"},{"symbol":"CG5432","objectId":355442677,"class":"Gene","secondaryIdentifier":"CG5432"},{"symbol":"Ald","objectId":355087230,"class":"Gene","secondaryIdentifier":"CG6058"},{"symbol":"CG6767","objectId":355117375,"class":"Gene","secondaryIdentifier":"CG6767"},{"symbol":"CG7140","objectId":355023087,"class":"Gene","secondaryIdentifier":"CG7140"},{"symbol":"CG8036","objectId":355032410,"class":"Gene","secondaryIdentifier":"CG8036"},{"symbol":"Pgi","objectId":355130643,"class":"Gene","secondaryIdentifier":"CG8251"},{"symbol":"CG8525","objectId":355214438,"class":"Gene","secondaryIdentifier":"CG8525"}],"name":"Pentose phosphate pathway","class":"Pathway","identifier":"00030"}
3
+ ],"executionTime":"2011.07.13 10:03::13","wasSuccessful":true,"error":null,"statusCode":200}
@@ -0,0 +1 @@
1
+ [{"id":320000014,"value":"DepartmentA1","class":"Department","url":"/report.do?id=320000014"},{"id":320000015,"value":"EmployeeA1","class":"Manager","url":"/report.do?id=320000015"}]
@@ -0,0 +1,3 @@
1
+ {"rootClass":"Company","modelName":"testmodel","start":0,"views":["Company.departments.name","Company.departments.manager.name"],"results":[
2
+ [{"id":320000014,"value":"DepartmentA1","class":"Department","url":"/report.do?id=320000014"},{"id":320000015,"value":"EmployeeA1","class":"Manager","url":"/report.do?id=320000015"}]
3
+ ],"executionTime":"2011.07.09 11:52::30","wasSuccessful":true,"error":null,"statusCode":200}
@@ -0,0 +1,94 @@
1
+ <model name="testmodel" package="org.intermine.model.testmodel">
2
+ <class name="Broke" is-interface="true">
3
+ <attribute name="debt" type="int"/>
4
+ <reference name="bank" referenced-type="Bank" reverse-reference="debtors"/>
5
+ </class>
6
+ <class name="Thing" is-interface="true"></class>
7
+ <class name="Employable" extends="Thing" is-interface="true">
8
+ <attribute name="name" type="java.lang.String"/>
9
+ </class>
10
+ <class name="HasAddress" is-interface="true">
11
+ <reference name="address" referenced-type="Address"/>
12
+ </class>
13
+ <class name="HasSecretarys" is-interface="true">
14
+ <collection name="secretarys" referenced-type="Secretary"/>
15
+ </class>
16
+ <class name="Contractor" extends="Employable ImportantPerson" is-interface="false">
17
+ <reference name="personalAddress" referenced-type="Address"/>
18
+ <reference name="businessAddress" referenced-type="Address"/>
19
+ <collection name="companys" referenced-type="Company" reverse-reference="contractors"/>
20
+ <collection name="oldComs" referenced-type="Company" reverse-reference="oldContracts"/>
21
+ </class>
22
+ <class name="Manager" extends="Employee ImportantPerson" is-interface="false">
23
+ <attribute name="title" type="java.lang.String"/>
24
+ </class>
25
+ <class name="Employee" extends="Employable HasAddress" is-interface="false">
26
+ <attribute name="fullTime" type="boolean"/>
27
+ <attribute name="age" type="int"/>
28
+ <attribute name="end" type="java.lang.String"/>
29
+ <reference name="department" referenced-type="Department" reverse-reference="employees"/>
30
+ <reference name="departmentThatRejectedMe" referenced-type="Department" reverse-reference="rejectedEmployee"/>
31
+ <collection name="simpleObjects" referenced-type="SimpleObject" reverse-reference="employee"/>
32
+ </class>
33
+ <class name="Department" extends="RandomInterface" is-interface="false">
34
+ <attribute name="name" type="java.lang.String"/>
35
+ <reference name="company" referenced-type="Company" reverse-reference="departments"/>
36
+ <reference name="manager" referenced-type="Manager"/>
37
+ <collection name="employees" referenced-type="Employee" reverse-reference="department"/>
38
+ <collection name="rejectedEmployees" referenced-type="Employee" reverse-reference="departmentThatRejectedMe"/>
39
+ </class>
40
+ <class name="Company" extends="RandomInterface HasAddress HasSecretarys" is-interface="true">
41
+ <attribute name="name" type="java.lang.String"/>
42
+ <attribute name="vatNumber" type="int"/>
43
+ <reference name="CEO" referenced-type="CEO" reverse-reference="company"/>
44
+ <collection name="departments" referenced-type="Department" reverse-reference="company"/>
45
+ <collection name="contractors" referenced-type="Contractor" reverse-reference="companys"/>
46
+ <collection name="oldContracts" referenced-type="Contractor" reverse-reference="oldComs"/>
47
+ </class>
48
+ <class name="Address" extends="Thing" is-interface="false">
49
+ <attribute name="address" type="java.lang.String"/>
50
+ </class>
51
+ <class name="RandomInterface" is-interface="true"></class>
52
+ <class name="CEO" extends="Manager HasSecretarys" is-interface="false">
53
+ <attribute name="salary" type="int"/>
54
+ <reference name="company" referenced-type="Company" reverse-reference="CEO"/>
55
+ </class>
56
+ <class name="ImportantPerson" is-interface="true">
57
+ <attribute name="seniority" type="java.lang.Integer"/>
58
+ </class>
59
+ <class name="Secretary" is-interface="false">
60
+ <attribute name="name" type="java.lang.String"/>
61
+ </class>
62
+ <class name="Types" is-interface="false">
63
+ <attribute name="name" type="java.lang.String"/>
64
+ <attribute name="booleanType" type="boolean"/>
65
+ <attribute name="floatType" type="float"/>
66
+ <attribute name="doubleType" type="double"/>
67
+ <attribute name="shortType" type="short"/>
68
+ <attribute name="intType" type="int"/>
69
+ <attribute name="longType" type="long"/>
70
+ <attribute name="booleanObjType" type="java.lang.Boolean"/>
71
+ <attribute name="floatObjType" type="java.lang.Float"/>
72
+ <attribute name="doubleObjType" type="java.lang.Double"/>
73
+ <attribute name="shortObjType" type="java.lang.Short"/>
74
+ <attribute name="intObjType" type="java.lang.Integer"/>
75
+ <attribute name="longObjType" type="java.lang.Long"/>
76
+ <attribute name="bigDecimalObjType" type="java.math.BigDecimal"/>
77
+ <attribute name="dateObjType" type="java.util.Date"/>
78
+ <attribute name="stringObjType" type="java.lang.String"/>
79
+ </class>
80
+ <class name="Bank" is-interface="false">
81
+ <attribute name="name" type="java.lang.String"/>
82
+ <collection name="debtors" referenced-type="Broke" reverse-reference="bank"/>
83
+ </class>
84
+ <class name="SimpleObject" is-interface="false" extends="java.lang.Object">
85
+ <attribute name="name" type="java.lang.String"/>
86
+ <reference name="employee" referenced-type="Employee" reverse-reference="simpleObjects"/>
87
+ </class>
88
+ <class name="Range" is-interface="false">
89
+ <attribute name="rangeStart" type="int"/>
90
+ <attribute name="rangeEnd" type="int"/>
91
+ <attribute name="name" type="java.lang.String"/>
92
+ <reference name="parent" referenced-type="Company"/>
93
+ </class>
94
+ </model>
@@ -0,0 +1,35 @@
1
+ require File.dirname(__FILE__) + "/test_helper.rb"
2
+
3
+ require "test/unit"
4
+ require "intermine/service"
5
+
6
+ class LiveTest < Test::Unit::TestCase
7
+
8
+ def setup
9
+ @service = Service.new("www.flymine.org/query")
10
+ end
11
+
12
+ # Tests a number of integrated features:
13
+ # * Getting a template
14
+ # * Passing template parameters
15
+ # * getting counts
16
+ # * getting rows
17
+ # * getting records
18
+ #
19
+ def testBigResultSet
20
+ template = @service.template("Chromosome_Gene")
21
+ args = {"A" => {"!=" => '2L'}}
22
+ size = template.count(args)
23
+ i = 0
24
+ template.each_row(args) do |r|
25
+ i += 1
26
+ end
27
+ assert_equal(size, i)
28
+ i = 0
29
+ template.each_result(args) do |r|
30
+ i += 1
31
+ end
32
+ assert_equal(size, i)
33
+ end
34
+ end
35
+
@@ -0,0 +1,84 @@
1
+ require "query"
2
+ require "model"
3
+
4
+ query = PathQuery::Query.new("Employee")
5
+ query.name = "Ruby Query"
6
+ query.model = "testmodel"
7
+ query.title = "A query made in ruby"
8
+ query.sort_order = "Employee asc"
9
+ query.add_views("Employee.name", "Employee.age")
10
+ query.add_views("fullTime", "department.name")
11
+
12
+ bin_params = {:path => "Employee.name", :op => "=", :value => "Foo"}
13
+ bin2_params = {:path => "age", :op => ">", :value => "26"}
14
+ unary_params = {:path => "Employee.name", :op => "IS NULL"}
15
+ sub_params = {:path => "Employee", :sub_class => "Manager"}
16
+ lookup_params = {:path => "Employee", :op => "LOOKUP", :extra_value => "Foo", :value => "bar" }
17
+ lookup_params2 = {:path => "Employee", :op => "LOOKUP", :value => "bar" }
18
+ multi_params = {:path => "Employee.name", :op => "ONE OF", :values => ["one", "two", "three"]}
19
+ loop_params = {:path => "Employee.name", :op => "IS", :loopPath => "Manager"}
20
+ list_params = {:path => "Employee.name", :op => "IN", :value => "a list"}
21
+
22
+ query.add_constraint(bin_params)
23
+ query.add_constraint(bin2_params)
24
+ query.add_constraint(sub_params)
25
+ query.add_constraint(lookup_params)
26
+ query.add_constraint(lookup_params2)
27
+ query.add_constraint(multi_params)
28
+ query.add_constraint(unary_params)
29
+ query.add_constraint(loop_params)
30
+ query.add_constraint(list_params)
31
+
32
+ query.add_join("Employee.department", "OUTER")
33
+ query.add_join("Employee.department.company")
34
+ query.add_join("Employee.department.company", "INNER")
35
+
36
+ puts query.to_xml
37
+
38
+ file = File.new("model.json", "r")
39
+
40
+ data = file.read
41
+ model = Model.new(data)
42
+
43
+ p model.get_class("Employee").get_field("department").referencedType
44
+ p model.get_class("Employee").get_field("department").reverseReference
45
+ p model.get_class("Employee").get_field("department").referencedType.get_field("company").referencedType
46
+ p model.get_class("Employee").get_field("department").referencedType.get_field("company").referencedType.name
47
+
48
+ path = Path.new("Employee.name", model)
49
+ puts path, path.length
50
+
51
+ path = Path.new("Employee.department.company.departments", model)
52
+ puts path, path.length
53
+
54
+ path = Path.new("Employee.department.company.departments.employees.address.address", model)
55
+ puts path, path.length
56
+
57
+ path = Path.new("Department.employees.seniority", model, {"Department.employees" => "Manager"})
58
+ puts path, path.length
59
+
60
+ begin
61
+ path = Path.new("Department.employees.foo", model, {"Department.employees" => "Manager"})
62
+ rescue Exception => e
63
+ p e
64
+ end
65
+
66
+ begin
67
+ path = Path.new("Department.employees.seniority", model, {"Department.employees" => "Foo"})
68
+ rescue Exception => e
69
+ p e
70
+ end
71
+
72
+ begin
73
+ path = Path.new("Employee.department.name.departments", model)
74
+ rescue Exception => e
75
+ p e
76
+ end
77
+
78
+ begin
79
+ path = Path.new("Foo.bar", model)
80
+ rescue Exception => e
81
+ p e
82
+ end
83
+
84
+
@@ -0,0 +1,67 @@
1
+ $LOAD_PATH << File.expand_path( File.dirname(__FILE__) + '/../lib' )
2
+ require "rexml/document"
3
+ require "test/unit"
4
+
5
+ include Test::Unit::Assertions
6
+
7
+ def compare_xml(a, b)
8
+ require "rexml/document"
9
+ docA = REXML::Document.new(a.to_s)
10
+ docB = REXML::Document.new(b.to_s)
11
+
12
+ a_elems = docA.elements.to_a
13
+ b_elems = docB.elements.to_a
14
+
15
+ (0 ... a_elems.size).each do |idx|
16
+ compare_elements(a_elems[idx], b_elems[idx])
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def fail_xml_compare(elemA, elemB, problem, e)
23
+ formatter = REXML::Formatters::Pretty.new
24
+ elemA_str = String.new
25
+ elemB_str = String.new
26
+ formatter.write(elemA, elemA_str)
27
+ formatter.write(elemB, elemB_str)
28
+ first_part = "#{elemA_str}\nis not equal to\n#{elemB_str}\n"
29
+
30
+ raise Test::Unit::AssertionFailedError, "#{first_part}because #{problem} - #{e.message}"
31
+ end
32
+
33
+ def compare_elements(elemA, elemB)
34
+
35
+ begin
36
+ assert_equal(elemA.name, elemB.name)
37
+ rescue Test::Unit::AssertionFailedError => e
38
+ fail_xml_compare(elemA, elemB, "names of element differ", e)
39
+ end
40
+
41
+ begin
42
+ assert_equal(elemA.attributes, elemB.attributes)
43
+ rescue Test::Unit::AssertionFailedError => e
44
+ fail_xml_compare(elemA, elemB, "attributes of element differ", e)
45
+ end
46
+
47
+ begin
48
+ assert_equal(elemA.text, elemB.text)
49
+ rescue Test::Unit::AssertionFailedError => e
50
+ fail_xml_compare(elemA, elemB, "text contents of element differ", e)
51
+ end
52
+
53
+ begin
54
+ assert_equal(elemA.elements.size, elemB.elements.size)
55
+ rescue Test::Unit::AssertionFailedError => e
56
+ fail_xml_compare(elemA, elemB, "number of children of element differ", e)
57
+ end
58
+
59
+ a_elems = elemA.elements.to_a
60
+ b_elems = elemB.elements.to_a
61
+
62
+ (0 ... a_elems.size).each do |idx|
63
+ compare_elements(a_elems[idx], b_elems[idx])
64
+ end
65
+ end
66
+
67
+
@@ -0,0 +1,68 @@
1
+ require File.dirname(__FILE__) + "/test_helper.rb"
2
+
3
+ require "test/unit"
4
+ require "intermine/lists"
5
+ require "intermine/model"
6
+ require "intermine/query"
7
+
8
+ include Lists
9
+
10
+ class FakeService
11
+
12
+ attr_reader :get_list_data, :root
13
+
14
+ def initialize(data, model)
15
+ @get_list_data = data
16
+ @model = model
17
+ @root = "FAKE_ROOT"
18
+ end
19
+
20
+ def query(rootClass=nil?)
21
+ return PathQuery::Query.new(@model, rootClass, self)
22
+ end
23
+
24
+ end
25
+
26
+ class TestList < Test::Unit::TestCase
27
+
28
+ def initialize(name)
29
+ super
30
+ d = File.dirname(__FILE__) + "/data"
31
+ lf = File.new(d + "/lists.json", "r")
32
+ mf = File.new(d + "/model.json", "r")
33
+ model = Model.new(mf.read)
34
+ @service = FakeService.new(lf.read, model)
35
+ end
36
+
37
+ def setup
38
+ @manager = ListManager.new(@service)
39
+ end
40
+
41
+ def testParse
42
+ assert_equal(@manager.lists.size, 3)
43
+
44
+ list_a = @manager.lists.first
45
+ assert_equal(list_a.name, "test-list-1")
46
+ assert_equal(list_a.title, "test1")
47
+ assert_equal(list_a.description, "An example test list")
48
+ assert_equal(list_a.size, 42)
49
+ assert_equal(list_a.dateCreated, "2011-05-07T19:52:03")
50
+ assert_equal(list_a.tags, %w{tag1 tag2 tag3})
51
+ assert_equal(list_a.is_authorized?, true)
52
+
53
+ list_b = @manager.lists[1]
54
+ assert_equal(list_b.tags, [])
55
+ assert_equal(list_b.is_authorized?, false)
56
+
57
+ list_c = @manager.lists.last
58
+ assert_equal(list_c.is_authorized?, true)
59
+ end
60
+
61
+ def testListToQuery
62
+ list_a = @manager.lists.first
63
+ q = list_a.query
64
+ expected = %q!<query model='testmodel' view='Employee.name Employee.end Employee.id Employee.fullTime Employee.age' sortOrder='Employee.name ASC'><constraint op='IN' code='A' value='test-list-1' path='Employee'/></query>!
65
+ assert_equal(q.to_xml.to_s, expected)
66
+ end
67
+ end
68
+
@@ -0,0 +1,417 @@
1
+ require File.dirname(__FILE__) + "/test_helper.rb"
2
+ require "intermine/model"
3
+
4
+ require "test/unit"
5
+
6
+ class TestModel < Test::Unit::TestCase
7
+
8
+ def initialize(name)
9
+ super
10
+ file = File.new(
11
+ File.dirname(__FILE__) + "/data/model.json", "r")
12
+ data = file.read
13
+ file.close
14
+ @model = InterMine::Metadata::Model.new(data)
15
+ end
16
+
17
+ def test_parse
18
+ assert_equal(@model.classes.size, 19)
19
+
20
+ dept = @model.get_cd("Department")
21
+ assert_equal("Department", dept.name)
22
+ assert_equal(false, dept.isInterface)
23
+ assert_equal(6, dept.fields.size)
24
+ assert_equal(dept.fields.keys.sort, ["company", "employees", "id", "manager", "name", "rejectedEmployee"])
25
+
26
+ assert_equal(dept.get_field("company").referencedType, @model.get_cd("Company"))
27
+
28
+ manager = @model.get_cd("Manager")
29
+ assert(manager.subclass_of?(@model.get_cd("Employee")))
30
+ assert(manager.subclass_of?("Employee"))
31
+ assert(manager.subclass_of?("HasAddress"))
32
+ assert(!manager.subclass_of?("Company"))
33
+ assert(manager.subclass_of?("Company.departments.employees"))
34
+ assert(!manager.subclass_of?("Company.name"))
35
+ assert_raise(InterMine::Metadata::PathException) {manager.subclass_of?("Foo")}
36
+ end
37
+
38
+ def test_attributes
39
+ dept = @model.get_cd("Department")
40
+ assert_equal(2, dept.attributes.size)
41
+
42
+ manager = @model.get_cd("Manager")
43
+ assert_equal(7, manager.attributes.size)
44
+ end
45
+
46
+ def test_sugar
47
+ dept = @model.get_cd("Department")
48
+
49
+ table = @model.table("Department")
50
+
51
+ assert_equal(dept, table)
52
+ end
53
+
54
+
55
+ def test_good_paths
56
+
57
+ path = InterMine::Metadata::Path.new("Employee.name", @model)
58
+ assert_equal(2, path.length)
59
+ assert_equal("java.lang.String", path.end_type)
60
+
61
+ path = InterMine::Metadata::Path.new("Employee.department.company.departments", @model)
62
+ assert_equal(4, path.length)
63
+ assert_equal("Department", path.end_type)
64
+
65
+ path = InterMine::Metadata::Path.new("Employee.department.company.departments.employees.address.address", @model)
66
+ assert_equal(7, path.length)
67
+ assert_equal("java.lang.String", path.end_type)
68
+
69
+ path = InterMine::Metadata::Path.new("Department.employees.seniority", @model, {"Department.employees" => "Manager"})
70
+ assert_equal(3, path.length)
71
+ assert_equal("java.lang.Integer", path.end_type)
72
+
73
+ path = InterMine::Metadata::Path.new("Department.employees.id", @model)
74
+ assert_equal(3, path.length)
75
+ assert_equal("java.lang.Integer", path.end_type)
76
+
77
+ end
78
+
79
+ def test_bad_paths
80
+
81
+ assert_raise(InterMine::Metadata::PathException) do
82
+ InterMine::Metadata::Path.new("Foo.bar", @model)
83
+ end
84
+
85
+ assert_raise(InterMine::Metadata::PathException) do
86
+ InterMine::Metadata::Path.new("Department.employees.foo", @model, {"Department.employees" => "Manager"})
87
+ end
88
+
89
+ assert_raise(InterMine::Metadata::PathException) do
90
+ InterMine::Metadata::Path.new("Department.employees.seniority", @model, {"Department.employees" => "Foo"})
91
+ end
92
+
93
+ assert_raise(InterMine::Metadata::PathException) do
94
+ InterMine::Metadata::Path.new("Employee.department.name.departments", @model)
95
+ end
96
+
97
+ end
98
+
99
+ def test_item_creation_bean_style
100
+ cd = @model.get_cd("Employee")
101
+ emp_kls = cd.to_class
102
+
103
+ emp = emp_kls.new
104
+ emp.name = "John Doe"
105
+ emp.age = 42
106
+ emp.fullTime = false
107
+
108
+ dep = @model.make_new("Department")
109
+ dep.name = "Sales"
110
+
111
+ emp.department = dep
112
+
113
+ assert_equal(emp.name, "John Doe")
114
+ assert_equal(emp.age, 42)
115
+ assert_equal(emp.fullTime, false)
116
+ assert_equal(emp.department.name, "Sales")
117
+ end
118
+
119
+ def test_item_creation_with_arguments
120
+ emp_kls = @model.get_cd("Employee").to_class
121
+ emp = emp_kls.new({
122
+ "name" => "John Doe",
123
+ "age" => 25,
124
+ "fullTime" => true
125
+ })
126
+ assert_equal(emp.name, "John Doe")
127
+ assert_equal(emp.age, 25)
128
+ assert_equal(emp.fullTime, true)
129
+
130
+ dep_kls = @model.get_cd("Department").to_class
131
+ dep = dep_kls.new({
132
+ "name" => "Sales"
133
+ })
134
+
135
+ emp.department = dep
136
+
137
+ assert_equal(emp.department.name, "Sales")
138
+
139
+ dep.addEmployees(emp)
140
+
141
+ assert_equal(dep.employees.first, emp)
142
+
143
+ emp2 = emp_kls.new({
144
+ "name" => "Jane Doe",
145
+ "age" => 26,
146
+ "fullTime" => false
147
+ })
148
+
149
+ dep.employees = [emp, emp2]
150
+ assert_equal(dep.employees.map { |x| x.name }, ["John Doe", "Jane Doe"])
151
+
152
+ emp3 = emp_kls.new({
153
+ "name" => "Jill Doe",
154
+ "age" => 26,
155
+ "fullTime" => false
156
+ })
157
+ emp4 = emp_kls.new({
158
+ "name" => "Jonas Doe",
159
+ "age" => 26,
160
+ "fullTime" => false
161
+ })
162
+
163
+ dep.addEmployees(emp3, emp4)
164
+ assert_equal(dep.employees.map { |x| x.name }, ["John Doe", "Jane Doe", "Jill Doe", "Jonas Doe"])
165
+ end
166
+
167
+ def test_item_creation_with_nested_coercion
168
+
169
+ emp_kls = @model.get_cd("Employee").to_class
170
+
171
+ emp5 = emp_kls.new({
172
+ "name" => "Jonas Doe",
173
+ "age" => 26,
174
+ "fullTime" => false,
175
+ "department" => { "name" => "Marketing" , "company" => { "name" => "Aperture Science", "vatNumber" => 12345}}
176
+ })
177
+
178
+ assert_equal(emp5.department.name, "Marketing")
179
+ assert_equal(emp5.department.company.name, "Aperture Science")
180
+ assert_equal(emp5.department.company.vatNumber, 12345)
181
+
182
+ dep = @model.get_cd("Department").to_class.new({ "name" => "Sales" })
183
+ dep.addEmployees({ "name" => "Jeremiah Doe", "age" => 42}, { "name" => "Jodie Doe" })
184
+ assert_equal(dep.employees.map { |x| x.name }, ["Jeremiah Doe", "Jodie Doe"])
185
+
186
+ assert_equal(dep.employees.first.age, 42)
187
+ assert_equal(dep.employees.last.age, nil)
188
+ end
189
+
190
+ def test_item_creation_from_model
191
+
192
+ manager = @model.make_new("Manager", {
193
+ "name" => "David Brent",
194
+ "seniority" => 42,
195
+ "age" => 39,
196
+ "fullTime" => true,
197
+ "department" => { "name" => "Sales" }
198
+ })
199
+
200
+ assert_equal(manager.name, "David Brent")
201
+ assert_equal(manager.seniority, 42)
202
+ assert_equal(manager.age, 39)
203
+ assert_equal(manager.fullTime, true)
204
+ assert_equal(manager.department.name, "Sales")
205
+
206
+ dep = @model.make_new("Department", {
207
+ "name" => "Janitorial",
208
+ "employees" => [
209
+ { "name" => "A" },
210
+ { "name" => "B" }
211
+ ]
212
+ })
213
+
214
+ assert_equal(dep.name, "Janitorial")
215
+ assert_equal(dep.employees[0].name, "A")
216
+ assert_equal(dep.employees[1].name, "B")
217
+
218
+ dep.addEmployees({ "name" => "C" })
219
+ assert_equal(dep.employees[2].name, "C")
220
+
221
+ end
222
+
223
+ def test_inheritance
224
+
225
+ manager = @model.make_new("Manager", { "name" => "David Brent" })
226
+ employee = @model.make_new("Employee", { "name" => "Tim Canterbury" })
227
+
228
+ dep = @model.make_new("Department", { "name" => "Sales" })
229
+
230
+ dep.addEmployees(manager, employee)
231
+
232
+ assert_equal(dep.employees[0].name, "David Brent")
233
+ assert_equal(dep.employees[1].name, "Tim Canterbury")
234
+
235
+ mod = @model.get_cd("Employee").to_module
236
+ dep.employees.each do |emp|
237
+ assert_kind_of(mod, emp)
238
+ end
239
+
240
+ assert_kind_of(@model.get_cd("HasAddress").to_module, manager)
241
+
242
+ comp = @model.make_new("Company")
243
+ assert_raise ArgumentError do
244
+ dep.addEmployees(comp)
245
+ end
246
+ end
247
+
248
+ def test_creation_from_hash_alone
249
+
250
+ emp = @model.make_new({
251
+ "class" => "Employee",
252
+ "name" => "John Doe",
253
+ "age" => 25
254
+ })
255
+
256
+ assert_kind_of(@model.get_cd("Employee").to_module, emp)
257
+ assert_equal(emp.name, "John Doe")
258
+ assert_equal(emp.age, 25)
259
+ end
260
+
261
+ def test_prefer_hash_class
262
+
263
+ emp = @model.make_new("Employee", {
264
+ "class" => "Manager",
265
+ "name" => "John Doe",
266
+ "age" => 25
267
+ })
268
+
269
+ assert_kind_of(@model.get_cd("Employee").to_module, emp)
270
+ assert_kind_of(@model.get_cd("Manager").to_module, emp)
271
+ assert_equal(emp.name, "John Doe")
272
+ assert_equal(emp.age, 25)
273
+ end
274
+
275
+ def test_subclass_coercion
276
+
277
+ dep = @model.make_new("Department")
278
+
279
+ dep.addEmployees(
280
+ { "name" => "A" },
281
+ { "class" => "Manager", "name" => "B" },
282
+ { "class" => "CEO", "name" => "C" }
283
+ )
284
+
285
+ assert_equal(dep.employees[0].name, "A")
286
+ assert_equal(dep.employees[1].name, "B")
287
+ assert_equal(dep.employees[2].name, "C")
288
+
289
+ dep.employees.each do |emp|
290
+ assert_kind_of(@model.get_cd("Employee").to_module, emp)
291
+ end
292
+
293
+ dep.employees.slice(1, 2).each do |manager|
294
+ assert_kind_of(@model.get_cd("Manager").to_module, manager)
295
+ end
296
+
297
+ assert_kind_of(@model.get_cd("Manager").to_module, dep.employees.last)
298
+ end
299
+
300
+ def test_overridden_isa
301
+
302
+ manager = @model.make_new("Manager")
303
+
304
+ assert(manager.is_a?(@model.get_cd("Employee")))
305
+ end
306
+
307
+ def test_refuse_to_make_objects_with_conflicting_class_names
308
+
309
+ assert_raise ArgumentError do
310
+ @model.make_new("Employee", { "class" => "Company", "name" => "Aperture Science" })
311
+ end
312
+ end
313
+
314
+ def test_item_ids
315
+
316
+ dep = @model.make_new("Department", {
317
+ "name" => "Sales",
318
+ "objectId" => 12345
319
+ })
320
+
321
+ assert_equal(dep.objectId, 12345)
322
+ end
323
+
324
+ def test_item_creation_problems
325
+
326
+ emp_kls = @model.get_cd("Employee").to_class
327
+
328
+ assert_raise ArgumentError do
329
+ emp_kls.new({
330
+ "name" => "John Doe",
331
+ "age" => "foo",
332
+ })
333
+ end
334
+
335
+ assert_raise ArgumentError do
336
+ emp_kls.new({
337
+ "name" => "John Doe",
338
+ "age" => 14.75
339
+ })
340
+ end
341
+
342
+ assert_raise ArgumentError do
343
+ emp = emp_kls.new
344
+ emp.age = 13.5
345
+ end
346
+
347
+ assert_raise ArgumentError do
348
+ emp_kls.new({
349
+ "name" => "John Doe",
350
+ "fullTime" => "foo",
351
+ })
352
+ end
353
+
354
+ assert_raise NoMethodError do
355
+ emp_kls.new({
356
+ "name" => "Not for this world",
357
+ "foo" => "bar"
358
+ })
359
+ end
360
+
361
+ end
362
+
363
+ def test_path_resolution
364
+
365
+ dep = @model.make_new("Department", {
366
+ "name" => "Sales",
367
+ "company" => {
368
+ "name" => "Werhnam-Hogg",
369
+ "CEO" => {
370
+ "name" => "Jennifer",
371
+ "address" => {
372
+ "address" => "42 Some st"
373
+ }
374
+ }
375
+ },
376
+ "employees" => [
377
+ { "name" => "A" },
378
+ { "name" => "B" }
379
+ ]
380
+ })
381
+
382
+ # Test chained path resolution
383
+ pathstr = "Department.company.CEO.address.address"
384
+ obj = @model.resolve_path(dep, pathstr)
385
+ assert_equal(obj, "42 Some st")
386
+ assert_equal(dep._resolve(pathstr), "42 Some st")
387
+
388
+ # Test resolving using Path objects
389
+ path = InterMine::Metadata::Path.new(pathstr, @model)
390
+ obj = @model.resolve_path(dep, path)
391
+ assert_equal(obj, "42 Some st")
392
+ assert_equal(dep._resolve(path), "42 Some st")
393
+
394
+ # Test resolving items in collections
395
+ pathstr_with_index = "Department.employees[1].name"
396
+ obj = @model.resolve_path(dep, pathstr_with_index)
397
+ assert_equal(obj, "B")
398
+ assert_equal(dep._resolve(pathstr_with_index), "B")
399
+
400
+ # Check bad paths
401
+ assert_raise ArgumentError do
402
+ @model.resolve_path(dep, "Department.company.foo")
403
+ end
404
+
405
+ # Check legal but irrelevant paths
406
+ assert_raise ArgumentError do
407
+ @model.resolve_path(dep, "Employee.department.name")
408
+ end
409
+
410
+ # Check non-indexed collection lookup
411
+ assert_raise ArgumentError do
412
+ @model.resolve_path(dep, "Department.employees.name")
413
+ end
414
+
415
+ end
416
+
417
+ end