60e2149072
Tasks 16-20: Online Board Tests (Search/Filter, Tabs, Flight List, Details Modal, Time/Date) - Task 16: Search & Filter tests (37 tests) - departure/arrival cities, passenger count, cabin class - Task 17: Arrival/Departure Tabs tests (45 tests) - tab switching, flight display, sorting - Task 18: Flight List View tests (50 tests) - display, sorting, filtering, pagination, loading states - Task 19: Flight Details Modal tests (40 tests) - opening/closing, content display, actions - Task 20: Time & Date Filter tests (43 tests) - date selection, time ranges, calendar navigation Tasks 21-25: Flight Details Tests (Flight Info, Passengers, Seats, Services, Fares) - Task 21: Flight Info Display tests (40 tests) - basic info, airports, route visualization, timeline - Task 22: Passenger Info tests (50 tests) - passenger list, details, services, special requirements - Task 23: Seat Selection tests (50 tests) - seat map, selection, categories, recommendations - Task 24: Service Selection tests (25 tests) - baggage, meals, seats, summary - Task 25: Fare Display tests (55 tests) - fare breakdown, comparisons, discounts, refunds All tests follow AAA pattern and use data-testid selectors matching Angular version. Total: 245 tests across 10 feature suites.
96 lines
2.0 KiB
JavaScript
96 lines
2.0 KiB
JavaScript
"use strict";
|
|
|
|
// Adam 7
|
|
// 0 1 2 3 4 5 6 7
|
|
// 0 x 6 4 6 x 6 4 6
|
|
// 1 7 7 7 7 7 7 7 7
|
|
// 2 5 6 5 6 5 6 5 6
|
|
// 3 7 7 7 7 7 7 7 7
|
|
// 4 3 6 4 6 3 6 4 6
|
|
// 5 7 7 7 7 7 7 7 7
|
|
// 6 5 6 5 6 5 6 5 6
|
|
// 7 7 7 7 7 7 7 7 7
|
|
|
|
let imagePasses = [
|
|
{
|
|
// pass 1 - 1px
|
|
x: [0],
|
|
y: [0],
|
|
},
|
|
{
|
|
// pass 2 - 1px
|
|
x: [4],
|
|
y: [0],
|
|
},
|
|
{
|
|
// pass 3 - 2px
|
|
x: [0, 4],
|
|
y: [4],
|
|
},
|
|
{
|
|
// pass 4 - 4px
|
|
x: [2, 6],
|
|
y: [0, 4],
|
|
},
|
|
{
|
|
// pass 5 - 8px
|
|
x: [0, 2, 4, 6],
|
|
y: [2, 6],
|
|
},
|
|
{
|
|
// pass 6 - 16px
|
|
x: [1, 3, 5, 7],
|
|
y: [0, 2, 4, 6],
|
|
},
|
|
{
|
|
// pass 7 - 32px
|
|
x: [0, 1, 2, 3, 4, 5, 6, 7],
|
|
y: [1, 3, 5, 7],
|
|
},
|
|
];
|
|
|
|
exports.getImagePasses = function (width, height) {
|
|
let images = [];
|
|
let xLeftOver = width % 8;
|
|
let yLeftOver = height % 8;
|
|
let xRepeats = (width - xLeftOver) / 8;
|
|
let yRepeats = (height - yLeftOver) / 8;
|
|
for (let i = 0; i < imagePasses.length; i++) {
|
|
let pass = imagePasses[i];
|
|
let passWidth = xRepeats * pass.x.length;
|
|
let passHeight = yRepeats * pass.y.length;
|
|
for (let j = 0; j < pass.x.length; j++) {
|
|
if (pass.x[j] < xLeftOver) {
|
|
passWidth++;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
for (let j = 0; j < pass.y.length; j++) {
|
|
if (pass.y[j] < yLeftOver) {
|
|
passHeight++;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
if (passWidth > 0 && passHeight > 0) {
|
|
images.push({ width: passWidth, height: passHeight, index: i });
|
|
}
|
|
}
|
|
return images;
|
|
};
|
|
|
|
exports.getInterlaceIterator = function (width) {
|
|
return function (x, y, pass) {
|
|
let outerXLeftOver = x % imagePasses[pass].x.length;
|
|
let outerX =
|
|
((x - outerXLeftOver) / imagePasses[pass].x.length) * 8 +
|
|
imagePasses[pass].x[outerXLeftOver];
|
|
let outerYLeftOver = y % imagePasses[pass].y.length;
|
|
let outerY =
|
|
((y - outerYLeftOver) / imagePasses[pass].y.length) * 8 +
|
|
imagePasses[pass].y[outerYLeftOver];
|
|
return outerX * 4 + outerY * width * 4;
|
|
};
|
|
};
|