/**
 * Copyright (c) Nicolas Gallagher.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

import { preprocess } from '../preprocess'

describe('StyleSheet/preprocess', () => {
  describe('preprocesses multiple shadow styles into a single declaration', () => {
    test('shadowColor only', () => {
      expect(preprocess({ shadowColor: 'red' })).toEqual({
        boxShadow: '0px 0px 0px rgba(255,0,0,1.00)',
      })
    })

    test('shadowColor and shadowOpacity only', () => {
      expect(preprocess({ shadowColor: 'red', shadowOpacity: 0.5 })).toEqual({
        boxShadow: '0px 0px 0px rgba(255,0,0,0.50)',
      })
    })

    test('shadowOffset only', () => {
      expect(preprocess({ shadowOffset: { width: 1, height: 2 } })).toEqual({
        boxShadow: '1px 2px 0px rgba(0,0,0,1.00)',
      })
    })

    test('shadowRadius only', () => {
      expect(preprocess({ shadowRadius: 5 })).toEqual({
        boxShadow: '0px 0px 5px rgba(0,0,0,1.00)',
      })
    })

    test('shadowOffset, shadowRadius, shadowColor', () => {
      expect(
        preprocess({
          shadowColor: 'rgba(50,60,70,0.5)',
          shadowOffset: { width: 1, height: 2 },
          shadowOpacity: 0.5,
          shadowRadius: 3,
        })
      ).toEqual({
        boxShadow: '1px 2px 3px rgba(50,60,70,0.25)',
      })
    })
  })

  describe('preprocesses multiple textShadow styles into a single declaration', () => {
    test('textShadowColor only', () => {
      expect(preprocess({ textShadowColor: 'red' })).toEqual({})
    })

    test('textShadowOffset only', () => {
      expect(preprocess({ textShadowOffset: { width: 1, height: 2 } })).toEqual({})
    })

    test('textShadowRadius only', () => {
      expect(preprocess({ textShadowRadius: 5 })).toEqual({})
    })

    test('textShadowColor and textShadowOffset only', () => {
      expect(
        preprocess({
          textShadowColor: 'red',
          textShadowOffset: { width: 0, height: 0 },
        })
      ).toEqual({})
      expect(
        preprocess({
          textShadowColor: 'red',
          textShadowOffset: { width: -1, height: 0 },
        })
      ).toEqual({
        textShadow: '-1px 0px 0px rgba(255,0,0,1.00)',
      })
      expect(
        preprocess({
          textShadowColor: 'red',
          textShadowOffset: { width: 1, height: 2 },
        })
      ).toEqual({
        textShadow: '1px 2px 0px rgba(255,0,0,1.00)',
      })
    })

    test('textShadowColor and textShadowRadius only', () => {
      expect(preprocess({ textShadowColor: 'red', textShadowRadius: 0 })).toEqual({})
      expect(preprocess({ textShadowColor: 'red', textShadowRadius: 5 })).toEqual({
        textShadow: '0px 0px 5px rgba(255,0,0,1.00)',
      })
    })

    test('textShadowColor, textShadowOffset, textShadowRadius', () => {
      expect(
        preprocess({
          textShadowColor: 'rgba(50,60,70,0.50)',
          textShadowOffset: { width: 5, height: 10 },
          textShadowRadius: 15,
        })
      ).toEqual({
        textShadow: '5px 10px 15px rgba(50,60,70,0.50)',
      })
    })
  })
})
