Add configuration files and analyze_log.py.

This commit is contained in:
Apochen 2021-10-09 17:12:00 +08:00
parent 76057f7cdf
commit 35b14cd16d
48 changed files with 1700 additions and 0 deletions

View File

@ -0,0 +1,15 @@
{
"app_name": "APhotoManager",
"bug_id": "#116",
"events": {
"1": {
"info": "Clicked the \"Setting\" in the options.",
"reason": null,
"dependency": null
}
},
"warnings": {
},
"all_events_happened": null
}

View File

@ -0,0 +1,45 @@
{
"app_name": "ActivityDairy",
"bug_id": "#118",
"events": {
"1": {
"info": "Clicked an item in MainActivity.",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked the fabAttachPicture.",
"reason": null,
"dependency": null
},
"3": {
"info": "Get a picture.",
"reason": null,
"dependency": null
},
"4": {
"info": "Open the drawer.",
"reason": null,
"dependency": null
},
"5": {
"info": "Clicked the \"Dairy\" in the drawer.",
"reason": null,
"dependency": "4"
},
"6": {
"info": "Long clicked an image in an activity entry.",
"reason": null,
"dependency": "5"
},
"7": {
"info": "Deleted an image in an activity entry.",
"reason": null,
"dependency": "6"
}
},
"warnings": {
"7": "Canceled to delete the image in an activity entry."
},
"all_events_happened": null
}

View File

@ -0,0 +1,30 @@
{
"app_name": "ActivityDairy",
"bug_id": "#285",
"events": {
"1": {
"info": "Opened the drawer.",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked \"Setting\" in the drawer.",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Changed \"Location Service\" to Network or GPS in \"Setting\".",
"reason": null,
"dependency": "2"
},
"4": {
"info": "Changed \"Update period\" to a unique character in \"Setting\".",
"reason": "Can't input unique characters like \"$\".",
"dependency": "2"
}
},
"warnings": {
},
"all_events_happened": null
}

View File

@ -0,0 +1,30 @@
{
"app_name": "AmazeFileManager",
"bug_id": "#1232",
"steps": {
"1": {
"info": "Copied a internal file / files.",
"reason": null,
"dependency": null
},
"2": {
"info": "Opened the left drawer.",
"reason": null,
"dependency": null
},
"3": {
"info": "Clicked the second item in the drawer.",
"reason": null,
"dependency": "2"
},
"4": {
"info": "Pasted the copied file/files.",
"reason": null,
"dependency": "3"
}
},
"warnings" : {
},
"all_steps_reached": "Should copy internal files to external storage."
}

View File

@ -0,0 +1,20 @@
{
"app_name": "AmazeFileManager",
"bug_id": "#1796",
"events": {
"1": {
"info": "Cut/copy a folder or folders in the list.",
"reason": null,
"dependency": null
},
"2": {
"info": "Paste the cut/copied folder or folders.",
"reason": null,
"dependency": "1"
}
},
"warnings" : {
},
"all_events_happened": "Should cut/copy only one folder into itself."
}

View File

@ -0,0 +1,20 @@
{
"app_name": "AmazeFileManager",
"bug_id": "#1837",
"events": {
"1": {
"info": "Clicked \"Search\" button on the tool bar.",
"reason": null,
"dependency": null
},
"2": {
"info": "Search a string.",
"reason": null,
"dependency": "1"
}
},
"warnings" : {
},
"all_events_happened": "No multiple files are searched."
}

View File

@ -0,0 +1,30 @@
{
"app_name": "AnkiDroid",
"bug_id": "#4200",
"events": {
"1": {
"info": "Selected a decker.",
"reason": null,
"dependency": null
},
"2": {
"info": "Pressed \"Edit note\" button.",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Make any change in text editor.",
"reason": null,
"dependency": "2"
},
"4": {
"info": "Pressed \"Save note\" button in NoteEditor.",
"reason": null,
"dependency": null
}
},
"warnings" : {
},
"all_events_happened": "\"Don't keep activities\" options in developer mode haven't been enabled or text keep the same after change."
}

View File

@ -0,0 +1,36 @@
{
"app_name": "AnkiDroid",
"bug_id": "#4451",
"events": {
"1": {
"info": "Clicked \"Gestures\" item in Preferences.",
"reason": null,
"dependency": null
},
"2": {
"info": "Enabled gestures.",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Clicked \"Reviewing\" item in Preferences.",
"reason": null,
"dependency": null
},
"4": {
"info": "Set \"Fullscreen mode\" mode in Fullscreen Mode.",
"reason": null,
"dependency": "3"
},
"5": {
"info": "Select any Decker.",
"reason": null,
"dependency": null
}
},
"warnings" : {
"2": "Disable gestures.",
"4": "Canceled \"Fullscreen mode\" mode in Fullscreen Mode."
},
"all_events_happened": null
}

View File

@ -0,0 +1,30 @@
{
"app_name": "AnkiDroid",
"bug_id": "#4707",
"events": {
"1": {
"info": "Clicked \"Add\" button in the fab.",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked \"Media\" button.",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Clicked \"Add image\" button.",
"reason": null,
"dependency": "2"
},
"4": {
"info": "Clicked \"Camera\" button.",
"reason": null,
"dependency": "3"
}
},
"warnings" : {
},
"all_events_happened": null
}

View File

@ -0,0 +1,20 @@
{
"app_name": "AnkiDroid",
"bug_id": "#4977",
"events": {
"1": {
"info": "Clicked \"Get shared decks\" button in fab.",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked \"Card browser\" in the drawer.",
"reason": "Can't open drawer.",
"dependency": null
}
},
"warnings" : {
},
"all_events_happened": null
}

View File

@ -0,0 +1,20 @@
{
"app_name": "AnkiDroid",
"bug_id": "#5638",
"events": {
"1": {
"info": "Clicked \"Add\" button in the fab.",
"reason": "Can't open fab.",
"dependency": null
},
"2": {
"info": "Input a string in the \"Front template\" TextEditor",
"reason": null,
"dependency": "1"
}
},
"warnings" : {
},
"all_events_happened": null
}

View File

@ -0,0 +1,50 @@
{
"app_name": "AnkiDroid",
"bug_id": "#5756",
"events": {
"1": {
"info": "Clicked \"Add\" button in the fab.",
"reason": "Can't open the fab.",
"dependency": null
},
"2": {
"info": "Save or add a note",
"reason": null,
"dependency": null
},
"3": {
"info": "Selected \"Create filtered deck\" in the menu.",
"reason": null,
"dependency": null
},
"4": {
"info": "Created a new filtered deck.",
"reason": null,
"dependency": "3"
},
"5": {
"info": "Switch order to \"Random\".",
"reason": null,
"dependency": "4"
},
"6": {
"info": "Switch order back to \"Oldest seen first\".",
"reason": null,
"dependency": "4"
},
"7": {
"info": "Go back from Options.",
"reason": null,
"dependency": "4"
},
"8": {
"info": "Selected a deck.",
"reason": null,
"dependency": null
}
},
"warnings" : {
"4": "Canceled creating a new filtered deck."
},
"all_events_happened": "The Decker may be empty or the corresponding deck doesn't been selected."
}

View File

@ -0,0 +1,42 @@
{
"app_name": "AnkiDroid",
"bug_id": "#6145",
"events": {
"1": {
"info": "Clicked \"AnkiDroid\" in Preferences.",
"reason": null,
"dependency": null
},
"2": {
"info": "Changed language to zh_CN.",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Clicked \"Advanced\" in Preferences.",
"reason": null,
"dependency": null
},
"4": {
"info": "Enabled the \"Experimental V2 Scheduler\".",
"reason": null,
"dependency": "3"
},
"5": {
"info": "Selected \"Export colloction\" in menu at DeckPicker",
"reason": null,
"dependency": null
},
"6": {
"info": "Selected \"OK\" in Export Dialog",
"reason": null,
"dependency": "5"
}
},
"warnings" : {
"2": "Change language to other language (not Chinese)",
"4": "Disable the \"Experimental V2 Scheduler\".",
"6": "Selected \"Cancel\" in Export Dialog."
},
"all_events_happened": null
}

View File

@ -0,0 +1,25 @@
{
"app_name": "FireFoxLite",
"bug_id": "#4881",
"events": {
"1": {
"info": "Clicked shopping button on the left bottom.",
"reason": null,
"dependency": null
},
"2": {
"info": "Searched a keyword.",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Entered full screen.",
"reason": null,
"dependency": null
}
},
"warnings": {
},
"all_events_happened": null
}

View File

@ -0,0 +1,30 @@
{
"app_name": "FireFoxLite",
"bug_id": "#4942",
"events": {
"1": {
"info": "Clicked any site button.",
"reason": null,
"dependency": null
},
"2": {
"info": "Exited FireFoxLite.",
"reason": null,
"dependency": null
},
"3": {
"info": "Back to FireFoxLite.",
"reason": null,
"dependency": null
},
"4": {
"info": "Clicked [Tab tray].",
"reason": null,
"dependency": null
}
},
"warnings": {
},
"all_events_happened": "Should enable \"Don't keep activity\"."
}

View File

@ -0,0 +1,25 @@
{
"app_name": "FireFoxLite",
"bug_id": "#5058",
"events": {
"1": {
"info": "Clicked the menu on the right bottom.",
"reason": null,
"depedency": null
},
"2": {
"info": "Clicked \"Setting\" in the menu.",
"reason": null,
"depedency": "1"
},
"3": {
"info": "Changed the language.",
"reason": null,
"depedency": "2"
}
},
"warnings": {
},
"all_events_happened": null
}

View File

@ -0,0 +1,15 @@
{
"app_name": "FrostForFacebook",
"bug_id": "#1323",
"events": {
"1": {
"info": "Reopened the app.",
"reason": null,
"dependency": null
}
},
"warnings": {
},
"all_events_happened": "Should change device to \"Airplan mode\" and reopen the app."
}

View File

@ -0,0 +1,11 @@
{
"app_name": "MaterialFBook",
"bug_id": "#224",
"events": {
},
"warnings": {
},
"all_events_happended": "Should perform any long click."
}

View File

@ -0,0 +1,50 @@
{
"app_name": "Omni-Notes",
"bug_id": "#745",
"events": {
"1": {
"info": "Clicked the floating action button.",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked \"Text note\" in the fab.",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Clicked the \"Clip\" button on the top options to add media.",
"reason": null,
"dependency": "2"
},
"4": {
"info": "Clicked the \"Camera\" in the lists.",
"reason": null,
"dependency": "3"
},
"5": {
"info": "Returned a picture.",
"reason": null,
"dependency": null
},
"6": {
"info": "Back.",
"reason": null,
"dependency": null
},
"7": {
"info": "Clicked a note with picture.",
"reason": null,
"dependency": null
},
"8": {
"info": "Clicked the picture in the note.",
"reason": null,
"dependency": "6"
}
},
"warnings": {
},
"all_events_happened": null
}

View File

@ -0,0 +1,50 @@
{
"app_name": "ScarletNote",
"bug_id": "#114",
"steps": {
"1": {
"info": "Clicked \"Create New NoteBook\" on the right bottom.",
"reason": null,
"dependency": null
},
"2": {
"info": "Entered a notebook.",
"reason": null,
"dependency": null
},
"3": {
"info": "Clicked \"New note\" button on the right bottom.",
"reason": null,
"dependency": null
},
"4": {
"info": "Long clicked a note.",
"reason": null,
"dependency": null
},
"5": {
"info": "Clicked \"Locked Note\" in the note menu.",
"reason": null,
"dependency": "4"
},
"6": {
"info": "Clicked the menu on the left bottom.",
"reason": null,
"dependency": null
},
"7": {
"info": "Clicked \"Locked\" in the notebook menu.",
"reason": null,
"dependency": "6"
},
"8": {
"info": "Clicked the \"X\" on the left bottom to close the notebook.",
"reason": null,
"dependency": null
}
},
"warnings" : {
},
"all_steps_reached": null
}

View File

@ -0,0 +1,20 @@
{
"app_name": "WordPress",
"bug_id": "#10302",
"events": {
"1": {
"info": "Pressed \"Log in or sign up with WordPress.com\" or \"Enter your existing site address\" in the welcome page.",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked the \"Help\" button.",
"reason": null,
"dependency": "1"
}
},
"warnings": {
},
"all_events_happened": null
}

View File

@ -0,0 +1,20 @@
{
"app_name": "WordPress",
"bug_id": "#10363",
"events": {
"1": {
"info": "Selected the \"Blog Posts\".",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked the \"toggle_post_list_item_layout\" Buttom in the toolbar of PostsList.",
"reason": null,
"dependency": "1"
}
},
"warnings": {
},
"all_events_happened": null
}

View File

@ -0,0 +1,35 @@
{
"app_name": "WordPress",
"bug_id": "#10547",
"events": {
"1": {
"info": "Selected the \"Blog Posts\".",
"reason": null,
"dependency": null
},
"2": {
"info": "Selected page \"Drafts\" in post list.",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Clicked \"Edit\" in the post list.",
"reason": null,
"dependency": "2"
},
"4": {
"info": "Selected \"Preview\" in options menu.",
"reason": null,
"dependency": "3"
},
"5": {
"info": "Pressed back.",
"reason": null,
"dependency": null
}
},
"warnings": {
},
"all_events_happened": "Should enable \"Don't keep activities\"."
}

View File

@ -0,0 +1,20 @@
{
"app_name": "WordPress",
"bug_id": "#11135",
"events": {
"1": {
"info": "Selected the \"Reader\" page.",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked the \"reader_activity_comment_list\".",
"reason": null,
"dependency": "1"
}
},
"warnings": {
},
"all_events_happened": null
}

View File

@ -0,0 +1,35 @@
{
"app_name": "WordPress",
"bug_id": "#11992",
"events": {
"1": {
"info": "Selected the \"Reader\" page.",
"reason": null,
"dependency": null
},
"2": {
"info": "Selected back to the \"My site\" page",
"reason": null,
"dependency": null
},
"3": {
"info": "Selected the \"Blog Posts\".",
"reason": null,
"dependency": null
},
"4": {
"info": "Exited the \"Blog Posts\".",
"reason": null,
"dependency": null
},
"5": {
"info": "Selected the \"Site Pages\".",
"reason": null,
"dependency": null
}
},
"warnings": {
},
"all_events_happened": "Should select the \"Reader\" page and enter \"Blog post\" or \"Site pages\" twice or once respectively. "
}

View File

@ -0,0 +1,45 @@
{
"app_name": "WordPress",
"bug_id": "#6530",
"events": {
"1": {
"info": "Chose \"Try it\" to enable new editor.",
"reason": "Chose \"Not now\" instead.",
"dependency": null
},
"2": {
"info": "Clicked the \"Blog posts\" at the main.",
"reason": null,
"dependency": null
},
"3": {
"info": "Clicked the floating act button to create a new post.",
"reason": null,
"dependency": null
},
"4": {
"info": "Clicked the \"+\" to open media window.",
"reason": null,
"dependency": null
},
"5": {
"info": "Added media files to post.",
"reason": "Can't read media files.",
"dependency": "4"
},
"6": {
"info": "Pressed the Back button.",
"reason": null,
"dependency": null
},
"7": {
"info": "Pressed the \"Delete\" button in the post list card view.",
"reason": null,
"dependency": null
}
},
"warnings" : {
"1": "Chose \"Not now\" to close the dialog. The crash wouldn't occur."
},
"all_events_happended": "Should delete the post when uploading."
}

View File

@ -0,0 +1,35 @@
{
"app_name": "WordPress",
"bug_id": "#7182",
"events": {
"1": {
"info": "Pressed \"LOG IN\" in the welcome page.",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked \"Log in to your site by entering your site address instead.\" in the email login page.",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Clicked \"NEXT\" in site address login.",
"reason": null,
"dependency": "2"
},
"4": {
"info": "Changed screen to landscape.",
"reason": null,
"dependency": null
},
"5": {
"info": "Clicked \"NEXT\" in username and password login with landscape mode.",
"reason": null,
"dependency": "3"
}
},
"warnings" : {
},
"all_events_happened": "Should keep landscape mode when logining."
}

View File

@ -0,0 +1,61 @@
{
"app_name": "AndBible",
"bug_id": "#216",
"steps": {
"1": {
"info": "Clicked \"OK\" in the \"Download a Bible from the Internet\" dialog at StartupActivity.",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked \"OK\" to download a document (bible or book).",
"reason": null,
"dependency": null
},
"3": {
"info": "Select the document type to \"Book\" in \"Download Documents\".",
"reason": null,
"dependency": null
},
"4": {
"info": "Clicked \"OK\" in \"Download Documents\"after downloading documents.",
"reason": null,
"dependency": null
},
"5": {
"info": "Opened the left drawer.",
"reason": null,
"dependency": null
},
"6": {
"info": " Clicked \"Choose Document\" Button in the drawer.",
"reason": null,
"dependency": null
},
"7": {
"info": "Selected a document.",
"reason": null,
"dependency": "6"
},
"8": {
"info": "Selected a general book key.",
"reason": null,
"dependency": null
},
"9": {
"info": "Clicked the \"Find\" Button in the drawer.",
"reason": null,
"dependency": null
},
"10": {
"info": "Clicked \"CREATE\" in \"Search Index\".",
"reason": null,
"dependency": null
}
},
"warnings" : {
"1": "Clicked \"Cancel\" in the \"Download a Bible from the Internet\" dialog at StartupActivity.",
"2": "Clicked \"CANCEL\" to give up downloading a document (bible or book)."
},
"all_steps_reached": null
}

View File

@ -0,0 +1,72 @@
{
"app_name": "AndBible",
"bug_id": "#375",
"events": {
"1": {
"info": "Clicked \"OK\" in the \"Download a Bible from the Internet\" dialog at StartupActivity.",
"reason": null,
"dependency": null
},
"2": {
"info": "Selected a book.",
"reason": null,
"dependency": null
},
"3": {
"info": "Clicked \"OK\" to download a document(bible or book).",
"reason": null,
"dependency": null
},
"4": {
"info": "Clicked \"OK\" in \"Download Documents\" after downloading documents.",
"reason": null,
"dependency": null
},
"5": {
"info": "clicked \"New Tab\" in menu \"Tabs\".",
"reason": null,
"dependency": null
},
"6": {
"info": "Set Current Document to a new book.",
"reason": null,
"dependency": null
},
"7": {
"info": "Enter \"Choose Document\".",
"reason": null,
"dependency": null
},
"8": {
"info": "Selected documents to delete.",
"reason": null,
"dependency": null
},
"9": {
"info": "Deleting a document.",
"reason": null,
"dependency": null
},
"10": {
"info": "Pressed back.",
"reason": null,
"dependency": null
},
"11": {
"info": "Clicked \"Switch to tab\" in menu \"Tabs\".",
"reason": null,
"dependency": null
},
"12": {
"info": "Selected a tab to open.",
"reason": null,
"dependency": null
}
},
"warnings": {
"1": "Clicked \"Cancel\" in the \"Download a Bible from the Internet\" dialog at StartupActivity.",
"3": "Clicked \"CANCEL\" to give up downloading a document(bible or book)."
},
"all_events_happened": null
}

View File

@ -0,0 +1,55 @@
{
"app_name": "AndBible",
"bug_id": "#480",
"events": {
"1": {
"info": "Clicked \"OK\" in the \"Download a Bible from the internet\" dialog at StartupActivity.",
"reason": null,
"dependency": null
},
"2": {
"info": "Downloaded a book.",
"reason": null,
"dependency": null
},
"3": {
"info": "Clicked \"OK\" in \"Download Documents\"",
"reason": null,
"dependency": null
},
"4": {
"info": "Opened the left drawer.",
"reason": null,
"dependency": null
},
"5": {
"info": "Clicked \"Manage Bookmark Labels\" in the drawer.",
"reason": null,
"dependency": null
},
"6": {
"info": "Clicked \"NEW LABEL\" in \"Manage Bookmark Labels\".",
"reason": null,
"dependency": null
},
"7": {
"info": "Created or edited a label.",
"reason": null,
"dependency": null
},
"8": {
"info": "Deleted a label.",
"reason": null,
"dependency": null
},
"9": {
"info": "Edited a empty label.",
"reason": null,
"dependency": null
}
},
"warnings": {
"1": "Clicked \"Cancel\" in the \"Download a Bible from the Internet\" dialog at StartupActivity."
},
"all_events_happened": null
}

View File

@ -0,0 +1,46 @@
{
"app_name": "AndBible",
"bug_id": "#697",
"events": {
"1": {
"info": "Clicked \"OK\" in the \"Download a Bible from the internet\" dialog at StartupActivity.",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked \"Yes\" in \"Do you want to proceed to download documents?\" dialog \nor clicked \"download_do_not_ask\" in \"Do you want to proceed to download documents?\" dialog.",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Downloaded a book.",
"reason": null,
"dependency": null
},
"4": {
"info": "Click \"OK\" in \"Download Documents\".",
"reason": null,
"dependency": null
},
"5": {
"info": "Long pressed chapterVerse.",
"reason": null,
"dependency": null
},
"6": {
"info": "Clicked myNoteAddEdit after longPressing chapterVerse.",
"reason": null,
"dependency": "5"
},
"7": {
"info": "Clicked \"Back\" to save note.",
"reason": null,
"dependency": null
}
},
"warnings": {
"1": "Clicked \"Cancel\" in the \"Download a Bible from the Internet\" dialog at StartupActivity.",
"2": "Clicked \"Cancel\" in \"Do you want to proceed to download documents?\" dialog."
},
"all_events_happened": null
}

View File

@ -0,0 +1,51 @@
{
"app_name": "AndBible",
"bug_id": "#703",
"events": {
"1": {
"info": "Clicked \"OK\" in the \"Download a Bible from the internet\" dialog at StartupActivity.",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked \"Yes\" in \"Do you want to proceed to download documents?\" dialog \nor clicked \"download_do_not_ask\" in \"Do you want to proceed to download documents?\" dialog.",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Downloaded a book.",
"reason": null,
"dependency": null
},
"4": {
"info": "Click \"OK\" in \"Download Documents\".",
"reason": null,
"dependency": null
},
"5": {
"info": "Long pressed chapterVerse.",
"reason": null,
"dependency": null
},
"6": {
"info": "Clicked myNoteAddEdit after longPress chapterVerse.",
"reason": null,
"dependency": "5"
},
"7": {
"info": "Clicked searchButton.",
"reason": null,
"dependency": null
},
"8": {
"info": "Clicked CREATE after click searchButton.",
"reason": null,
"dependency": "7"
}
},
"warnings": {
"1": "Clicked \"Cancel\" in the \"Download a Bible from the Internet\" dialog at StartupActivity.",
"2": "Clicked \"Cancel\" in \"Do you want to proceed to download documents?\" dialog."
},
"all_events_happened": null
}

View File

@ -0,0 +1,35 @@
{
"app_name": "Collect",
"bug_id": "#3222",
"events": {
"1": {
"info": "Clicked the \"General Settings\" in the options.",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked the \"Form management\" in \"General Settings\".",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Disabled the \"Hide old form version\" in \"Form management\".",
"reason": null,
"dependency": "2"
},
"4": {
"info": "Back.",
"reason": null,
"dependency": null
},
"5": {
"info": "Clicked the \"Fill Blank Form\" in the main page.",
"reason": null,
"dependency": null
}
},
"warnings": {
"3": "Enabled the \"hide old form version\" in \"Form management\"."
},
"all_events_happened": "Should keep the state of Event 3."
}

View File

@ -0,0 +1,30 @@
{
"app_name": "Commons",
"bug_id": "#1385",
"events": {
"1": {
"info": "Clicked \"Nearby\" in the drawer.",
"reason": "Can't open the drawer.",
"dependency": null
},
"2": {
"info": "Clicked the \"Detail list\" in \"Nearby\".",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Changed the Nearby layout to landscape.",
"reason": "Can't rotate the screen.",
"dependency": null
},
"4": {
"info": "Changed the Nearby layout back to portrait as soon as possible.",
"reason": null,
"dependency": null
}
},
"warnings" : {
},
"all_events_happened": "Didn't rotate back the screen from landscape to portrait in time."
}

View File

@ -0,0 +1,36 @@
{
"app_name": "Commons",
"bug_id": "#1391",
"events": {
"1": {
"info": "Clicked \"Nearby\" in the drawer.",
"reason": "Can't open the drawer.",
"dependency": null
},
"2": {
"info": "Selected a place on the map and showed the bottom sheet.",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Clicked \"Setting\" in the drawer.",
"reason": "Can't open the drawer.",
"dependency": null
},
"4": {
"info": "Enabled the \"Night mode\" in the setting.",
"reason": null,
"dependency": "3"
},
"5": {
"info": "Back to \"Nearby\" again.",
"reason": null,
"dependency": null
}
},
"warnings" : {
"2": "Cancelled a place on the map and hid the bottom sheet.",
"4": "Disabled the \"Night mode\" in the setting."
},
"all_events_happened": "Should keep the state of Event 2 and enable the \"Night mode\" when enter \"Nearby\" again."
}

View File

@ -0,0 +1,31 @@
{
"app_name": "Commons",
"bug_id": "#1581",
"events": {
"1": {
"info": "Clicked \"Nearby\" in the drawer.",
"reason": "Can't open the drawer.",
"dependency": null
},
"2": {
"info": "Checked that GPS (location permission) is disabled.",
"reason": null,
"dependency": null
},
"3": {
"info": "Selected \"ENABLE GPS\" in the GPS requirement dialog.\nThis happens when the GPS is disabled.",
"reason": null,
"dependency": "2"
},
"4": {
"info": "Selected \"OK\" in the another GPS requirement dialog.\nThis happens when the GPS is enabled but this app isn't granted with GPS permission.",
"reason": null,
"dependency": null
}
},
"warnings" : {
"3": "Selected \"CANCEL\" in the GPS requirement dialog.\nThis happens when the GPS is disabled.",
"4": "Selected \"CANCEL\" in the another GPS requirement dialog.\nThis happens when the GPS is enabled but this app isn't granted with GPS permission."
},
"all_events_happened": "This crash requires that it's the first time to get permission from OS."
}

View File

@ -0,0 +1,25 @@
{
"app_name": "Commons",
"bug_id": "#2123",
"events": {
"1": {
"info": "Clicked \"explore\" in the drawer.",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked \"search\" in the explore.",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Clicked any item in search results.",
"reason": null,
"dependency": "2"
}
},
"warnings" : {
},
"all_events_happened": null
}

View File

@ -0,0 +1,30 @@
{
"app_name": "Commons",
"bug_id": "#3244",
"events": {
"1": {
"info": "Clicked \"Nearby\".",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked the \"Detail list\" in \"Nearby\".",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Selected a place in the nearby list.",
"reason": null,
"dependency": "2"
},
"4": {
"info": "Clicked the \"Camera\" in nearby list item menu.",
"reason": null,
"dependency": "3"
}
},
"warnings" : {
},
"all_events_happened": "Should finish taking a photo."
}

View File

@ -0,0 +1,20 @@
{
"app_name": "GeoHashDroid",
"bug_id": "#73",
"events": {
"1": {
"info": "Clicked the \"GRATICULE\" on the bottom.",
"reason": null,
"dependency": null
},
"2": {
"info": "Checked the \"Globalhash!\" checkbox.",
"reason": null,
"dependency": "1"
}
},
"warnings": {
},
"all_events_happened": null
}

View File

@ -0,0 +1,20 @@
{
"app_name": "NextCloud",
"bug_id": "#1918",
"events": {
"1": {
"info": " Clicked a photo in the list.",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked the \"Send/Share\" button in menu of Previewimage.",
"reason": "Can't open the menu",
"dependency": "1"
}
},
"warnings": {
},
"all_events_happened": null
}

View File

@ -0,0 +1,20 @@
{
"app_name": "NextCloud",
"bug_id": "#4026",
"events": {
"1": {
"info": "Opened app NextCloud",
"reason": null,
"dependency": null
},
"2": {
"info": "Enter NextCloud again.",
"reason": null,
"dependency": null
}
},
"warnings": {
},
"all_events_happened": null
}

View File

@ -0,0 +1,42 @@
{
"app_name": "NextCloud",
"bug_id": "#4792",
"events": {
"1": {
"info": "Opened the drawer on the left.",
"reason": null,
"dependency": null
},
"2": {
"info": "Selected the \"Auto upload\" in the drawer",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Selected \"Set up a custom folder\" in menu",
"reason": null,
"dependency": "2"
},
"4": {
"info": "Selected \"Remote folder\" in \"Create new custom folder setup\".",
"reason": null,
"dependency": "3"
},
"5": {
"info": "Selected the \"New folder\" in menu.",
"reason": null,
"dependency": "4"
},
"6": {
"info": "Typed some chars and pressed \"Create\".",
"reason": null,
"dependency": "5"
}
},
"warnings": {
"3": "Canceled the setup.",
"4": "Canceled choosing a remote folder.",
"6": "Canceled creating a new folder."
},
"all_events_happened": null
}

View File

@ -0,0 +1,30 @@
{
"app_name": "NextCloud",
"bug_id": "#5173",
"events": {
"1": {
"info": "Opened the drawer on the left.",
"reason": null,
"dependency": null
},
"2": {
"info": "Selected the \"Auto upload\" in drawer",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Selected \"Set up a custom folder\" in menu",
"reason": "Can't open the menu on the right top.",
"dependency": "2"
},
"4": {
"info": "Selected \"Remote folder\" in \"Create new custom folder setup\".",
"reason": null,
"dependency": "3"
}
},
"warnings": {
"3": "Canceled the setup."
},
"all_events_happened": null
}

View File

@ -0,0 +1,15 @@
{
"app_name": "OpenLauncher",
"bug_id": "#67",
"events": {
"1": {
"info": "Clicked the \"Volume\" icon in the drawer",
"reason": null,
"dependency": null
}
},
"warnings": {
},
"all_events_happened": "Should open the \"Do not disturb\" pref in settings."
}

View File

@ -0,0 +1,57 @@
{
"app_name": "OsmEditer4Android",
"bug_id": "#637",
"events": {
"1": {
"info": "Clicked \"LOAD\" in \"Download at other location\".",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked the \"Gear\" to enter \"Preferences\".",
"reason": null,
"dependency": null
},
"3": {
"info": "Clicked \"Validator preference\" in \"Preferences\".",
"reason": null,
"dependency": "2"
},
"4": {
"info": "Clicked a \"Re-survey entry\".",
"reason": null,
"dependency": "3"
},
"5": {
"info": "Clicked \"DELETE\" in \"Edit re-survey entry\".",
"reason": null,
"dependency": "4"
},
"6": {
"info": "Clicked a \"Check entry\".",
"reason": null,
"dependency": null
},
"7": {
"info": "Clicked \"DELETE\" in \"Edit check entry\".",
"reason": null,
"dependency": "6"
},
"8": {
"info": "Set key, value and max age respectively.",
"reason": null,
"dependency": null
},
"9": {
"info": "Clicked \"Done\" in \"Validator ruleset Default\".",
"reason": null,
"dependency": null
}
},
"warnings": {
"1": "Clicked \"GO TO MAP\" in \"Download at other location\"",
"5": "Clicked \"CANCEL\" or \"SAVE\" in \"Edit re-survey entry\".",
"7": "Clicked \"CANCEL\" or \"SAVE\" in \"Edit check entry\"."
},
"all_events_happened": null
}

View File

@ -0,0 +1,40 @@
{
"app_name": "OsmEditor4Android",
"bug_id": "#729",
"events": {
"1": {
"info": "Clicked the \"unlock\" floating button to unlock the map.",
"reason": null,
"dependency": null
},
"2": {
"info": "Clicked a position on the map.",
"reason": null,
"dependency": null
},
"3": {
"info": "Selected a item in the popup list.",
"reason": null,
"dependency": "2"
},
"4": {
"info": "Turned to property editor.",
"reason": null,
"dependency": null
},
"5": {
"info": "Turned to \"Presets\" page in property editor.",
"reason": null,
"dependency": "4"
},
"6": {
"info": "Searched in preset fragment with any string.",
"reason": null,
"dependency": "5"
}
},
"warnings": {
"1": "Clicked the \"unlock\" floating button twice to lock the map."
},
"all_events_happened": null
}

155
scripts/analyze_log.py Normal file
View File

@ -0,0 +1,155 @@
import os.path
import re
import sys
import json
from datetime import datetime
def print_header(header: str):
com_len = int((80 - len(header)) / 2)
print("-" * com_len + header + "-" * com_len)
def print_title(title: str):
com_len = int((80 - len(title)) / 2)
print("*" * com_len + title + "*" * com_len)
def init_counts(events):
res = dict()
for event in events:
res[event] = 0
return res
def file_exists(file_path):
if not os.path.exists(file_path):
print("file \'%s\' doesn't exists. Analysis terminated." % file_path)
return False
return True
class Analyzer:
def __init__(self, json_path):
with open(json_path, "r", encoding="utf-8") as f:
info = json.load(f)
self.app_name = info["app_name"] # Get the name of the app
self.bug_id = info["bug_id"] # Get the bug id of
self.events = info["events"] # Get all events
self.total_event = len(self.events) # Get the numbers of events
self.event_counts = init_counts(self.events) # Init event counter
self.warning_counts = init_counts(self.events) # Init warning counter
self.warnings = info["warnings"] # Get all Warnings
self.procedure = [] # Maintain a list collecting the events analyzed
self.last_event = None # Record the last event analyzer has gone through
self.all_events_reached = info["all_events_reached"]
self.first_time = dict() # Record the time of first reaching event n
self.delta = None
def analyze(self, log_path, time_path):
# Process the time file
if not file_exists(time_path):
return False
with open(time_path, "r", encoding="utf-8") as f:
start_time = datetime.strptime(f.readline().split("\n")[0], "%Y-%m-%d-%H:%M:%S")
self.delta = datetime.strptime(f.readline().split("\n")[0], "%Y-%m-%d-%H:%M:%S") - start_time
# Process the log file
if not file_exists(log_path):
return False
with open(log_path, "r", encoding="utf-8") as f:
for line in f:
if re.search("Themis", line): # Search “Themis"
# Get the arrival time
info = line.split(' ')
event_time = datetime.strptime("2021-" + info[0] + " " + info[1].split('.')[0], "%Y-%m-%d %H:%M:%S")
if re.search("Event ", line, re.I): # 匹配“event”字段
event_id = line[re.search("event ", line, re.I).span()[1]] # Get event id
self.event_counts[str(event_id)] += 1 # The corresponding event count add 1
self.last_event = event_id # Record the last event reached scanned
if event_id not in self.first_time:
self.first_time[event_id] = event_time - start_time # Record the relative time
if re.search("Warning ", line, re.I): # 匹配“Warning”字段
warning_id = line[re.search("Warning ", line, re.I).span()[1]]
self.warning_counts[warning_id] += 1
return True
def show_result(self, tool_name):
print_title("[ %s-%s (%s) ]" % (self.app_name, self.bug_id, tool_name))
print_header("[ The statistics of each event ]")
zero_count = 0 # Count up the events which are never reached
for event in self.event_counts:
if self.event_counts[event] == 0:
self.first_time[event] = None
zero_count += 1
print(" "*10 + "[ %s ] Event %s/%d: %3d-%-3d. (%s/%s)\n" %
(self.bug_id, event,
self.total_event,
self.event_counts[event],
self.warning_counts[event],
self.first_time[event], self.delta) +
" "*14 + "> event info: %s" % self.events[event]["info"])
if self.warning_counts[event] > 0:
print(" "*14 + "> Warning info: %s" % self.warnings[event]["info"])
if zero_count != 0: # If there is any event that its `count` > 0
print_header("[ Analysis of the missing events ]")
for event in self.event_counts:
if self.event_counts[event] == 0:
print(" "*10 + "[ %s ] event %s\n" % (self.bug_id, event) +
" "*14 + "> The possible reason: %s\n" % self.events[event]["reason"] +
" "*14 + "> The previous related events: %s" % self.events[event]["dependency"])
if zero_count == 0: # If there is not any event that its `count` > 0
print_header("[ All events reached but crash doesn't occur ]")
print(" "*10 + "[ %s ] The possible reason for this: %s" % (self.bug_id, self.all_events_reached))
print_title("[ Analysis finished ]")
def main(log_dir: str):
base_dir = os.path.basename(log_dir)
first_pos, second_pos, third_pos, forth_pos = \
re.search("instrumented-", base_dir).span(), \
re.search("-#", base_dir).span(), \
re.search(".apk.", base_dir).span(), \
re.search(".result", base_dir).span()
app_name, bug_id, tool_name = \
base_dir[first_pos[1]: second_pos[0]].split("-")[0],\
base_dir[second_pos[0]+1: third_pos[0]],\
base_dir[third_pos[1]: forth_pos[0]]
json_path = os.path.join("..", app_name, "configuration-" + bug_id + ".json") # Get the path of the json file
analyzer = Analyzer(json_path) # Initialize an Analyzer
log_path = os.path.join(log_dir, "logcat.log")
print("[ Analyzer ] The log path:\n > %s" % log_path)
time_path = os.path.join(log_dir, tool_name + "_testing_time_on_emulator.txt")
print("[ Analyzer ] The time record path:\n > %s" % time_path)
if analyzer.analyze(log_path, time_path): # Start analyzing log
analyzer.show_result(tool_name)
def help_info():
print("[Usage]: python analyze_log.py log_path1[ log_path2[ ...]]")
print("[Usage]: Please put log files and the json file at the same directory with the same filename.")
if __name__ == "__main__":
if len(sys.argv) <= 1:
help_info()
else:
for i in range(1, len(sys.argv)):
main(sys.argv[i])

View File

@ -0,0 +1,25 @@
{
"app_name": "Sunflower",
"bug_id": "#239",
"events": {
"1": {
"info": "Clicked the drawer on the left.",
"reason": null,
"dependency": null
},
"2": {
"info": "Selected \"Plant list\".",
"reason": null,
"dependency": "1"
},
"3": {
"info": "Clicked two items at the same time.",
"reason": null,
"dependency": "2"
}
},
"warnings": {
},
"all_events_happened": null
}