OSVersionTests.cs 5.49 KB
using NUnit.Framework;

namespace UnityEngine.XR.ARKit.Tests
{
    [TestFixture]
    class OSVersionTestFixture
    {
        void GreaterThan(int major, int minor, int point)
        {
            Assert.That(new OSVersion(major + 1, minor, point) > new OSVersion(major, minor, point));
            Assert.That(!(new OSVersion(major, minor, point) > new OSVersion(major + 1, minor, point)));

            Assert.That(new OSVersion(major, minor + 1, point) > new OSVersion(major, minor, point));
            Assert.That(!(new OSVersion(major, minor, point) > new OSVersion(major, minor + 1, point)));

            Assert.That(new OSVersion(major, minor, point + 1) > new OSVersion(major, minor, point));
            Assert.That(!(new OSVersion(major, minor, point) > new OSVersion(major, minor, point + 1)));
        }

        void LessThan(int major, int minor, int point)
        {
            Assert.That(new OSVersion(major - 1, minor, point) < new OSVersion(major, minor, point));
            Assert.That(!(new OSVersion(major, minor, point) < new OSVersion(major - 1, minor, point)));

            Assert.That(new OSVersion(major, minor - 1, point) < new OSVersion(major, minor, point));
            Assert.That(!(new OSVersion(major, minor, point) < new OSVersion(major, minor - 1, point)));

            Assert.That(new OSVersion(major, minor, point - 1) < new OSVersion(major, minor, point));
            Assert.That(!(new OSVersion(major, minor, point) < new OSVersion(major, minor, point - 1)));
        }

        void LessThanOrEqualTo(int major, int minor, int point)
        {
            Assert.That(new OSVersion(major, minor, point) <= new OSVersion(major, minor, point));
            LessThan(major, minor, point);
        }

        void GreaterThanOrEqualTo(int major, int minor, int point)
        {
            Assert.That(new OSVersion(major, minor, point) >= new OSVersion(major, minor, point));
            GreaterThan(major, minor, point);
        }

        void EqualTo(int major, int minor, int point)
        {
            Assert.That(new OSVersion(major, minor, point) == new OSVersion(major, minor, point));
            Assert.That(!(new OSVersion(major + 1, minor, point) == new OSVersion(major, minor, point)));
            Assert.That(!(new OSVersion(major, minor + 1, point) == new OSVersion(major, minor, point)));
            Assert.That(!(new OSVersion(major, minor, point + 1) == new OSVersion(major, minor, point)));
        }

        void NotEqualTo(int major, int minor, int point)
        {
            Assert.That(!(new OSVersion(major, minor, point) != new OSVersion(major, minor, point)));
            Assert.That(new OSVersion(major + 1, minor, point) != new OSVersion(major, minor, point));
            Assert.That(new OSVersion(major, minor + 1, point) != new OSVersion(major, minor, point));
            Assert.That(new OSVersion(major, minor, point + 1) != new OSVersion(major, minor, point));
        }

        void TestStringParser(int major, int minor, int point)
        {
            var version = new OSVersion(major, minor, point);
            var versionString = version.ToString();
            Assert.That(OSVersion.Parse(versionString).Equals(version));

            // Add unicode characters
            Assert.That(OSVersion.Parse("iPhone version 中文" + versionString + "عربى -/@!@#$23").Equals(version));
        }

        [Test]
        public void GreaterThan()
        {
            GreaterThan(1, 2, 3);
        }

        [Test]
        public void GreaterThanOrEqualTo()
        {
            GreaterThanOrEqualTo(1, 2, 3);
        }

        [Test]
        public void LessThan()
        {
            LessThan(2, 3, 4);
        }

        [Test]
        public void LessThanOrEqualTo()
        {
            LessThanOrEqualTo(2, 3, 4);
        }

        [Test]
        public void EqualTo()
        {
            EqualTo(1, 2, 3);
        }

        [Test]
        public void NotEqualTo()
        {
            NotEqualTo(1, 2, 3);
        }

        [Test]
        public void StringParser()
        {
            for (int point = 0; point < 10; ++point)
            {
                TestStringParser(0, 1, point);
                TestStringParser(12, 0, point);
                TestStringParser(9, 0, point);
                TestStringParser(0, 99, point);
                TestStringParser(999, 999, point);
                TestStringParser(0, 0, point);
            }

            Assert.That(OSVersion.Parse("iOS 12.2") == new OSVersion(12, 2));
            Assert.That(OSVersion.Parse("iOS 12.3.1") == new OSVersion(12, 3, 1));

            // We do a lot of tests against iOS 12, so let's actually check that.
            Assert.That(OSVersion.Parse("12") >= new OSVersion(12));
            Assert.That(OSVersion.Parse("12.0") >= new OSVersion(12));
            Assert.That(OSVersion.Parse("12.1") >= new OSVersion(12));
            Assert.That(OSVersion.Parse("12.1.1") >= new OSVersion(12));
        }

        [Test]
        public void IgnoresLeadingZeroes()
        {
            Assert.That(OSVersion.Parse("0012.02.004") == new OSVersion(12, 2, 4));
        }

        [Test]
        public void StopsParsingAtFirstInvalidCharacter()
        {
            Assert.That(OSVersion.Parse("12.2 .4") == new OSVersion(12, 2));
        }

        [Test]
        public void HandlesNull()
        {
            Assert.That(OSVersion.Parse(null) == new OSVersion(0));
        }

        [Test]
        public void HandlesEmptyString()
        {
            Assert.That(OSVersion.Parse("") == new OSVersion(0));
        }
    }
}