// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
base.require('base.bbox2');
base.require('base.quad');
base.require('ui.quad_view');
base.require('ui.quad_view_viewport');
base.unittest.testSuite('ui.quad_view', function() {
var Quad = base.Quad;
var QuadView = ui.QuadView;
var QuadViewViewport = ui.QuadViewViewport;
test('instantiate', function() {
var quadView = new QuadView();
var quads = [
Quad.FromXYWH(0, 0, 10, 10),
Quad.FromXYWH(10, 10, 10, 10),
Quad.FromXYWH(20, 4, 10, 10),
Quad.FromXYWH(30, 10, 20, 20),
Quad.FromXYWH(20, 20, 10, 10),
Quad.FromXYWH(15, 15, 10, 10)
];
quads[2].upperBorderColor = 'rgba(255,255,0,1)';
quads[3].backgroundColor = 'rgba(255,0,255,0.15)';
quads[3].borderColor = 'rgba(0,255,255,1)';
var quadsBBox = new base.BBox2();
for (var i = 0; i < quads.length; i++)
quadsBBox.addQuad(quads[i]);
quadView.title = 'Test Tree';
quadView.quads = quads;
quadView.viewport = new QuadViewViewport(quadsBBox.asRect(), 10.0);
quadView.deviceViewportSizeForFrame = {width: 50, height: 30};
quadView.addEventListener(
'selectionChanged',
function(e) {
quads.forEach(function(q) {
q.upperBorderColor = undefined;
});
e.selectedQuadIndices.forEach(function(i) {
quads[i].upperBorderColor = 'rgba(255,255,0,1)';
});
quadView.quads = quads;
}.bind(this));
this.addHTMLOutput(quadView);
});
test('instantiate_backgroundTexture', function() {
var quadView = new QuadView();
var quads = [Quad.FromXYWH(0, 0, 10, 10)];
var data = new Uint8Array(2 * 2 * 4);
data[0] = 0;
data[1] = 0;
data[2] = 0;
data[3] = 255;
data[4] = 255;
data[5] = 0;
data[6] = 0;
data[7] = 255;
data[8] = 0;
data[9] = 255;
data[10] = 0;
data[11] = 255;
data[12] = 0;
data[13] = 0;
data[14] = 255;
data[15] = 255;
var quadsBBox = new base.BBox2();
for (var i = 0; i < quads.length; i++)
quadsBBox.addQuad(quads[i]);
quadView.title = 'Test Tree';
quadView.quads = quads;
quadView.viewport = new QuadViewViewport(quadsBBox.asRect(), 50.0);
this.addHTMLOutput(quadView);
});
test('instantiate_warpedTexturedQuad', function() {
var quadView = new QuadView();
var quads = [base.Quad.From8Array([0, 0,
10, 0,
10, 5,
0, 10])];
var data = new Uint8Array(2 * 2 * 4);
data[0] = 0;
data[1] = 0;
data[2] = 0;
data[3] = 255;
data[4] = 255;
data[5] = 0;
data[6] = 0;
data[7] = 255;
data[8] = 0;
data[9] = 255;
data[10] = 0;
data[11] = 255;
data[12] = 0;
data[13] = 0;
data[14] = 255;
data[15] = 255;
var quadsBBox = new base.BBox2();
for (var i = 0; i < quads.length; i++)
quadsBBox.addQuad(quads[i]);
quadView.title = 'Test Tree';
quadView.quads = quads;
quadView.viewport = new QuadViewViewport(quadsBBox.asRect(), 50.0);
this.addHTMLOutput(quadView);
});
test('findTiles', function() {
var quadView = new QuadView();
var quads = [
Quad.FromXYWH(0, 0, 10, 10),
Quad.FromXYWH(10, 10, 10, 10),
Quad.FromXYWH(20, 4, 10, 10),
Quad.FromXYWH(30, 10, 20, 20),
Quad.FromXYWH(20, 20, 10, 10),
Quad.FromXYWH(15, 15, 10, 10)
];
var quadsBBox = new base.BBox2();
for (var i = 0; i < quads.length; i++)
quadsBBox.addQuad(quads[i]);
quadView.title = 'Test Tree';
quadView.quads = quads;
var deviceViewportSizeForFrame = {width: 50, height: 30};
quadView.viewport = new QuadViewViewport(
quadsBBox.asRect(), 10.0, 0, 2);
var rect = quadView.canvas_.getBoundingClientRect();
var hitIndices = quadView.findQuadsAtCanvasClientPoint(
rect.left + 75, rect.top + 75);
assertEquals(2, hitIndices.length);
assertArrayEquals(hitIndices, [1, 5]);
});
});