public void CorrectyParseStacktraceCrash()
    {
        var logLines = new[]
        {
            "2020/07/15 15:31:30.887 23271 23292 Error AndroidRuntime    at libunity.0x0041e340(Native Method)",
            "2019-05-17 12:00:58.830 30759-30803/? E/CRASH: \t#00  pc 0041e340  /data/app/com.mygame==/lib/arm/libunity.so",
            "2020/07/15 15:31:30.887 23271 23292 Error AndroidRuntime    at libunity.0x1234567890123456(Native Method)",
            "2019-05-17 12:00:58.830 30759-30803/? E/CRASH: \t#00  pc 1234567890123456  /data/app/com.mygame==/lib/arm/libunity.so",
        };

        var regexs = new List <ReordableListItem>();

        foreach (var r in AndroidLogcatSettings.kAddressResolveRegex)
        {
            regexs.Add(new ReordableListItem()
            {
                Enabled = true, Name = r
            });
        }

        foreach (var line in logLines)
        {
            string address;
            string libName;
            var    result = AndroidLogcatUtilities.ParseCrashLine(regexs, line, out address, out libName);
            Assert.IsTrue(result, "Failed to parse " + line);
            Assert.IsTrue(address.Equals("0041e340") ||
                          address.Equals("1234567890123456"));
            Assert.IsTrue(libName.Equals("libunity.so"));
        }
    }
    public void CorrectyParseStacktraceCrash()
    {
        var logLines = new[]
        {
            "2020/07/15 15:31:30.887 23271 23292 Error AndroidRuntime    at libunity.0x0041e340(Native Method)",
            "2019-05-17 12:00:58.830 30759-30803/? E/CRASH: \t#00  pc 0041e340  /data/app/com.mygame==/lib/arm/libunity.so",
            "2019-05-17 12:00:58.830 30759-30803/? E/CRASH: \t#00  pc 0041e340  /data/app/com.mygame==/lib/x86/libunity.so",
            "2020/07/15 15:31:30.887 23271 23292 Error AndroidRuntime    at libunity.0x1234567890123456(Native Method)",
            "2019-05-17 12:00:58.830 30759-30803/? E/CRASH: \t#00  pc 1234567890123456  /data/app/com.mygame==/lib/arm64/libunity.so",
            "2019-05-17 12:00:58.830 30759-30803/? E/CRASH: \t#00  pc 1234567890123456  /data/app/com.mygame==/lib/x86_64/libunity.so",
        };

        var regexs = new List <ReordableListItem>();

        foreach (var r in AndroidLogcatSettings.kAddressResolveRegex)
        {
            regexs.Add(new ReordableListItem()
            {
                Enabled = true, Name = r
            });
        }


        for (int i = 0; i < logLines.Length; i++)
        {
            string expectedABI = string.Empty;
            switch (i)
            {
            case 1: expectedABI = AndroidLogcatUtilities.kAbiArmV7; break;

            case 2: expectedABI = AndroidLogcatUtilities.kAbiX86; break;

            case 4: expectedABI = AndroidLogcatUtilities.kAbiArm64; break;

            case 5: expectedABI = AndroidLogcatUtilities.kAbiX86_64; break;
            }

            var    line = logLines[i];
            string address;
            string libName;
            string abi;
            var    result = AndroidLogcatUtilities.ParseCrashLine(regexs, line, out abi, out address, out libName);
            Assert.IsTrue(result, "Failed to parse " + line);
            Assert.IsTrue(address.Equals("0041e340") || address.Equals("1234567890123456"));
            Assert.AreEqual("libunity.so", libName);
            Assert.AreEqual(expectedABI, abi);
        }
    }