﻿using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OfficeOpenXml;

namespace EPPlusTest.FormulaParsing.IntegrationTests.BuiltInFunctions.ExcelRanges
{
    [TestClass]
    public class WorksheetRefsTest
    {
        private ExcelPackage _package;
        private ExcelWorksheet _firstSheet;
        private ExcelWorksheet _secondSheet;

        [TestInitialize]
        public void Init()
        {
            _package = new ExcelPackage();
            _firstSheet = _package.Workbook.Worksheets.Add("sheet1");
            _secondSheet = _package.Workbook.Worksheets.Add("sheet2");
            _firstSheet.Cells["A1"].Value = 1;
            _firstSheet.Cells["A2"].Value = 2;
        }

        [TestCleanup]
        public void Cleanup()
        {
            
            _package.Dispose();
        }

        [TestMethod]
        public void ShouldHandleReferenceToOtherSheet()
        {
            _secondSheet.Cells["A1"].Formula = "SUM('sheet1'!A1:A2)";
            _secondSheet.Calculate();
            Assert.AreEqual(3d, _secondSheet.Cells["A1"].Value);
        }

        [TestMethod]
        public void ShouldHandleReferenceToOtherSheetWithComplexName()
        {
            var sheet = _package.Workbook.Worksheets.Add("ab#k..2");
            sheet.Cells["A1"].Value = 1;
            sheet.Cells["A2"].Value = 2;
            _secondSheet.Cells["A1"].Formula = "SUM('ab#k..2'A1:A2)";
            _secondSheet.Calculate();
            Assert.AreEqual(3d, _secondSheet.Cells["A1"].Value);
        }

        [TestMethod]
        public void ShouldHandleInvalidRef()
        {
            var sheet = _package.Workbook.Worksheets.Add("ab#k..2");
            sheet.Cells["A1"].Value = 1;
            sheet.Cells["A2"].Value = 2;
            _secondSheet.Cells["A1"].Formula = "SUM('ab#k..2A1:A2')";
            _secondSheet.Calculate();
            Assert.IsInstanceOfType(_secondSheet.Cells["A1"].Value, typeof(ExcelErrorValue));
        }
    }
}
