private void DecodeDirectory(FileDecodingInputStream inputStream)
        {
            DirectorySegment directory = streamParser.ParseDirectory(inputStream);

            UpdateCurrentDirectory(directory);
            platform.CreateDirectory(currentDirectory);
        }
Example #2
0
        public void ShouldMatchCharacterSetInverted()
        {
            // ab?[!abc]
            var list = new DirectorySegment(new SubSegment[]
            {
                new Identifier("ab"),
                CharacterWildcard.Default,
                new CharacterSet("abc", true)
            });

            Assert.True(list.MatchesSegment("abcd"));
            Assert.True(list.MatchesSegment("abdd"));
            Assert.True(list.MatchesSegment("ab1d"));
            Assert.True(list.MatchesSegment("abce"));
            Assert.True(list.MatchesSegment("abde"));
            Assert.True(list.MatchesSegment("ab1e"));
            Assert.True(list.MatchesSegment("abcf"));
            Assert.True(list.MatchesSegment("abdf"));
            Assert.True(list.MatchesSegment("ab1f"));

            Assert.False(list.MatchesSegment("abca"));
            Assert.False(list.MatchesSegment("abda"));
            Assert.False(list.MatchesSegment("ab1a"));

            Assert.False(list.MatchesSegment("abcb"));
            Assert.False(list.MatchesSegment("abdb"));
            Assert.False(list.MatchesSegment("ab1b"));

            Assert.False(list.MatchesSegment("abcc"));
            Assert.False(list.MatchesSegment("abdc"));
            Assert.False(list.MatchesSegment("ab1c"));
        }
Example #3
0
        public void ShouldMatchStringWildcard()
        {
            // *
            var list = new DirectorySegment(new SubSegment[]
            {
                StringWildcard.Default,
            });

            Assert.True(list.MatchesSegment(""));
            Assert.True(list.MatchesSegment("a"));
            Assert.True(list.MatchesSegment("abc"));
        }
Example #4
0
        public void ParseDirectoryTest2()
        {
            IReadOnlyList <Bit> data = BitListHelper.CreateBuilder()
                                       .AddInt(0x12)
                                       .AddString("Directory")
                                       .AddInt(0x5).BitList;

            DirectorySegment segment = streamParser.ParseDirectory(new TestIDecodingInputStream(data));

            Assert.IsNotNull(segment);
            Assert.AreEqual("Directory", segment.Name);
            Assert.AreEqual(5, segment.Cardinality);
        }
        private void UpdateCurrentDirectory(DirectorySegment directory)
        {
            if (directoriesQueue.Count == 0)
            {
                throw new InvalidOperationException();
            }
            currentDirectory = Path.Combine(directoriesQueue.Dequeue(), directory.Name);

            for (int n = 0; n < directory.Cardinality; n++)
            {
                directoriesQueue.Enqueue(currentDirectory);
            }
        }
Example #6
0
        public void AddDirectory(DirectorySegment segment)
        {
            Guard.IsNotNull(segment, nameof(segment));

            string name = segment.Name;

            stream.Write(StreamKind.DS_CODE);
            stream.Write(2 * name.Length);
            for (int n = 0; n < name.Length; n++)
            {
                stream.Write(name[n]);
            }
            stream.Write(segment.Cardinality);
        }
Example #7
0
        public void ShouldMatchIdentWildcard()
        {
            // ab*cd
            var list = new DirectorySegment(new SubSegment[]
            {
                new Identifier("ab"),
                StringWildcard.Default,
                new Identifier("cd"),
            });

            Assert.True(list.MatchesSegment("abcd"));
            Assert.True(list.MatchesSegment("abcdcd"));
            Assert.True(list.MatchesSegment("ab123456cd"));

            Assert.False(list.MatchesSegment("ab123456cd11"));
            Assert.False(list.MatchesSegment("abcd1"));
            Assert.False(list.MatchesSegment("abcdcd1"));
            Assert.False(list.MatchesSegment("ab123456cd1"));
        }
Example #8
0
        public void ShouldMatchCharacterWildcard()
        {
            // ab?
            var list = new DirectorySegment(new SubSegment[]
            {
                new Identifier("ab"),
                CharacterWildcard.Default
            });

            Assert.True(list.MatchesSegment("abc"));
            Assert.True(list.MatchesSegment("abd"));
            Assert.True(list.MatchesSegment("ab1"));

            Assert.False(list.MatchesSegment("eab"));
            Assert.False(list.MatchesSegment("abef"));
            Assert.False(list.MatchesSegment("ab123456cd11"));
            Assert.False(list.MatchesSegment("abcd1"));
            Assert.False(list.MatchesSegment("abcdcd1"));
            Assert.False(list.MatchesSegment("ab123456cd1"));
        }
Example #9
0
        public void ShouldMatchCharacterSet()
        {
            // ab?[abc]
            var list = new DirectorySegment(new SubSegment[]
            {
                new Identifier("ab"),
                CharacterWildcard.Default,
                new CharacterSet("abc", false)
            });

            Assert.True(list.MatchesSegment("abca"));
            Assert.True(list.MatchesSegment("abda"));
            Assert.True(list.MatchesSegment("ab1a"));

            Assert.True(list.MatchesSegment("abcb"));
            Assert.True(list.MatchesSegment("abdb"));
            Assert.True(list.MatchesSegment("ab1b"));

            Assert.True(list.MatchesSegment("abcc"));
            Assert.True(list.MatchesSegment("abdc"));
            Assert.True(list.MatchesSegment("ab1c"));
        }
Example #10
0
        public void ShouldMatchLiteralSet()
        {
            // ab*(cd|ef)
            var list = new DirectorySegment(new SubSegment[]
            {
                new Identifier("ab"),
                StringWildcard.Default,
                new LiteralSet("cd", "ef"),
            });

            Assert.True(list.MatchesSegment("abcd"));
            Assert.True(list.MatchesSegment("abcdcd"));
            Assert.True(list.MatchesSegment("ab123456cd"));

            Assert.True(list.MatchesSegment("abef"));
            Assert.True(list.MatchesSegment("abcdef"));
            Assert.True(list.MatchesSegment("ab123456ef"));

            Assert.False(list.MatchesSegment("ab123456cd11"));
            Assert.False(list.MatchesSegment("abcd1"));
            Assert.False(list.MatchesSegment("abcdcd1"));
            Assert.False(list.MatchesSegment("ab123456cd1"));
        }
 void IStreamBuilder.AddDirectory(DirectorySegment segment)
 {
     Trace += $"->AddDirectory({segment.Name});";
 }