import TKUnit = require("../../TKUnit"); import app = require("application"); import helper = require("../helper"); import buttonModule = require("ui/button"); import page = require("ui/page"); import button = require("ui/button"); import enums = require("ui/enums"); //  // # ScrollView // Using a ScrollView requires the ScrollView module. // ``` JavaScript import scrollViewModule = require("ui/scroll-view"); // ``` // ### Declaring the ScrollView. //```XML // // // {%raw%}{%endraw%} // // //``` //  var ASYNC = 2; var tmp: buttonModule.Button; var newPage: page.Page; // // ### Creating a ScrollView // ``` JavaScript var scrollView = new scrollViewModule.ScrollView(); // ``` // export function setUpModule() { var pageFactory = function (): page.Page { newPage = new page.Page(); tmp = new buttonModule.Button(); tmp.text = "Loading test"; newPage.content = tmp; return newPage; }; helper.navigate(pageFactory); } export function tearDownModule() { helper.goBack(); tmp = null; newPage = null; scrollView = null; } export function setUp() { scrollView = new scrollViewModule.ScrollView(); newPage.content = scrollView; } export function tearDown() { newPage.content = tmp; } function waitForLayout() { TKUnit.waitUntilReady(function () { return scrollView.content.isLayoutValid; }, ASYNC); } export function test_default_TNS_values() { TKUnit.assertEqual(scrollView.orientation, enums.Orientation.vertical, "Default scrollView.orientation"); TKUnit.assertEqual(scrollView.verticalOffset, 0, "Default scrollView.verticalOffset"); TKUnit.assertEqual(scrollView.horizontalOffset, 0, "Default scrollView.horizontalOffset"); } export function test_vertical_oriantation_creates_correct_native_view() { scrollView.orientation = enums.Orientation.vertical; if (app.android) { TKUnit.assert(scrollView.android instanceof android.widget.ScrollView, "android property is android.widget.ScrollView"); } else if (app.ios) { TKUnit.assert(scrollView.ios instanceof UIScrollView, "ios property is UIScrollView"); } } export function test_horizontal_oriantation_creates_correct_native_view() { scrollView.orientation = enums.Orientation.horizontal; if (app.android) { TKUnit.assert(scrollView.android instanceof android.widget.HorizontalScrollView, "android property is android.widget.HorizontalScrollView"); } else if (app.ios) { TKUnit.assert(scrollView.ios instanceof UIScrollView, "ios property is UIScrollView"); } } export function test_scrollabeHeight_vertical_orientation_when_content_is_small() { scrollView.orientation = enums.Orientation.vertical; scrollView.width = 200; scrollView.height = 300; var btn = new button.Button(); btn.text = "test"; btn.height = 100; scrollView.content = btn; waitForLayout(); TKUnit.assertEqual(scrollView.scrollableHeight, 0, "scrollView.scrollableHeight"); TKUnit.assertEqual(scrollView.scrollableWidth, 0, "scrollView.scrollableWidth"); } export function test_scrollabeHeight_vertical_orientation_when_content_is_big() { scrollView.orientation = enums.Orientation.vertical; scrollView.width = 200; scrollView.height = 300; var btn = new button.Button(); btn.text = "test"; btn.height = 500; scrollView.content = btn; waitForLayout(); TKUnit.assertAreClose(scrollView.scrollableHeight, 200, 0.4, "scrollView.scrollableHeight"); TKUnit.assertEqual(scrollView.scrollableWidth, 0, "scrollView.scrollableWidth"); } export function test_scrollabeWidth_horizontal_orientation_when_content_is_small() { scrollView.orientation = enums.Orientation.vertical; scrollView.width = 200; scrollView.height = 300; var btn = new button.Button(); btn.text = "test"; btn.width = 100; scrollView.content = btn; waitForLayout(); TKUnit.assertEqual(scrollView.scrollableHeight, 0, "scrollView.scrollableHeight"); TKUnit.assertEqual(scrollView.scrollableWidth, 0, "scrollView.scrollableWidth"); } export function test_scrollabeWidth_horizontal_orientation_when_content_is_big() { scrollView.orientation = enums.Orientation.horizontal; scrollView.width = 200; scrollView.height = 300; var btn = new button.Button(); btn.text = "test"; btn.width = 500; scrollView.content = btn; waitForLayout(); TKUnit.assertEqual(scrollView.scrollableHeight, 0, "scrollView.scrollableHeight"); TKUnit.assertAreClose(scrollView.scrollableWidth, 300, 0.4, "scrollView.scrollableWidth"); } export function test_scrollToVerticalOffset_no_animation() { scrollView.orientation = enums.Orientation.vertical; scrollView.width = 200; scrollView.height = 300; var btn = new button.Button(); btn.text = "test"; btn.height = 500; scrollView.content = btn; waitForLayout(); TKUnit.assertEqual(scrollView.verticalOffset, 0, "scrollView.verticalOffset"); scrollView.scrollToVerticalOffset(100, false); TKUnit.assertAreClose(scrollView.verticalOffset, 100, 0.1, "scrollView.verticalOffset"); } export function test_scrollToVerticalOffset_with_animation() { scrollView.orientation = enums.Orientation.vertical; scrollView.width = 200; scrollView.height = 300; var btn = new button.Button(); btn.text = "test"; btn.height = 500; scrollView.content = btn; waitForLayout(); TKUnit.assertEqual(scrollView.verticalOffset, 0, "scrollView.verticalOffset"); scrollView.scrollToVerticalOffset(100, true); // No synchronous change. TKUnit.assertEqual(scrollView.verticalOffset, 0, "scrollView.verticalOffset"); TKUnit.waitUntilReady(() => { return scrollView.verticalOffset === 100 }, ASYNC); // The scrolling animation should be finished by now TKUnit.assertAreClose(scrollView.verticalOffset, 100, 0.1, "scrollView.verticalOffset"); } export function test_scrollToHorizontalOffset_no_animation() { scrollView.orientation = enums.Orientation.horizontal; scrollView.width = 200; scrollView.height = 300; var btn = new button.Button(); btn.text = "test"; btn.width = 500; scrollView.content = btn; waitForLayout(); TKUnit.assertEqual(scrollView.horizontalOffset, 0, "scrollView.horizontalOffset"); scrollView.scrollToHorizontalOffset(100, false); TKUnit.assertAreClose(scrollView.horizontalOffset, 100, 0.1, "scrollView.horizontalOffset"); } export function test_scrollToHorizontalOffset_with_animation() { scrollView.orientation = enums.Orientation.horizontal; scrollView.width = 200; scrollView.height = 300; var btn = new button.Button(); btn.text = "test"; btn.width = 500; scrollView.content = btn; waitForLayout(); TKUnit.assertEqual(scrollView.horizontalOffset, 0, "scrollView.horizontalOffset"); scrollView.scrollToHorizontalOffset(100, true); // No synchronous change. TKUnit.assertEqual(scrollView.horizontalOffset, 0, "scrollView.horizontalOffset"); TKUnit.waitUntilReady(() => { return scrollView.horizontalOffset === 100 }, ASYNC); // The scrolling animation should be finished by now TKUnit.assertAreClose(scrollView.horizontalOffset, 100, 0.1, "scrollView.horizontalOffset"); } export function test_scrollView_persistsState_vertical() { scrollView.orientation = enums.Orientation.vertical; scrollView.width = 200; scrollView.height = 300; var btn = new button.Button(); btn.text = "test"; btn.height = 500; scrollView.content = btn; waitForLayout(); scrollView.scrollToVerticalOffset(100, false); TKUnit.assertAreClose(scrollView.verticalOffset, 100, 0.1, "scrollView.verticalOffset before navigation"); helper.do_PageTest_WithButton((t) => { // Just navigate forward and back. }); // Wait for the page to reload. TKUnit.waitUntilReady(function () { return Math.abs(scrollView.verticalOffset - 100) < 0.1; }, ASYNC); // Check verticalOffset after navigation TKUnit.assertAreClose(scrollView.verticalOffset, 100, 0.1, "scrollView.verticalOffset after navigation"); } export function test_scrollView_persistsState_horizontal() { scrollView.orientation = enums.Orientation.horizontal; scrollView.width = 200; scrollView.height = 300; var btn = new button.Button(); btn.text = "test"; btn.width = 500; scrollView.content = btn; waitForLayout(); scrollView.scrollToHorizontalOffset(100, false); TKUnit.assertAreClose(scrollView.horizontalOffset, 100, 0.1, "scrollView.horizontalOffset before navigation"); helper.do_PageTest_WithButton((t) => { // Just navigate forward and back. }); // Wait for the page to reload. TKUnit.waitUntilReady(function () { return Math.abs(scrollView.horizontalOffset - 100) < 0.1; }, ASYNC); // Check verticalOffset after navigation TKUnit.assertAreClose(scrollView.horizontalOffset, 100, 0.1, "scrollView.horizontalOffset after navigation"); }