< html >
< head >
< meta charset = 'utf-8' >
< title > TextSecure test runner< / title >
< link rel = "stylesheet" href = "../node_modules/mocha/mocha.css" / >
< link rel = "stylesheet" href = "../stylesheets/manifest.css" / >
< / head >
< body >
< div id = "mocha" >
< / div >
< div id = "tests" >
< / div >
< div id = "render-light-theme" class = 'index' style = "width: 800; height: 500; margin:10px; border: solid 1px black;" >
< / div >
< div id = "render-dark-theme" class = 'index' style = "width: 800; height: 500; margin:10px; border: solid 1px black;" >
< / div >
< / div >
< script type = 'text/x-tmpl-mustache' id = 'app-loading-screen' >
< div class = 'content' >
< img src = '/images/loki/loki_icon_128.png' height = '150' >
< div class = 'container' >
< span class = 'dot' > < / span >
< span class = 'dot' > < / span >
< span class = 'dot' > < / span >
< / div >
< div class = 'message' > {{ message }}< / div >
< / div >
< / script >
< script type = 'text/x-tmpl-mustache' id = 'conversation-loading-screen' >
< div class = 'content' >
< img src = '/images/loki/loki_icon_128.png' >
< div class = 'container' >
< span class = 'dot' > < / span >
< span class = 'dot' > < / span >
< span class = 'dot' > < / span >
< / div >
< / div >
< / script >
< script type = 'text/x-tmpl-mustache' id = 'two-column' >
< div class = 'gutter' >
< div class = 'network-status-container' > < / div >
< div class = 'left-pane-placeholder' > < / div >
< / div >
< div class = 'conversation-stack' >
< div class = 'conversation placeholder' >
< div class = 'conversation-header' > < / div >
< div class = 'container' >
< div class = 'content' >
< img src = '/images/loki/loki_icon_128.png' / >
< h3 > {{ welcomeToSignal }}< / h3 >
< p > {{ selectAContact }}< / p >
< / div >
< / div >
< / div >
< / div >
< div class = 'lightbox-container' > < / div >
< / script >
< script type = 'text/x-tmpl-mustache' id = 'scroll-down-button-view' >
< button class = 'text module-scroll-down__button {{ buttonClass }}' alt = '{{ moreBelow }}' >
< div class = 'module-scroll-down__icon' > < / div >
< / button >
< / script >
< script type = 'text/x-tmpl-mustache' id = 'last-seen-indicator-view' >
< div class = 'module-last-seen-indicator__bar' / >
< div class = 'module-last-seen-indicator__text' >
{{ unreadMessages }}
< / div >
< / script >
< script type = 'text/x-tmpl-mustache' id = 'expired_alert' >
< a target = '_blank' href = 'https://signal.org/download/' >
< button class = 'upgrade' > {{ upgrade }}< / button >
< / a >
{{ expiredWarning }}
< / script >
< script type = 'text/x-tmpl-mustache' id = 'banner' >
< div class = 'body' >
< span class = 'icon warning' > < / span >
{{ message }}
< span class = 'icon dismiss' > < / span >
< / div >
< / script >
< script type = 'text/x-tmpl-mustache' id = 'toast' >
{{ toastMessage }}
< / script >
< script type = 'text/x-tmpl-mustache' id = 'conversation' >
< div class = 'conversation-header' > < / div >
< div class = 'main panel' >
< div class = 'discussion-container' >
< div class = 'bar-container hide' >
< div class = 'bar active progress-bar-striped progress-bar' > < / div >
< / div >
< / div >
< div class = 'bottom-bar' id = 'footer' >
< div class = 'emoji-panel-container' > < / div >
< div class = 'attachment-list' > < / div >
< div class = 'compose' >
< form class = 'send clearfix file-input' >
< div class = 'flex' >
< button class = 'emoji' > < / button >
< textarea class = 'send-message' placeholder = '{{ send-message }}' rows = '1' dir = 'auto' > < / textarea >
< div class = 'capture-audio' >
< button class = 'microphone' > < / button >
< / div >
< div class = 'choose-file' >
< button class = 'paperclip thumbnail' > < / button >
< input type = 'file' class = 'file-input' multiple = 'multiple' >
< / div >
< / div >
< / form >
< / div >
< / div >
< / div >
< / script >
< script type = 'text/x-tmpl-mustache' id = 'message-list' >
< div class = 'messages' > < / div >
< div class = 'typing-container' > < / div >
< / script >
< script type = 'text/x-tmpl-mustache' id = 'recorder' >
< button class = 'finish' > < span class = 'icon' > < / span > < / button >
< span class = 'time' > 0:00< / span >
< button class = 'close' > < span class = 'icon' > < / span > < / button >
< / script >
< script type = 'text/x-tmpl-mustache' id = 'nickname-dialog' >
< div class = 'content' >
< div class = 'message' > {{ message }}< / div >
< input type = 'text' name = 'name' class = 'name' placeholder = 'Type a name' value = '{{ name }}' >
< div class = 'buttons' >
< button class = 'clear' tabindex = '3' > {{ clear }}< / button >
< button class = 'cancel' tabindex = '2' > {{ cancel }}< / button >
< button class = 'ok' tabindex = '1' > {{ ok }}< / button >
< / div >
< / div >
< / script >
< script type = 'text/x-tmpl-mustache' id = 'confirmation-dialog' >
< div class = "content" >
< div class = 'message' > {{ message }}< / div >
< div class = 'buttons' >
{{ #showCancel }}
< button class = 'cancel' tabindex = '2' > {{ cancel }}< / button >
{{ /showCancel }}
< button class = 'ok' tabindex = '1' > {{ ok }}< / button >
< / div >
< / div >
< / script >
< script type = 'text/x-tmpl-mustache' id = 'identicon-svg' >
< svg xmlns = 'http://www.w3.org/2000/svg' width = '100' height = '100' >
< circle cx = '50' cy = '50' r = '40' fill = '{{ color }}' / >
< text text-anchor = 'middle' fill = 'white' font-family = 'sans-serif' font-size = '24px' x = '50' y = '50' baseline-shift = '-8px' >
{{ content }}
< / text >
< / svg >
< / script >
< script type = 'text/x-tmpl-mustache' id = 'phone-number' >
< div class = 'phone-input-form' >
< div class = 'number-container' >
< input type = 'tel' class = 'number' placeholder = "Phone Number" / >
< / div >
< / div >
< / script >
< script type = 'text/x-tmpl-mustache' id = 'file-size-modal' >
{{ file-size-warning }}
({{ limit }}{{ units }})
< / script >
< script type = 'text/x-tmpl-mustache' id = 'attachment-type-modal' >
Sorry, your attachment has a type, {{type}}, that is not currently supported.
< / script >
< script type = 'text/x-tmpl-mustache' id = 'group-member-list' >
< div class = 'container' >
{{ #summary }} < div class = 'summary' > {{ summary }}< / div > {{ /summary }}
< / div >
< / script >
< script type = 'text/x-tmpl-mustache' id = 'key-verification' >
< div class = 'container' >
{{ ^hasTheirKey }}
< div class = 'placeholder' > {{ theirKeyUnknown }}< / div >
{{ /hasTheirKey }}
{{ #hasTheirKey }}
< label > {{ yourSafetyNumberWith }} < / label >
<!-- <div class='qr'></div> -->
< div class = 'key' >
{{ #chunks }} < span > {{ . }}< / span > {{ /chunks }}
< / div >
{{ /hasTheirKey }}
{{ verifyHelp }}
< p > {{> link_to_support }} < / p >
< div class = 'summary' >
{{ #isVerified }}
< span class = 'icon verified' > < / span >
{{ /isVerified }}
{{ ^isVerified }}
< span class = 'icon shield' > < / span >
{{ /isVerified }}
{{ verifiedStatus }}
< / div >
< div class = 'verify' >
< button class = 'verify grey' >
{{ verifyButton }}
< / button >
< / div >
< / div >
< / script >
< script type = 'text/x-tmpl-mustache' id = 'clear-data' >
{{#isStep1}}
< div class = 'step' >
< div class = 'inner' >
< div class = 'step-body' >
< span class = 'banner-icon alert-outline-red' > < / span >
< div class = 'header' > {{ header }}< / div >
< div class = 'body-text-wide' > {{ body }}< / div >
< / div >
< div class = 'nav' >
< div >
< a class = 'button neutral cancel' > {{ cancelButton }}< / a >
< a class = 'button destructive delete-all-data' > {{ deleteButton }}< / a >
< / div >
< / div >
< / div >
< / div >
{{/isStep1}}
{{#isStep2}}
< div id = 'step3' class = 'step' >
< div class = 'inner' >
< div class = 'step-body' >
< span class = 'banner-icon delete' > < / span >
< div class = 'header' > {{ deleting }}< / div >
< / div >
< div class = 'progress' >
< div class = 'bar-container' >
< div class = 'bar progress-bar progress-bar-striped active' > < / div >
< / div >
< / div >
< / div >
< / div >
{{/isStep2}}
< / script >
< script type = 'text/x-tmpl-mustache' id = 'networkStatus' >
< div class = 'network-status-message' >
< h3 > {{ message }}< / h3 >
< span > {{ instructions }}< / span >
< / div >
{{ #reconnectDurationAsSeconds }}
< div class = "network-status-message" >
{{ attemptingReconnectionMessage }}
< / div >
{{/reconnectDurationAsSeconds }}
{{ #action }}
< div class = "action" >
< button class = 'small blue {{ buttonClass }}' > {{ action }}< / button >
< / div >
{{/action }}
< / script >
< script type = 'text/x-tmpl-mustache' id = 'main-header-placeholder' >
< div class = 'main-header-title-wrapper' >
< div class = 'main-header-content-toggle' / >
< / div >
< div class = 'main-header-content-wrapper' >
{{ #items }}
< div role = 'button' id = '{{ id }}' > {{ text }}< / div >
{{ /items }}
< / div >
< / script >
< script type = 'text/x-tmpl-mustache' id = 'import-flow-template' >
{{#isStep2}}
< div id = 'step2' class = 'step' >
< div class = 'inner' >
< div class = 'step-body' >
< span class = 'banner-icon folder-outline' > < / span >
< div class = 'header' > {{ chooseHeader }}< / div >
< div class = 'body-text' > {{ choose }}< / div >
< / div >
< div class = 'nav' >
< div >
< a class = 'button choose' > {{ chooseButton }}< / a >
< / div >
< / div >
< / div >
< / div >
{{/isStep2}}
{{#isStep3}}
< div id = 'step3' class = 'step' >
< div class = 'inner' >
< div class = 'step-body' >
< span class = 'banner-icon import' > < / span >
< div class = 'header' > {{ importingHeader }}< / div >
< / div >
< div class = 'progress' >
< div class = 'bar-container' >
< div class = 'bar progress-bar progress-bar-striped active' > < / div >
< / div >
< / div >
< / div >
< / div >
{{/isStep3}}
{{#isStep4}}
< div id = 'step4' class = 'step' >
< div class = 'inner' >
< div class = 'step-body' >
< span class = 'banner-icon check-circle-outline' > < / span >
< div class = 'header' > {{ completeHeader }}< / div >
< / div >
< div class = 'nav' >
{{#restartButton}}
< div >
< a class = 'button restart' > {{ restartButton }}< / a >
< / div >
{{/restartButton}}
{{#registerButton}}
< div >
< a class = 'button register' > {{ registerButton }}< / a >
< / div >
{{/registerButton}}
< / div >
< / div >
< / div >
{{/isStep4}}
{{#isError}}
< div id = 'error' class = 'step' >
< div class = 'inner error-dialog clearfix' >
< div class = 'step-body' >
< span class = 'banner-icon alert-outline' > < / span >
< div class = 'header' > {{ errorHeader }}< / div >
< div class = 'body-text-wide' >
{{ errorMessageFirst }}
< p > {{ errorMessageSecond }}< / p >
< / div >
< / div >
< div class = 'nav' >
< div >
< a class = 'button choose' > {{ chooseButton }}< / a >
< / div >
< / div >
< / div >
< / div >
{{/isError}}
< / script >
< script type = 'text/x-tmpl-mustache' id = 'link-flow-template' >
{{#isStep3}}
< div id = 'step3' class = 'step' >
< div class = 'inner' >
< div class = 'step-body' >
< div class = 'header' > {{ linkYourPhone }}< / div >
< div id = "qr" >
< div class = 'container' >
< span class = 'dot' > < / span >
< span class = 'dot' > < / span >
< span class = 'dot' > < / span >
< / div >
< / div >
< / div >
< div class = 'nav' >
< div class = 'instructions' >
< div class = 'android' >
< div class = 'label' >
< span class = 'os-icon android' > < / span >
< / div >
< div class = 'body' >
< div > → {{ signalSettings }}< / div >
< div > → {{ linkedDevices }}< / div >
< div > → {{ androidFinalStep }}< / div >
< / div >
< / div >
< div class = 'apple' >
< div class = 'label' >
< span class = 'os-icon apple' > < / span >
< / div >
< div class = 'body' >
< div > → {{ signalSettings }}< / div >
< div > → {{ linkedDevices }}< / div >
< div > → {{ appleFinalStep }}< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
{{/isStep3}}
{{#isStep4}}
< form id = 'link-phone' >
< div id = 'step4' class = 'step' >
< div class = 'inner' >
< div class = 'step-body' >
< span class = 'banner-icon lead-pencil' > < / span >
< div class = 'header' > {{ chooseName }}< / div >
< div >
< input type = 'text' class = 'device-name' spellcheck = 'false' maxlength = '50' / >
< / div >
< / div >
< div class = 'nav' >
< div >
< a class = 'button finish' > {{ finishLinkingPhoneButton }}< / a >
< / div >
< / div >
< / div >
< / div >
< / form >
{{/isStep4}}
{{#isStep5}}
< div id = 'step5' class = 'step' >
< div class = 'inner' >
< div class = 'step-body' >
< span class = 'banner-icon sync' > < / span >
< div class = 'header' > {{ syncing }}< / div >
< / div >
< div class = 'progress' >
< div class = 'bar-container' >
< div class = 'bar progress-bar progress-bar-striped active' > < / div >
< / div >
< / div >
< / div >
< / div >
{{/isStep5}}
{{#isError}}
< div id = 'error' class = 'step' >
< div class = 'inner' >
< div class = 'step-body' >
< span class = 'banner-icon alert-outline' > < / span >
< div class = 'header' > {{ errorHeader }}< / div >
< div class = 'body' > {{ errorMessage }}< / div >
< / div >
< div class = 'nav' >
< a class = 'button try-again' > {{ errorButton }}< / a >
< / div >
< / div >
< / div >
{{/isError}}
< / script >
< script type = 'text/x-tmpl-mustache' id = 'standalone' >
< div class = 'step' >
< div class = 'inner' >
< div class = 'step-body' >
< img class = 'banner-image' src = 'images/icon_128.png' / >
< div class = 'header' > Create your Signal Account< / div >
< div id = 'phone-number-input' >
< div class = 'phone-input-form' >
< div id = 'number-container' class = 'number-container' >
< input type = 'tel' class = 'number' placeholder = 'Phone Number' / >
< / div >
< / div >
< / div >
< div class = 'clearfix' >
< a class = 'button' id = 'request-sms' > Send SMS< / a >
< a class = 'link' id = 'request-voice' tabindex = -1 > Call< / a >
< / div >
< input class = 'form-control' type = 'text' pattern = '\s*[0-9]{3}-?[0-9]{3}\s*' title = 'Enter your 6-digit verification code. If you did not receive a code, click Call or Send SMS to request a new one' id = 'code' placeholder = 'Verification Code' autocomplete = 'off' >
< div id = 'error' class = 'collapse' > < / div >
< div id = status > < / div >
< / div >
< div class = 'nav' >
< a class = 'button' id = 'verifyCode' data-loading-text = 'Please wait...' > Register< / a >
< / div >
< / div >
< / div >
< / script >
< script type = "text/javascript" src = "../libtextsecure/test/fake_web_api.js" > < / script >
< script type = "text/javascript" src = "../js/components.js" > < / script >
< script type = "text/javascript" src = "../js/reliable_trigger.js" data-cover > < / script >
< script type = "text/javascript" src = "test.js" > < / script >
< script type = 'text/javascript' src = '../js/registration.js' data-cover > < / script >
< script type = "text/javascript" src = "../js/expire.js" data-cover > < / script >
< script type = "text/javascript" src = "../js/chromium.js" data-cover > < / script >
< script type = "text/javascript" src = "../js/database.js" data-cover > < / script >
< script type = "text/javascript" src = "../js/storage.js" data-cover > < / script >
< script type = "text/javascript" src = "../js/signal_protocol_store.js" data-cover > < / script >
< script type = "text/javascript" src = "../js/libtextsecure.js" data-cover > < / script >
< script type = "text/javascript" src = "../js/libloki.js" data-cover > < / script >
< script type = "text/javascript" src = "../js/libphonenumber-util.js" > < / script >
< script type = 'text/javascript' src = '../js/models/profile.js' data-cover > < / script >
< script type = "text/javascript" src = "../js/models/messages.js" data-cover > < / script >
< script type = "text/javascript" src = "../js/models/conversations.js" data-cover > < / script >
< script type = "text/javascript" src = "../js/models/blockedNumbers.js" data-cover > < / script >
< script type = "text/javascript" src = "../js/conversation_controller.js" data-cover > < / script >
< script type = 'text/javascript' src = '../js/blocked_number_controller.js' > < / script >
< script type = "text/javascript" src = "../js/message_controller.js" data-cover > < / script >
< script type = "text/javascript" src = "../js/keychange_listener.js" data-cover > < / script >
< script type = 'text/javascript' src = '../js/expiring_messages.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/notifications.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/focus_listener.js' > < / script >
< script type = "text/javascript" src = "../js/chromium.js" data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/react_wrapper_view.js' > < / script >
< script type = 'text/javascript' src = '../js/views/whisper_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/debug_log_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/toast_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/file_input_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/list_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/contact_list_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/main_header_view.js' > < / script >
< script type = 'text/javascript' src = '../js/views/timestamp_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/message_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/key_verification_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/message_list_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/group_member_list_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/recorder_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/conversation_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/hint_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/main_header_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/inbox_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/network_status_view.js' > < / script >
< script type = 'text/javascript' src = '../js/views/confirmation_dialog_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/nickname_dialog_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/password_dialog_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/seed_dialog_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/identicon_svg_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/last_seen_indicator_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/scroll_down_button_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/banner_view.js' data-cover > < / script >
< script type = 'text/javascript' src = '../js/views/clear_data_view.js' > < / script >
<!-- <script type="text/javascript" src="metadata/SecretSessionCipher_test.js"></script> -->
< script type = "text/javascript" src = "views/whisper_view_test.js" > < / script >
< script type = "text/javascript" src = "views/timestamp_view_test.js" > < / script >
< script type = "text/javascript" src = "views/list_view_test.js" > < / script >
< script type = "text/javascript" src = "views/inbox_view_test.js" > < / script >
< script type = "text/javascript" src = "views/network_status_view_test.js" > < / script >
< script type = "text/javascript" src = "views/last_seen_indicator_view_test.js" > < / script >
< script type = 'text/javascript' src = 'views/scroll_down_button_view_test.js' > < / script >
< script type = "text/javascript" src = "models/conversations_test.js" > < / script >
< script type = "text/javascript" src = "models/messages_test.js" > < / script >
< script type = "text/javascript" src = "models/profile_test.js" > < / script >
< script type = "text/javascript" src = "libphonenumber_util_test.js" > < / script >
< script type = "text/javascript" src = "blocked_number_controller_test.js" > < / script >
< script type = "text/javascript" src = "conversation_controller_test.js" > < / script >
< script type = "text/javascript" src = "storage_test.js" > < / script >
< script type = "text/javascript" src = "keychange_listener_test.js" > < / script >
< script type = "text/javascript" src = "reliable_trigger_test.js" > < / script >
< script type = "text/javascript" src = "backup_test.js" > < / script >
< script type = "text/javascript" src = "crypto_test.js" > < / script >
< script type = "text/javascript" src = "database_test.js" > < / script >
< script type = "text/javascript" src = "i18n_test.js" > < / script >
< script type = "text/javascript" src = "spellcheck_test.js" > < / script >
< script type = "text/javascript" src = "fixtures.js" > < / script >
< script type = "text/javascript" src = "fixtures_test.js" > < / script >
<!-- Comment out to turn off code coverage. Useful for getting real callstacks. -->
<!-- NOTE: blanket doesn't support modern syntax and will choke until we find a replacement. :0( -->
<!-- <script type="text/javascript" src="blanket_mocha.js"></script> -->
<!-- Uncomment to start tests without code coverage enabled -->
< script type = "text/javascript" >
mocha.run();
< / script >
< / body >
< / html >