public void Verify_ValidScopeInstanceNames_Parsed()
        {
            TimedScopeInstanceName scopeName;

            if (VerifyTrueAndReturn(TimedScopeInstanceName.TryParse(OnlyScope, out scopeName)))
            {
                Assert.Equal(scopeName.Scope, TestScope);
                Assert.Equal(null, scopeName.SubType);
                Assert.Equal(null, scopeName.MetaData);
                Assert.Equal(TestClassification, scopeName.Classification);
            }

            if (VerifyTrueAndReturn(TimedScopeInstanceName.TryParse(ScopeWithSubtype, out scopeName)))
            {
                Assert.Equal(TestScope, scopeName.Scope);
                Assert.Equal(TestSubtype, scopeName.SubType);
                Assert.Equal(null, scopeName.MetaData);
                Assert.Equal(TestClassification, scopeName.Classification);
            }

            if (VerifyTrueAndReturn(TimedScopeInstanceName.TryParse(ScopeWithMetadata, out scopeName, preferMetaData: true)))
            {
                Assert.Equal(TestScope, scopeName.Scope);
                Assert.Equal(null, scopeName.SubType);
                Assert.Equal(TestMetadata, scopeName.MetaData);
                Assert.Equal(TestClassification, scopeName.Classification);
            }

            if (VerifyTrueAndReturn(TimedScopeInstanceName.TryParse(ScopeWithSubtypeAndMetadata, out scopeName)))
            {
                Assert.Equal(TestScope, scopeName.Scope);
                Assert.Equal(TestSubtype, scopeName.SubType);
                Assert.Equal(TestMetadata, scopeName.MetaData);
                Assert.Equal(TestClassification, scopeName.Classification);
            }

            if (VerifyTrueAndReturn(TimedScopeInstanceName.TryParse(ScopeNameWithDescription, out scopeName)))
            {
                Assert.Equal(TestScope, scopeName.Scope);
                Assert.Equal(TestSubtype, scopeName.SubType);
                Assert.Equal(TestMetadata, scopeName.MetaData);
                Assert.Equal(TestClassification, scopeName.Classification);
            }

            if (VerifyTrueAndReturn(TimedScopeInstanceName.TryParse(ScopeWithEmptySubtype, out scopeName)))
            {
                Assert.Equal(TestScope, scopeName.Scope);
                Assert.Equal(string.Empty, scopeName.SubType);
                Assert.Equal(null, scopeName.MetaData);
                Assert.Equal(TestClassification, scopeName.Classification);
            }

            if (VerifyTrueAndReturn(TimedScopeInstanceName.TryParse(ScopeWithEmptySubtypeAndMetadata, out scopeName)))
            {
                Assert.Equal(TestScope, scopeName.Scope);
                Assert.Equal(string.Empty, scopeName.SubType);
                Assert.Equal(TestMetadata, scopeName.MetaData);
                Assert.Equal(TestClassification, scopeName.Classification);
            }
        }
 /// <summary>
 /// Check equality of two timed scope instance names by all possible ways
 /// </summary>
 /// <param name="x">First instance</param>
 /// <param name="y">Second instance</param>
 private void CheckHashCodesAndEquality(TimedScopeInstanceName x, TimedScopeInstanceName y)
 {
     Assert.Equal(x.GetHashCode(), y.GetHashCode());
     Assert.True(x.Equals(y));
     Assert.True(x.Equals((object)y));
     Assert.True(x == y);
     Assert.False(x != y);
 }
        /// <summary>
        /// Checks that parsing a string and then converting back to string gives the same string
        /// </summary>
        /// <param name="scopeName">String to be parsed and converted back</param>
        private void CheckRoundTrip(string scopeName)
        {
            TimedScopeInstanceName parsed;

            if (VerifyTrueAndReturn(TimedScopeInstanceName.TryParse(scopeName, out parsed)))
            {
                Assert.Equal(parsed.ToString(), scopeName);
            }
        }
        /// <summary>
        /// Verifies that parsing the same string gives equal TimedScopeInstanceName instances
        /// </summary>
        /// <param name="scopeName">The string to be parsed</param>
        private void CheckSingleScope(string scopeName)
        {
            TimedScopeInstanceName parsed1;
            TimedScopeInstanceName parsed2;

            if (VerifyTrueAndReturn(TimedScopeInstanceName.TryParse(scopeName, out parsed1)) &&
                VerifyTrueAndReturn(TimedScopeInstanceName.TryParse(scopeName, out parsed2)))
            {
                CheckHashCodesAndEquality(parsed1, parsed2);
            }
        }
        public void Verify_MalformedScopeNames_NotParsed()
        {
            TimedScopeInstanceName scopeName;

            Assert.False(TimedScopeInstanceName.TryParse(".SystemError", out scopeName));
            Assert.False(TimedScopeInstanceName.TryParse(null, out scopeName));
            Assert.False(TimedScopeInstanceName.TryParse("", out scopeName));
            Assert.False(TimedScopeInstanceName.TryParse("///", out scopeName));
            Assert.False(TimedScopeInstanceName.TryParse("...///", out scopeName));
            Assert.False(TimedScopeInstanceName.TryParse("Scope.MalformedClassification/x", out scopeName));
            Assert.False(TimedScopeInstanceName.TryParse("/x/y", out scopeName));
            Assert.False(TimedScopeInstanceName.TryParse("x/y/z/a", out scopeName));
        }