public void Should_use_provided_file_as_triple_store()
        {
            // Given

            // When
            FileTripleStore tripleStore = new FileTripleStore(filePath);

            // Then
            AssertTriplesCount(tripleStore);
        }
        public void Should_use_provided_data_as_triple_store()
        {
            // Given
            MemoryStream stream = CreateMemoryStream();

            // When
            FileTripleStore tripleStore = new FileTripleStore(stream, new TriGParser(), new TriGWriter());

            // Then
            AssertTriplesCount(tripleStore);
        }
        public void Should_write_deleted_statements_to_file()
        {
            // Given
            FileTripleStore tripleStore = new FileTripleStore(filePath);

            // When
            DeleteTriple(tripleStore);

            // Then
            AssertTripleNotExists(tripleStore);
            AssertEntityNotExists(File.ReadAllText(filePath));
        }
        public void Should_write_inserted_statements_to_file()
        {
            // Given
            FileTripleStore tripleStore = new FileTripleStore(filePath);

            // When
            InsertTriple(tripleStore);

            // Then
            AssertTripleExists(tripleStore);
            AssertTripleExists(File.ReadAllText(filePath));
        }
        public void Should_write_deleted_statements_to_stream()
        {
            // Given
            MemoryStream    stream      = CreateMemoryStream();
            FileTripleStore tripleStore = new FileTripleStore(stream, new TriGParser(), new TriGWriter());

            // When
            DeleteTriple(tripleStore);

            // Then
            AssertTripleNotExists(tripleStore);
            AssertEntityNotExists(System.Text.UTF8Encoding.UTF8.GetString(stream.ToArray()));
        }
        public void Should_handle_concurrent_operations()
        {
            // Given
            int             maxUsers    = 4;
            FileTripleStore tripleStore = new FileTripleStore(filePath);

            // When
            CountdownEvent synchronizationContext = new CountdownEvent(maxUsers);

            Task.Factory.StartNew(() => { InsertTriple(tripleStore, 0); synchronizationContext.Signal(); });
            Task.Factory.StartNew(() => { InsertTriple(tripleStore, 1); synchronizationContext.Signal(); });
            Task.Factory.StartNew(() => { InsertTriple(tripleStore, 2); synchronizationContext.Signal(); });
            Task.Factory.StartNew(() => { InsertTriple(tripleStore, 3); synchronizationContext.Signal(); });
            synchronizationContext.Wait();

            // Then
            for (int count = 0; count < maxUsers; count++)
            {
                AssertTripleExists(tripleStore, count);
            }
        }