All Downloads are FREE. Search and download functionalities are using the official Maven repository.

goog.editor.icontent_test.js Maven / Gradle / Ivy

Go to download

The Google Closure Library is a collection of JavaScript code designed for use with the Google Closure JavaScript Compiler. This non-official distribution was prepared by the ClojureScript team at http://clojure.org/

There is a newer version: 0.0-20230227-c7c0a541
Show newest version
// Copyright 2007 The Closure Library Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS-IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

goog.provide('goog.editor.icontentTest');
goog.setTestOnly('goog.editor.icontentTest');

goog.require('goog.dom');
goog.require('goog.dom.TagName');
goog.require('goog.editor.BrowserFeature');
goog.require('goog.editor.icontent');
goog.require('goog.editor.icontent.FieldFormatInfo');
goog.require('goog.editor.icontent.FieldStyleInfo');
goog.require('goog.testing.PropertyReplacer');
goog.require('goog.testing.jsunit');
goog.require('goog.userAgent');

var wrapperDiv;
var realIframe;
var realIframeDoc;
var propertyReplacer;

function setUp() {
  wrapperDiv = goog.dom.createDom(
      goog.dom.TagName.DIV, null,
      realIframe = goog.dom.createDom(goog.dom.TagName.IFRAME));
  goog.dom.appendChild(document.body, wrapperDiv);
  realIframeDoc = realIframe.contentWindow.document;
  propertyReplacer = new goog.testing.PropertyReplacer();
}

function tearDown() {
  goog.dom.removeNode(wrapperDiv);
  propertyReplacer.reset();
}

function testWriteHttpsInitialIframeContent() {
  // This is not a particularly useful test; it's just a sanity check to make
  // sure nothing explodes
  var info =
      new goog.editor.icontent.FieldFormatInfo('id', false, false, false);
  var doc = createMockDocument();
  goog.editor.icontent.writeHttpsInitialIframe(info, doc, 'some html');
  assertBodyCorrect(doc.body, 'id', 'some html');
}

function testWriteHttpsInitialIframeContentRtl() {
  var info = new goog.editor.icontent.FieldFormatInfo('id', false, false, true);
  var doc = createMockDocument();
  goog.editor.icontent.writeHttpsInitialIframe(info, doc, 'some html');
  assertBodyCorrect(doc.body, 'id', 'some html', true);
}

function testWriteInitialIframeContentBlendedStandardsGrowing() {
  if (goog.editor.BrowserFeature.HAS_CONTENT_EDITABLE) {
    return;  // only executes when using an iframe
  }

  var info = new goog.editor.icontent.FieldFormatInfo('id', true, true, false);
  var styleInfo = new goog.editor.icontent.FieldStyleInfo(
      wrapperDiv, '.MyClass { position: absolute; top: 500px; }');
  var doc = realIframeDoc;
  var html = '
Some Html
'; goog.editor.icontent.writeNormalInitialBlendedIframe( info, html, styleInfo, realIframe); assertBodyCorrect(doc.body, 'id', html); assertEquals('CSS1Compat', doc.compatMode); // standards assertEquals('auto', doc.documentElement.style.height); // growing assertEquals('100%', doc.body.style.height); // standards assertEquals('hidden', doc.body.style.overflowY); // growing assertEquals('', realIframe.style.position); // no padding on wrapper assertEquals(500, doc.body.firstChild.offsetTop); assert( doc.getElementsByTagName(goog.dom.TagName.STYLE)[0].innerHTML.indexOf( '-moz-force-broken-image-icon') != -1); // standards } function testWriteInitialIframeContentBlendedQuirksFixedRtl() { if (goog.editor.BrowserFeature.HAS_CONTENT_EDITABLE) { return; // only executes when using an iframe } var info = new goog.editor.icontent.FieldFormatInfo('id', false, true, true); var styleInfo = new goog.editor.icontent.FieldStyleInfo(wrapperDiv, ''); wrapperDiv.style.padding = '2px 5px'; var doc = realIframeDoc; var html = 'Some Html'; goog.editor.icontent.writeNormalInitialBlendedIframe( info, html, styleInfo, realIframe); assertBodyCorrect(doc.body, 'id', html, true); assertEquals('BackCompat', doc.compatMode); // quirks assertEquals('100%', doc.documentElement.style.height); // fixed height assertEquals('auto', doc.body.style.height); // quirks assertEquals('auto', doc.body.style.overflow); // fixed height assertEquals('-2px', realIframe.style.marginTop); assertEquals('-5px', realIframe.style.marginLeft); assert( doc.getElementsByTagName(goog.dom.TagName.STYLE)[0].innerHTML.indexOf( '-moz-force-broken-image-icon') == -1); // quirks } function testWhiteboxStandardsFixedRtl() { var info = new goog.editor.icontent.FieldFormatInfo('id', true, false, true); var styleInfo = null; var doc = realIframeDoc; var html = 'Some Html'; goog.editor.icontent.writeNormalInitialBlendedIframe( info, html, styleInfo, realIframe); assertBodyCorrect(doc.body, 'id', html, true); // TODO(nicksantos): on Safari, there's a bug where all written iframes // are CSS1Compat. It's fixed in the nightlies as of 3/31/08, so remove // this guard when the latest version of Safari is on the farm. if (!goog.userAgent.WEBKIT) { assertEquals( 'BackCompat', doc.compatMode); // always use quirks in whitebox } } function testGetInitialIframeContent() { var info = new goog.editor.icontent.FieldFormatInfo('id', true, false, false); var styleInfo = null; var html = 'Some Html'; propertyReplacer.set( goog.editor.BrowserFeature, 'HAS_CONTENT_EDITABLE', false); var htmlOut = goog.editor.icontent.getInitialIframeContent_(info, html, styleInfo); assertEquals(/contentEditable/i.test(htmlOut), false); propertyReplacer.set( goog.editor.BrowserFeature, 'HAS_CONTENT_EDITABLE', true); htmlOut = goog.editor.icontent.getInitialIframeContent_(info, html, styleInfo); assertEquals(/]+?contentEditable/i.test(htmlOut), true); assertEquals(/]+?style="[^>"]*min-width:\s*0/i.test(htmlOut), true); assertEquals(/]+?style="[^>"]*min-width:\s*0/i.test(htmlOut), true); } function testIframeMinWidthOverride() { if (goog.editor.BrowserFeature.HAS_CONTENT_EDITABLE) { return; // only executes when using an iframe } var info = new goog.editor.icontent.FieldFormatInfo('id', true, true, false); var styleInfo = new goog.editor.icontent.FieldStyleInfo( wrapperDiv, '.MyClass { position: absolute; top: 500px; }'); var doc = realIframeDoc; var html = '
Some Html
'; goog.editor.icontent.writeNormalInitialBlendedIframe( info, html, styleInfo, realIframe); // Make sure that the minimum width isn't being inherited from the parent // document's style. assertTrue(doc.body.offsetWidth < 700); } function testBlendedStandardsGrowingMatchesComparisonDiv() { // TODO(nicksantos): If we ever move // TR_EditableUtil.prototype.makeIframeField_ // into goog.editor.icontent (and I think we should), we could actually run // functional tests to ensure that the iframed field matches the dimensions // of the equivalent uneditable div. Functional tests would help a lot here. } /** * Check a given body for the most basic properties that all iframes must have. * * @param {Element} body The actual body element * @param {string} id The expected id * @param {string} bodyHTML The expected innerHTML * @param {boolean=} opt_rtl If true, expect RTL directionality */ function assertBodyCorrect(body, id, bodyHTML, opt_rtl) { assertEquals(bodyHTML, body.innerHTML); // We can't just check // assert(HAS_CONTENTE_EDITABLE, !!body.contentEditable) since in // FF 3 we don't currently use contentEditable, but body.contentEditable // = 'inherit' and !!'inherit' = true. if (goog.editor.BrowserFeature.HAS_CONTENT_EDITABLE) { assertEquals('true', String(body.contentEditable)); } else { assertNotEquals('true', String(body.contentEditable)); } assertContains('editable', body.className.match(/\S+/g)); assertEquals('true', String(body.getAttribute('g_editable'))); assertEquals( 'true', // IE has bugs with getAttribute('hideFocus'), and // Webkit has bugs with normal .hideFocus access. String( goog.userAgent.IE ? body.hideFocus : body.getAttribute('hideFocus'))); assertEquals(id, body.id); } /** * @return {Object} A mock document */ function createMockDocument() { return { body: { setAttribute: function(key, val) { this[key] = val; }, getAttribute: function(key) { return this[key]; }, style: {direction: ''} } }; }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy