public void VersionSplitterEMail()
        {
            string   value    = "*****@*****.**";
            Splitter splitter = VersionSplitter.GetInstance();

            splitter.GetSingleSplit(value, 1).Should().Be("*****@*****.**");
            splitter.GetSingleSplit(value, 2).Should().BeNull();

            splitter.GetFirstSplits(value, 1).Should().Be("*****@*****.**");
            splitter.GetFirstSplits(value, 2).Should().BeNull();
        }
        public void VersionSplitterOne()
        {
            string   value    = "123";
            Splitter splitter = VersionSplitter.GetInstance();

            splitter.GetSingleSplit(value, -5).Should().BeNull();
            splitter.GetSingleSplit(value, -1).Should().BeNull();
            splitter.GetSingleSplit(value, 0).Should().BeNull();
            splitter.GetSingleSplit(value, 1).Should().Be("123");
            splitter.GetSingleSplit(value, 2).Should().BeNull();

            splitter.GetFirstSplits(value, -5).Should().BeNull();
            splitter.GetFirstSplits(value, -1).Should().BeNull();
            splitter.GetFirstSplits(value, 0).Should().BeNull();
            splitter.GetFirstSplits(value, 1).Should().Be("123");
            splitter.GetFirstSplits(value, 2).Should().BeNull();
        }
        public void VersionSplitterRanges()
        {
            string   value    = "1.2.3.4.5";
            Splitter splitter = VersionSplitter.GetInstance();

            // Bad values
            splitter.GetSplitRange(value, 4, 2).Should().BeNull();
            splitter.GetSplitRange(null, 2, 3).Should().BeNull();

            // Single version
            splitter.GetSplitRange(value, 0, 0).Should().BeNull();
            splitter.GetSplitRange(value, 1, 1).Should().Be("1");
            splitter.GetSplitRange(value, 2, 2).Should().Be("2");
            splitter.GetSplitRange(value, 3, 3).Should().Be("3");
            splitter.GetSplitRange(value, 4, 4).Should().Be("4");
            splitter.GetSplitRange(value, 5, 5).Should().Be("5");
            splitter.GetSplitRange(value, 6, 6).Should().BeNull();

            // First versions
            splitter.GetSplitRange(value, 1, 0).Should().BeNull();
            splitter.GetSplitRange(value, 1, 1).Should().Be("1");
            splitter.GetSplitRange(value, 1, 2).Should().Be("1.2");
            splitter.GetSplitRange(value, 1, 3).Should().Be("1.2.3");
            splitter.GetSplitRange(value, 1, 4).Should().Be("1.2.3.4");
            splitter.GetSplitRange(value, 1, 5).Should().Be("1.2.3.4.5");
            splitter.GetSplitRange(value, 1, 6).Should().BeNull();

            //// Last versions
            splitter.GetSplitRange(value, 0, -1).Should().BeNull();
            splitter.GetSplitRange(value, 1, -1).Should().Be("1.2.3.4.5");
            splitter.GetSplitRange(value, 2, -1).Should().Be("2.3.4.5");
            splitter.GetSplitRange(value, 3, -1).Should().Be("3.4.5");
            splitter.GetSplitRange(value, 4, -1).Should().Be("4.5");
            splitter.GetSplitRange(value, 5, -1).Should().Be("5");
            splitter.GetSplitRange(value, 6, -1).Should().BeNull();

            //// 2 version slice
            splitter.GetSplitRange(value, 0, 1).Should().BeNull();
            splitter.GetSplitRange(value, 1, 2).Should().Be("1.2");
            splitter.GetSplitRange(value, 2, 3).Should().Be("2.3");
            splitter.GetSplitRange(value, 3, 4).Should().Be("3.4");
            splitter.GetSplitRange(value, 4, 5).Should().Be("4.5");
            splitter.GetSplitRange(value, 5, 6).Should().BeNull();
        }
        public void VersionSplitterDOT()
        {
            string   value    = "1.2.3";
            Splitter splitter = VersionSplitter.GetInstance();

            splitter.GetSingleSplit(value, -1).Should().BeNull();
            splitter.GetSingleSplit(value, 0).Should().BeNull();
            splitter.GetSingleSplit(value, 1).Should().Be("1");
            splitter.GetSingleSplit(value, 2).Should().Be("2");
            splitter.GetSingleSplit(value, 3).Should().Be("3");
            splitter.GetSingleSplit(value, 4).Should().BeNull();

            splitter.GetFirstSplits(value, -1).Should().BeNull();
            splitter.GetFirstSplits(value, 0).Should().BeNull();
            splitter.GetFirstSplits(value, 1).Should().Be("1");
            splitter.GetFirstSplits(value, 2).Should().Be("1.2");
            splitter.GetFirstSplits(value, 3).Should().Be("1.2.3");
            splitter.GetFirstSplits(value, 4).Should().BeNull();
        }
예제 #5
0
        private void Initialize(EndianBinaryReader reader, string fileName)
        {
            var tableSize         = reader.ReadInt32();
            var dataEnd           = reader.ReadInt32();
            var fileFormatVersion = reader.ReadInt32();
            var dataOffset        = reader.ReadUInt32();

            FileFormatVersion = fileFormatVersion;
            FullFileName      = Path.GetFullPath(fileName);

            var baseDefinitions = false;
            var platform        = 0;

            switch (fileFormatVersion)
            {
            case 6:
                reader.Position  = dataEnd - tableSize;
                reader.Position += 1;
                break;

            case 7:
                reader.Position  = dataEnd - tableSize;
                reader.Position += 1;
                Version          = reader.ReadStringToNull();
                break;

            case 8:
                reader.Position  = dataEnd - tableSize;
                reader.Position += 1;
                Version          = reader.ReadStringToNull();
                platform         = reader.ReadInt32();
                break;

            case 9:
                reader.Position += 4;
                Version          = reader.ReadStringToNull();
                platform         = reader.ReadInt32();
                break;

            case 14:
            case 15:
            case 16:
            case 17:
                reader.Position += 4;
                Version          = reader.ReadStringToNull();
                platform         = reader.ReadInt32();
                baseDefinitions  = reader.ReadBoolean();
                break;

            default:
                throw new FormatException();
            }

            if (platform > 255 || platform < 0)
            {
                platform      = EndianHelper.SwapEndian(platform);
                reader.Endian = Endian.LittleEndian;
            }
            Platform = (AssetPlatform)platform;

            ReadClasses(reader, fileFormatVersion, baseDefinitions);

            if (7 <= fileFormatVersion && fileFormatVersion < 14)
            {
                reader.Position += 4;
            }

            ReadAssetsPreloadTable(reader, fileFormatVersion, dataOffset);

            // May be buggy...
            // The original author assumes these two properties are not used in Unity 2.5.x (in BuildSettings class).
            VersionComponents = VersionSplitter
                                .Split(Version)
                                .Select(str => Convert.ToInt32(str))
                                .ToArray();
            BuildType = BuildTypePattern.Match(Version).Groups["build"].Value;

            // 2017.x version handling is solved by better pattern splitting, so we skipped here.

            if (fileFormatVersion >= 14)
            {
                var someCount = reader.ReadInt32();
                for (var i = 0; i < someCount; ++i)
                {
                    var dummy1 = reader.ReadInt32();
                    reader.AlignBy(4);
                    var pathID = reader.ReadInt64();
                }
            }

            var sharedFileCount = reader.ReadInt32();
            var sharedFileList  = new SharedAssetInfo[sharedFileCount];

            for (var i = 0; i < sharedFileCount; ++i)
            {
                var shared = new SharedAssetInfo();
                shared.SomeName  = reader.ReadStringToNull();
                reader.Position += 20;
                var sharedFileName = reader.ReadStringToNull();
                shared.FileName   = sharedFileName;
                sharedFileList[i] = shared;
            }
            SharedAssetList = sharedFileList;
        }