/**

 * Copyright (c) 2024 Huawei Technologies Co., Ltd.

 *

 * This source code is licensed under the MIT license found in the

 * LICENSE-MIT file in the root directory of this source tree.

 */



import { TestSuite, TestCase } from '@rnoh/testerino';

import React, { useState, useEffect } from 'react';

import { Text, StyleSheet, Dimensions } from 'react-native';



export function DimensionsTest() {

  const [windowDimensions, setWindowDimensions] = useState(

    Dimensions.get('window'),

  );

  const [screenDimensions, setScreenDimensions] = useState(

    Dimensions.get('screen'),

  );



  useEffect(() => {

    const windowSubscription = Dimensions.addEventListener(

      'change',

      ({ window }) => setWindowDimensions(window),

    );

    const screenSubscription = Dimensions.addEventListener(

      'change',

      ({ screen }) => setScreenDimensions(screen),

    );

    return () => {

      windowSubscription.remove();

      screenSubscription.remove();

    };

  }, []);



  return (

    <TestSuite name="Dimensions">

      <TestCase

        itShould="export dimensions"

        fn={({ expect }) => {

          expect(Dimensions).to.not.be.undefined;

          expect(Dimensions.get).to.not.be.undefined;

        }}

      />

      <TestCase

        itShould="gets window dimensions without throwing"

        fn={({ expect }) => {

          expect(Dimensions.get.bind(Dimensions, 'window')).to.not.throw();

        }}

      />

      <TestCase

        itShould="gets screen dimensions without throwing"

        fn={({ expect }) => {

          expect(Dimensions.get.bind(Dimensions, 'screen')).to.not.throw();

        }}

      />

      <TestCase itShould="display window dimensions">

        <Text style={styles.text}>

          Window dimensions: {JSON.stringify(windowDimensions)}

        </Text>

      </TestCase>

      <TestCase itShould="display screen dimensions">

        <Text style={styles.text}>

          Screen dimensions: {JSON.stringify(screenDimensions)}

        </Text>

      </TestCase>

    </TestSuite>

  );

}

const styles = StyleSheet.create({

  text: {

    fontSize: 14,

  },

});