# Copyright (c) OpenMMLab. All rights reserved.
from pathlib import Path
from unittest import TestCase

import cv2
import numpy as np

from mmengine.fileio.backends import HTTPBackend


def imfrombytes(content):
    img_np = np.frombuffer(content, np.uint8)
    img = cv2.imdecode(img_np, cv2.IMREAD_COLOR)
    return img


def imread(path):
    with open(path, 'rb') as f:
        content = f.read()
        img = imfrombytes(content)
    return img


class TestHTTPBackend(TestCase):

    @classmethod
    def setUpClass(cls):
        cls.img_url = (
            'https://download.openmmlab.com/mmengine/test-data/color.jpg')
        cls.img_shape = (300, 400, 3)
        cls.text_url = (
            'https://download.openmmlab.com/mmengine/test-data/filelist.txt')
        cls.test_data_dir = Path(__file__).parent.parent.parent / 'data'
        cls.text_path = cls.test_data_dir / 'filelist.txt'

    def test_get(self):
        backend = HTTPBackend()
        img_bytes = backend.get(self.img_url)
        img = imfrombytes(img_bytes)
        self.assertEqual(img.shape, self.img_shape)

    def test_get_text(self):
        backend = HTTPBackend()
        text = backend.get_text(self.text_url)
        self.assertEqual(self.text_path.open('r').read(), text)

    def test_get_local_path(self):
        backend = HTTPBackend()
        with backend.get_local_path(self.img_url) as filepath:
            img = imread(filepath)
            self.assertEqual(img.shape, self.img_shape)