| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <title>svg_test.html</title> |
| <link rel="stylesheet" href="/filez/_main/third_party/js/qunit/qunit.css"> |
| <script src="/filez/_main/third_party/js/qunit/qunit.js"></script> |
| <script src="/filez/_main/third_party/js/qunit/qunit_test_runner.js"></script> |
| <script src="test_bootstrap.js"></script> |
| <script type="text/javascript"> |
| goog.require('bot.action'); |
| goog.require('bot.dom'); |
| goog.require('bot.inject'); |
| goog.require('bot.locators'); |
| goog.require('bot.test'); |
| goog.require('goog.userAgent'); |
| </script> |
| <script type="text/javascript"> |
| function assertSvgRectApprox(assert, left, top, width, height, rect) { |
| function assertInRange(desc, min, max, value) { |
| assert.ok(value >= min, desc + ' too small'); |
| assert.ok(value < max, desc + ' too big'); |
| } |
| |
| assertInRange('left', left, left + 10, rect.left); |
| assertInRange('top', top, top + 10, rect.top); |
| assertInRange('width', width - 1, width + 6, rect.width); |
| assertInRange('height', height - 1, height + 6, rect.height); |
| } |
| |
| QUnit.test('svg elements should be visible', function(assert) { |
| if (!bot.test.SUPPORTS_INLINE_SVG) { |
| assert.ok(true, 'Skipping: browser does not support inline SVG'); |
| return; |
| } |
| var element = bot.locators.findElement({id: 'rect'}); |
| assert.ok(bot.dom.isShown(element)); |
| }); |
| |
| QUnit.test('focusing on svg element does not throw', function(assert) { |
| if (!bot.test.SUPPORTS_INLINE_SVG) { |
| assert.ok(true, 'Skipping: browser does not support inline SVG'); |
| return; |
| } |
| var element = bot.locators.findElement({id: 'rect'}); |
| var otherElement = bot.locators.findElement({id: 'text'}); |
| bot.action.focusOnElement(otherElement); |
| bot.action.focusOnElement(element); |
| assert.ok(true); |
| }); |
| |
| QUnit.test('getting text of svg element does not throw', function(assert) { |
| if (!bot.test.SUPPORTS_INLINE_SVG) { |
| assert.ok(true, 'Skipping: browser does not support inline SVG'); |
| return; |
| } |
| var element = bot.locators.findElement({id: 'text'}); |
| bot.dom.getVisibleText(element); |
| assert.ok(true); |
| }); |
| |
| QUnit.test('svg line with zero size bounding box is shown', function(assert) { |
| if (!bot.test.SUPPORTS_INLINE_SVG) { |
| assert.ok(true, 'Skipping: browser does not support inline SVG'); |
| return; |
| } |
| if ((goog.userAgent.WEBKIT && !goog.userAgent.isVersionOrHigher(536)) || |
| (goog.userAgent.GECKO && !goog.userAgent.isVersionOrHigher(17))) { |
| assert.ok(true, 'Skipping: older browser reports incorrect bounding box'); |
| return; |
| } |
| var element = bot.locators.findElement({id: 'path'}); |
| assert.ok(bot.dom.isShown(element)); |
| }); |
| |
| QUnit.test('svg client rect', function(assert) { |
| if (!bot.test.SUPPORTS_INLINE_SVG) { |
| assert.ok(true, 'Skipping: browser does not support inline SVG'); |
| return; |
| } |
| var e = bot.locators.findElement({id: 'rect'}); |
| var rect = bot.dom.getClientRect(e); |
| assertSvgRectApprox(assert, 10, 10, 10, 10, rect); |
| }); |
| |
| QUnit.test('svg client rect of transformed', function(assert) { |
| if (!bot.test.SUPPORTS_INLINE_SVG) { |
| assert.ok(true, 'Skipping: browser does not support inline SVG'); |
| return; |
| } |
| var e = bot.locators.findElement({id: 'transformed'}); |
| var rect = bot.dom.getClientRect(e); |
| assertSvgRectApprox(assert, -10, -10, 10, 10, rect); |
| }); |
| |
| QUnit.test('clicking on element in svg document', function(assert) { |
| if (!bot.test.SUPPORTS_INLINE_SVG) { |
| assert.ok(true, 'Skipping: browser does not support inline SVG'); |
| return; |
| } |
| var frame = window.frames[0]; |
| var rect = bot.locators.findElement({id: 'rect'}, frame.document); |
| assert.strictEqual(rect.getAttribute('fill'), 'blue'); |
| bot.action.click(rect); |
| assert.strictEqual(rect.getAttribute('fill'), 'green'); |
| }); |
| |
| QUnit.test('executing script in svg document', function(assert) { |
| if (!bot.test.SUPPORTS_INLINE_SVG) { |
| assert.ok(true, 'Skipping: browser does not support inline SVG'); |
| return; |
| } |
| var frame = window.frames[0]; |
| var bgEl = bot.locators.findElement({id: 'bg'}, frame.document); |
| |
| assert.strictEqual(bgEl.getAttribute('fill'), 'red'); |
| bot.inject.executeScript( |
| 'document.getElementById("bg").setAttribute("fill", "yellow")', |
| [], false, frame); |
| assert.strictEqual(bgEl.getAttribute('fill'), 'yellow'); |
| }); |
| </script> |
| </head> |
| <body> |
| <div id="qunit"></div> |
| <div id="qunit-fixture"></div> |
| <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> |
| <rect id="rect" fill="red" stroke="none" width="10" height="10" x="10" y="10"/> |
| <text id="text" fill="black" font-size="12" font-family="Arial" x="25" y="20">Apple</text> |
| <path id="path" d="M 100 15 L 200 15" stroke="red" stroke-width="10"/> |
| <rect id="transformed" transform="translate(-20, -20)" fill="green" stroke="none" width="10" height="10" x="10" y="10"/> |
| </svg> |
| <div> |
| <script> |
| var src = bot.test.SUPPORTS_INLINE_SVG ? "testdata/rect.svg" : ""; |
| document.write('<iframe src="' + src + '"></' + 'iframe>'); |
| </script> |
| </div> |
| </body> |
| </html> |