public IEnumerator TestFingerprintBehaviorForNormalizedExceptionMessage_ShouldntGenerateFingerprintForDisabledOption_FingerprintDoesntExist()
        {
            BacktraceClient.Configuration = GetValidClientConfiguration();
            BacktraceClient.Configuration.UseNormalizedExceptionMessage = false;
            BacktraceClient.Refresh();

            // exception without stack trace might happened when exception occured because of
            // invalid game object setting or via weird crash
            // exception below has empty exception stack trace
            var exception = new BacktraceUnhandledException("00:00:00 00/00/00 Unhandled exception", string.Empty);
            var report    = new BacktraceReport(exception);

            bool eventFired = false;

            BacktraceClient.BeforeSend = (BacktraceData data) =>
            {
                Assert.IsFalse(data.Attributes.Attributes.ContainsKey("_mod_fingerprint"));
                eventFired = true;
                // prevent backtrace data from sending to Backtrace.
                return(null);
            };

            yield return(BacktraceClient.StartCoroutine(CallBacktraceClientAndWait(report)));


            Assert.IsTrue(eventFired);
        }
        public IEnumerator TestFingerprintBehaviorForNormalizedExceptionMessage_ShouldGenerateFingerprintAndShouldntRemoveAnyLetter_ShouldIncludeFingerprintInBacktraceReport()
        {
            BacktraceClient.Configuration = GetValidClientConfiguration();
            BacktraceClient.Configuration.UseNormalizedExceptionMessage = true;
            BacktraceClient.Refresh();

            var normalizedMessage = "Unhandledexception";
            var exception         = new BacktraceUnhandledException(normalizedMessage, string.Empty);
            var report            = new BacktraceReport(exception);

            bool eventFired = false;

            BacktraceClient.BeforeSend = (BacktraceData data) =>
            {
                const string modFingerprintKey = "_mod_fingerprint";
                Assert.IsTrue(data.Attributes.Attributes.ContainsKey(modFingerprintKey));
                Assert.IsNotNull(data.Attributes.Attributes[modFingerprintKey]);
                Assert.AreEqual(normalizedMessage.GetSha(), data.Attributes.Attributes[modFingerprintKey]);
                // prevent backtrace data from sending to Backtrace.
                eventFired = true;
                // prevent backtrace data from sending to Backtrace.
                return(null);
            };

            yield return(BacktraceClient.StartCoroutine(CallBacktraceClientAndWait(report)));

            Assert.IsTrue(eventFired);
        }
        public IEnumerator TestFingerprintBehaviorForNormalizedExceptionMessage_ShouldGenerateFingerprintForExceptionReportWithoutStackTrace_ShouldIncludeFingerprintInBacktraceReport()
        {
            BacktraceClient.Configuration = GetValidClientConfiguration();
            BacktraceClient.Configuration.UseNormalizedExceptionMessage = true;
            BacktraceClient.Refresh();

            // exception without stack trace might happened when exception occured because of
            // invalid game object setting or via weird crash
            // exception below has empty exception stack trace
            var exception = new BacktraceUnhandledException("00:00:00 00/00/00 Unhandled exception", string.Empty);
            var expectedNormalizedMessage = "Unhandledexception";
            var report = new BacktraceReport(exception);

            bool eventFired = false;

            BacktraceClient.BeforeSend = (BacktraceData data) =>
            {
                Assert.IsNotNull(data.Attributes.Attributes["_mod_fingerprint"]);
                Assert.AreEqual(expectedNormalizedMessage.GetSha(), data.Attributes.Attributes["_mod_fingerprint"]);
                eventFired = true;
                // prevent backtrace data from sending to Backtrace.
                return(null);
            };

            yield return(BacktraceClient.StartCoroutine(CallBacktraceClientAndWait(report)));


            Assert.IsTrue(eventFired);
        }