]> dev.renevier.net Git - syp.git/blob - openlayers/tests/geom_eq.js
initial commit
[syp.git] / openlayers / tests / geom_eq.js
1 /**
2  * File: xml_eq.js
3  * Adds a xml_eq method to AnotherWay test objects.
4  *
5  */
6
7 (function() {
8     
9     /**
10      * Function assertEqual
11      * Test two objects for equivalence (based on ==).  Throw an exception
12      *     if not equivalent.
13      * 
14      * Parameters:
15      * got - {Object}
16      * expected - {Object}
17      * msg - {String} The message to be thrown.  This message will be appended
18      *     with ": got {got} but expected {expected}" where got and expected are
19      *     replaced with string representations of the above arguments.
20      */
21     function assertEqual(got, expected, msg) {
22         if(got === undefined) {
23             got = "undefined";
24         } else if (got === null) {
25             got = "null";
26         }
27         if(expected === undefined) {
28             expected = "undefined";
29         } else if (expected === null) {
30             expected = "null";
31         }
32         if(got != expected) {
33             throw msg + ": got '" + got + "' but expected '" + expected + "'";
34         }
35     }
36     
37     /**
38      * Function assertGeometryEqual
39      * Test two geometries for equivalence.  Geometries are considered
40      *     equivalent if they are of the same class, and given component
41      *     geometries, if all components are equivalent. Throws a message as
42      *     exception if not equivalent.
43      * 
44      * Parameters:
45      * got - {OpenLayers.Geometry}
46      * expected - {OpenLayers.Geometry}
47      * options - {Object} Optional object for configuring test options.
48      */
49     function assertGeometryEqual(got, expected, options) {
50         
51         var OpenLayers = Test.AnotherWay._g_test_iframe.OpenLayers;
52
53         // compare types
54         assertEqual(typeof got, typeof expected, "Object types mismatch");
55         
56         // compare classes
57         assertEqual(got.CLASS_NAME, expected.CLASS_NAME, "Object class mismatch");
58         
59         if(got instanceof OpenLayers.Geometry.Point) {
60             // compare points
61             assertEqual(got.x, expected.x, "x mismatch");
62             assertEqual(got.y, expected.y, "y mismatch");
63             assertEqual(got.z, expected.z, "z mismatch");
64         } else {
65             // compare components
66             assertEqual(
67                 got.components.length, expected.components.length,
68                 "Component length mismatch for " + got.CLASS_NAME
69             );
70             for(var i=0; i<got.components.length; ++i) {
71                 try {
72                     assertGeometryEqual(
73                         got.components[i], expected.components[i], options
74                     );
75                 } catch(err) {
76                     throw "Bad component " + i + " for " + got.CLASS_NAME + ": " + err;
77                 }
78             }
79         }
80         return true;
81     }
82     
83     /**
84      * Function: Test.AnotherWay._test_object_t.geom_eq
85      * Test if two geometry objects are equivalent.  Tests for same geometry
86      *     class, same number of components (if any), equivalent component
87      *     geometries, and same coordinates.
88      *
89      * (code)
90      * t.geom_eq(got, expected, message);
91      * (end)
92      * 
93      * Parameters:
94      * got - {OpenLayers.Geometry} Any geometry instance.
95      * expected - {OpenLayers.Geometry} The expected geometry.
96      * msg - {String} A message to print with test output.
97      * options - {Object} Optional object for configuring test options.
98      */
99     var proto = Test.AnotherWay._test_object_t.prototype;
100     proto.geom_eq = function(got, expected, msg, options) {        
101         // test geometries for equivalence
102         try {
103             assertGeometryEqual(got, expected, options);
104             this.ok(true, msg);
105         } catch(err) {
106             this.fail(msg + ": " + err);
107         }
108     }
109     
110 })();