Cryptocalc - Jest Test Report

Started: 2026-09-28 23:41:45
Suites (20)
20 passed
0 failed
0 pending
Tests (841)
841 passed
0 failed
0 pending
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\crypto\bip39_utils.test.js
1.368s
BIP39 Utilities > EntropyToMnemonics
generates 12-word mnemonic from 128-bit (32 hex chars) entropy
passed
0.005s
BIP39 Utilities > EntropyToMnemonics
generates 24-word mnemonic from 256-bit (64 hex chars) entropy
passed
0.001s
BIP39 Utilities > EntropyToMnemonics
generates 15-word mnemonic from 160-bit (40 hex chars) entropy
passed
0.001s
BIP39 Utilities > EntropyToMnemonics
generates 18-word mnemonic from 192-bit (48 hex chars) entropy
passed
BIP39 Utilities > EntropyToMnemonics
generates 21-word mnemonic from 224-bit (56 hex chars) entropy
passed
0.001s
BIP39 Utilities > EntropyToMnemonics
is deterministic - same entropy always produces same mnemonics
passed
0.001s
BIP39 Utilities > EntropyToMnemonics
generates different mnemonics for different entropy inputs
passed
BIP39 Utilities > EntropyToMnemonics
defaults to English when lang is undefined
passed
0.001s
BIP39 Utilities > EntropyToMnemonics
generates French mnemonics when lang is FR
passed
0.001s
BIP39 Utilities > EntropyToMnemonics
throws an error when entropy is undefined
passed
0.003s
BIP39 Utilities > EntropyToMnemonics
throws an error when entropy is empty string
passed
BIP39 Utilities > EntropyToMnemonics
all generated words are valid English BIP39 words
passed
0.002s
BIP39 Utilities > EntropyToChecksum
returns a binary string for 128-bit entropy (12 words => 4 checksum bits)
passed
0.001s
BIP39 Utilities > EntropyToChecksum
returns 5 checksum bits for 160-bit entropy (15 words)
passed
BIP39 Utilities > EntropyToChecksum
returns 6 checksum bits for 192-bit entropy (18 words)
passed
0.001s
BIP39 Utilities > EntropyToChecksum
returns 7 checksum bits for 224-bit entropy (21 words)
passed
BIP39 Utilities > EntropyToChecksum
returns 8 checksum bits for 256-bit entropy (24 words)
passed
BIP39 Utilities > EntropyToChecksum
is deterministic - same entropy always returns same checksum
passed
0.001s
BIP39 Utilities > EntropyToChecksum
returns different checksum for different entropy
passed
BIP39 Utilities > GetChecksumBitCount
returns 4 checksum bits for 12 words
passed
0.001s
BIP39 Utilities > GetChecksumBitCount
returns 5 checksum bits for 15 words
passed
BIP39 Utilities > GetChecksumBitCount
returns 6 checksum bits for 18 words
passed
BIP39 Utilities > GetChecksumBitCount
returns 7 checksum bits for 21 words
passed
BIP39 Utilities > GetChecksumBitCount
returns 8 checksum bits for 24 words
passed
0.001s
BIP39 Utilities > GetChecksumBitCount
defaults to 4 bits when word_count is undefined
passed
BIP39 Utilities > GetChecksumBitCount
defaults to 4 bits for unknown word_count
passed
BIP39 Utilities > MnemonicsToEntropyInfo
returns an object with ENTROPY_HEX and CHECKSUM keys
passed
0.002s
BIP39 Utilities > MnemonicsToEntropyInfo
returns a valid hex string for ENTROPY_HEX
passed
BIP39 Utilities > MnemonicsToEntropyInfo
ENTROPY_HEX is 32 hex chars (128 bits) for 12-word mnemonics
passed
BIP39 Utilities > MnemonicsToEntropyInfo
CHECKSUM is a binary string
passed
0.001s
BIP39 Utilities > MnemonicsToEntropyInfo
round-trip: entropy -> mnemonics -> entropy returns same entropy hex
passed
0.003s
BIP39 Utilities > MnemonicsToEntropyInfo
produces different entropy for different mnemonics
passed
0.001s
BIP39 Utilities > MnemonicsToEntropyInfo
uses default mnemonics when none provided
passed
BIP39 Utilities > EntropySourceToEntropy
returns a hex string from a non-hex entropy source string
passed
0.001s
BIP39 Utilities > EntropySourceToEntropy
returns 32 hex chars for 12-word count (128 bits)
passed
BIP39 Utilities > EntropySourceToEntropy
returns 40 hex chars for 15-word count (160 bits)
passed
BIP39 Utilities > EntropySourceToEntropy
returns 48 hex chars for 18-word count (192 bits)
passed
0.001s
BIP39 Utilities > EntropySourceToEntropy
returns 56 hex chars for 21-word count (224 bits)
passed
BIP39 Utilities > EntropySourceToEntropy
is deterministic - same source always returns same entropy
passed
BIP39 Utilities > EntropySourceToEntropy
passes through hex input unchanged when it has the correct bit count
passed
BIP39 Utilities > EntropySourceToMnemonics
generates mnemonics from a string entropy source
passed
0.001s
BIP39 Utilities > EntropySourceToMnemonics
is deterministic - same source always produces same mnemonics
passed
BIP39 Utilities > EntropySourceToMnemonics
generates 12-word mnemonics by default
passed
BIP39 Utilities > EntropySourceToMnemonics
respects word_count option for 24 words
passed
BIP39 Utilities > EntropySourceToMnemonics
generates different mnemonics for different sources
passed
0.001s
BIP39 Utilities > GetWordIndexes
returns an array of word indexes for a 12-word mnemonic
passed
0.001s
BIP39 Utilities > GetWordIndexes
each index is a string representation of a number
passed
0.003s
BIP39 Utilities > GetWordIndexes
indexes are in the valid BIP39 range [0..2047]
passed
0.002s
BIP39 Utilities > GetWordIndexes
returns binary strings when word_index_base is Binary
passed
0.003s
BIP39 Utilities > GetWordIndexes
produces correct index for known mnemonic word "abandon" (index 0)
passed
0.001s
BIP39 Utilities > GetWordIndexes
is deterministic - same mnemonics always produce same indexes
passed
0.004s
BIP39 Utilities > WordIndexesToMnemonics
reconstructs mnemonics from word indexes
passed
0.002s
BIP39 Utilities > WordIndexesToMnemonics
round-trip: GetWordIndexes -> WordIndexesToMnemonics returns original mnemonics
passed
0.002s
BIP39 Utilities > WordIndexesToMnemonics
returns an empty array for invalid word count
passed
BIP39 Utilities > WordIndexesToMnemonics
returns an empty array when word_indexes is undefined
passed
0.001s
BIP39 Utilities > WordIndexesToMnemonics
generates English mnemonics by default
passed
0.001s
BIP39 Utilities > GuessMnemonicsLang
correctly identifies English mnemonics
passed
BIP39 Utilities > GuessMnemonicsLang
correctly identifies French mnemonics
passed
0.001s
BIP39 Utilities > GuessMnemonicsLang
correctly identifies Spanish mnemonics
passed
BIP39 Utilities > GuessMnemonicsLang
correctly identifies Portuguese mnemonics
passed
0.001s
BIP39 Utilities > GuessMnemonicsLang
is consistent - same mnemonics always return the same language
passed
BIP39 Utilities > CheckMnemonics
returns true for a valid 12-word English mnemonic
passed
BIP39 Utilities > CheckMnemonics
returns false when word count does not match expected word count
passed
BIP39 Utilities > CheckMnemonics
returns false when mnemonics contain words not in the dictionary
passed
BIP39 Utilities > CheckMnemonics
returns true for valid alternative 12-word mnemonics
passed
BIP39 Utilities > CheckMnemonics
uses default args (EN, 12 words) when args is undefined
passed
BIP39 Utilities > MnemonicsAs4letter
returns a single concatenated string
passed
BIP39 Utilities > MnemonicsAs4letter
length is 4 * word_count for 12-word mnemonic
passed
BIP39 Utilities > MnemonicsAs4letter
each 4-letter block starts with an uppercase letter
passed
0.001s
BIP39 Utilities > MnemonicsAs4letter
is deterministic
passed
BIP39 Utilities > MnemonicsAs4letter
generates different output for different mnemonics
passed
BIP39 Utilities > MnemonicsAsTwoParts
returns an array of 2 elements
passed
BIP39 Utilities > MnemonicsAsTwoParts
for 12 words: first part contains all mnemonics, second part is empty string
passed
0.001s
BIP39 Utilities > MnemonicsAsTwoParts
for 24 words: splits into two equal halves of 12 words each
passed
BIP39 Utilities > MnemonicsAsTwoParts
for 18 words: splits into two halves of 9 words each
passed
BIP39 Utilities > MnemonicsAsTwoParts
returns "Null-MNEMONICS" string when mnemonics is undefined
passed
0.001s
BIP39 Utilities > MnemonicsAsTwoParts
joining both parts recovers the original mnemonics for 24 words
passed
0.002s
BIP39 Utilities > GetBIP39Dictionary
returns an array for English language
passed
BIP39 Utilities > GetBIP39Dictionary
English dictionary has exactly 2048 words
passed
BIP39 Utilities > GetBIP39Dictionary
French dictionary has exactly 2048 words
passed
BIP39 Utilities > GetBIP39Dictionary
Spanish dictionary has exactly 2048 words
passed
BIP39 Utilities > GetBIP39Dictionary
defaults to English when lang is undefined
passed
BIP39 Utilities > GetBIP39Dictionary
defaults to English for unknown language code
passed
BIP39 Utilities > GetBIP39Dictionary
dictionary for EN is not empty
passed
BIP39 Utilities > GetBIP39Dictionary
dictionary for FR is not empty
passed
BIP39 Utilities > GetBIP39Dictionary
dictionary for ES is not empty
passed
BIP39 Utilities > GetBIP39Dictionary
dictionary for IT is not empty
passed
BIP39 Utilities > GetBIP39Dictionary
dictionary for CS is not empty
passed
BIP39 Utilities > GetBIP39Dictionary
dictionary for PT is not empty
passed
BIP39 Utilities > GetBIP39Dictionary
dictionary for JP is not empty
passed
BIP39 Utilities > GetBIP39Dictionary
dictionary for KO is not empty
passed
BIP39 Utilities > GetBIP39Dictionary
dictionary for SC is not empty
passed
BIP39 Utilities > GetBIP39Dictionary
dictionary for TC is not empty
passed
BIP39 Utilities > GetBIP39Dictionary
dictionary for DE is not empty
passed
BIP39 Utilities > GetBIP39Dictionary
dictionary for EO is not empty
passed
BIP39 Utilities > GetBIP39Dictionary
dictionary for RU is not empty
passed
BIP39 Utilities > GetBIP39Dictionary
dictionary for EL is not empty
passed
BIP39 Utilities > GetBIP39Dictionary
dictionary for LA is not empty
passed
0.001s
BIP39 Utilities > GetArgs
returns an object with all default keys when called with undefined
passed
BIP39 Utilities > GetArgs
preserves explicitly provided values
passed
BIP39 Utilities > GetArgs
fills in missing keys with defaults while keeping provided ones
passed
BIP39 Utilities > GetArgs
generates a UUID when none is provided
passed
0.001s
BIP39 Utilities > GetArgs
returns an object even when called with empty object
passed
BIP39 Utilities > PrivateKeyToMnemonics
returns a string for a valid 32-byte private key
passed
BIP39 Utilities > PrivateKeyToMnemonics
generates 24 words from a 32-byte private key
passed
BIP39 Utilities > PrivateKeyToMnemonics
is deterministic - same private key always produces same mnemonics
passed
0.001s
BIP39 Utilities > PrivateKeyToMnemonics
returns an error string for a private key with wrong byte count
passed
BIP39 Utilities > PrivateKeyToMnemonics
returns an error string for non-hex input
passed
BIP39 Utilities > PrivateKeyToMnemonics
generates different mnemonics for different private keys
passed
BIP39 Utilities > Consistency and Round-trips
full round-trip: entropy -> mnemonics -> entropy info -> same entropy
passed
0.001s
BIP39 Utilities > Consistency and Round-trips
full round-trip: entropy -> mnemonics -> word indexes -> mnemonics
passed
0.001s
BIP39 Utilities > Consistency and Round-trips
EntropyToMnemonics and EntropySourceToMnemonics are consistent for hex entropy of correct size
passed
BIP39 Utilities > Consistency and Round-trips
CheckMnemonics validates mnemonics generated from entropy
passed
BIP39 Utilities > Consistency and Round-trips
GuessMnemonicsLang correctly identifies language of generated mnemonics
passed
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\crypto\bip39_extras.test.js
0.774s
BIP39 Utilities - Fonctions complémentaires > PrivateKeyToMnemonics
retourne une chaîne pour une clé privée valide de 64 chars
passed
0.001s
BIP39 Utilities - Fonctions complémentaires > PrivateKeyToMnemonics
retourne 24 mots pour une clé de 32 bytes
passed
BIP39 Utilities - Fonctions complémentaires > PrivateKeyToMnemonics
est déterministe — même clé → même résultat
passed
BIP39 Utilities - Fonctions complémentaires > PrivateKeyToMnemonics
accepte une clé avec préfixe 0x
passed
0.001s
BIP39 Utilities - Fonctions complémentaires > PrivateKeyToMnemonics
produit des mnemonics différents pour des clés différentes
passed
BIP39 Utilities - Fonctions complémentaires > PrivateKeyToMnemonics
retourne une erreur si la clé nest pas en hexadécimal
passed
BIP39 Utilities - Fonctions complémentaires > PrivateKeyToMnemonics
retourne une erreur si la clé ne fait pas 32 bytes (trop courte)
passed
BIP39 Utilities - Fonctions complémentaires > PrivateKeyToMnemonics
retourne une erreur si la clé est trop longue (>32 bytes)
passed
BIP39 Utilities - Fonctions complémentaires > MnemonicsAs4letter
retourne une chaîne non vide
passed
BIP39 Utilities - Fonctions complémentaires > MnemonicsAs4letter
retourne exactement 4 * nb_mots caractères pour des mots de 4+ lettres
passed
BIP39 Utilities - Fonctions complémentaires > MnemonicsAs4letter
chaque préfixe commence par une majuscule
passed
0.001s
BIP39 Utilities - Fonctions complémentaires > MnemonicsAs4letter
est déterministe
passed
BIP39 Utilities - Fonctions complémentaires > MnemonicsAs4letter
produit des résultats différents pour des mnemonics différents
passed
BIP39 Utilities - Fonctions complémentaires > MnemonicsAs4letter
fonctionne avec 24 mots → min(longueur_mot, 4) chars par mot
passed
BIP39 Utilities - Fonctions complémentaires > MnemonicsAs4letter
vecteur de référence : "abandon" → préfixe "Aban"
passed
BIP39 Utilities - Fonctions complémentaires > MnemonicsAsTwoParts
retourne un tableau pour 12 mots
passed
BIP39 Utilities - Fonctions complémentaires > MnemonicsAsTwoParts
retourne [phrase, ""] pour 12 mots (pas besoin de couper)
passed
0.001s
BIP39 Utilities - Fonctions complémentaires > MnemonicsAsTwoParts
retourne 2 parties pour 24 mots
passed
BIP39 Utilities - Fonctions complémentaires > MnemonicsAsTwoParts
chaque partie des 24 mots est non vide
passed
BIP39 Utilities - Fonctions complémentaires > MnemonicsAsTwoParts
les 2 parties de 24 mots totalisent 24 mots
passed
BIP39 Utilities - Fonctions complémentaires > MnemonicsAsTwoParts
les deux parties peuvent être rejointes pour reconstituer les mnemonics
passed
BIP39 Utilities - Fonctions complémentaires > MnemonicsAsTwoParts
retourne "Null-MNEMONICS" pour undefined
passed
BIP39 Utilities - Fonctions complémentaires > MnemonicsAsTwoParts
fonctionne avec 15 mots (moitié = 7 + 8)
passed
0.001s
BIP39 Utilities - Fonctions complémentaires > LabelWithSize
retourne "data(size)" pour data="entropy" et size=256
passed
BIP39 Utilities - Fonctions complémentaires > LabelWithSize
retourne "checksum(4)" pour data="checksum" et size=4
passed
BIP39 Utilities - Fonctions complémentaires > LabelWithSize
fonctionne avec size=0
passed
BIP39 Utilities - Fonctions complémentaires > LabelWithSize
est déterministe
passed
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\crypto\password_strength_evaluator.test.js
0.157s
PasswordStrengthEvaluator > Singleton Pattern
This retourne une instance définie
passed
PasswordStrengthEvaluator > Singleton Pattern
This retourne toujours la même instance
passed
PasswordStrengthEvaluator > Singleton Pattern
appel direct du constructeur lève une TypeError
passed
0.002s
PasswordStrengthEvaluator > Singleton Pattern
ALPHABET_ENTROPIES est défini comme propriété statique
passed
PasswordStrengthEvaluator > is_binary_string
retourne true pour "010101"
passed
PasswordStrengthEvaluator > is_binary_string
retourne true pour "0"
passed
PasswordStrengthEvaluator > is_binary_string
retourne true pour "1"
passed
PasswordStrengthEvaluator > is_binary_string
retourne true pour une longue chaîne binaire
passed
0.001s
PasswordStrengthEvaluator > is_binary_string
retourne false pour "012" (contient 2)
passed
PasswordStrengthEvaluator > is_binary_string
retourne false pour une chaîne vide
passed
PasswordStrengthEvaluator > is_binary_string
retourne false pour undefined
passed
PasswordStrengthEvaluator > is_binary_string
retourne false pour null
passed
PasswordStrengthEvaluator > is_hexa_string
retourne true pour "deadbeef"
passed
PasswordStrengthEvaluator > is_hexa_string
retourne true pour "DEADBEEF" (uppercase converti)
passed
PasswordStrengthEvaluator > is_hexa_string
retourne true pour une clé privée de 64 chars
passed
0.001s
PasswordStrengthEvaluator > is_hexa_string
retourne true pour "0xdeadbeef" (préfixe 0x accepté)
passed
PasswordStrengthEvaluator > is_hexa_string
retourne false pour "xyz"
passed
PasswordStrengthEvaluator > is_hexa_string
retourne false pour une chaîne vide
passed
PasswordStrengthEvaluator > is_hexa_string
retourne false pour undefined
passed
PasswordStrengthEvaluator > is_base58_string
retourne true pour une adresse Bitcoin valide
passed
PasswordStrengthEvaluator > is_base58_string
retourne false pour une chaîne contenant "0" (zéro)
passed
PasswordStrengthEvaluator > is_base58_string
retourne false pour une chaîne vide
passed
0.001s
PasswordStrengthEvaluator > is_base58_string
retourne false pour undefined
passed
PasswordStrengthEvaluator > is_base64_string
retourne true pour une chaîne base64 valide
passed
PasswordStrengthEvaluator > is_base64_string
retourne true pour une chaîne base64 sans padding
passed
PasswordStrengthEvaluator > is_base64_string
retourne false pour une chaîne contenant des caractères invalides
passed
PasswordStrengthEvaluator > is_base64_string
retourne false pour une chaîne vide
passed
PasswordStrengthEvaluator > is_octal_string
retourne true pour "01234567"
passed
PasswordStrengthEvaluator > is_octal_string
retourne false pour "8" (hors plage octal)
passed
0.001s
PasswordStrengthEvaluator > is_octal_string
retourne false pour une chaîne vide
passed
PasswordStrengthEvaluator > is_upper_case
retourne true pour "A"
passed
PasswordStrengthEvaluator > is_upper_case
retourne false pour "a"
passed
PasswordStrengthEvaluator > is_upper_case
retourne false pour "1"
passed
PasswordStrengthEvaluator > is_lower_case
retourne true pour "a"
passed
PasswordStrengthEvaluator > is_lower_case
retourne false pour "A"
passed
PasswordStrengthEvaluator > is_lower_case
retourne false pour "1"
passed
PasswordStrengthEvaluator > is_digit
retourne true pour "5"
passed
PasswordStrengthEvaluator > is_digit
retourne true pour "0"
passed
PasswordStrengthEvaluator > is_digit
retourne false pour "a"
passed
PasswordStrengthEvaluator > is_special_character
retourne true pour "#"
passed
PasswordStrengthEvaluator > is_special_character
retourne true pour "*"
passed
PasswordStrengthEvaluator > is_special_character
retourne true pour "!"
passed
PasswordStrengthEvaluator > is_special_character
retourne false pour "a"
passed
PasswordStrengthEvaluator > is_special_character
retourne false pour "5"
passed
PasswordStrengthEvaluator > getEntropyForAlphabetAsBits
alphabet de 2 → 1.00 bit
passed
PasswordStrengthEvaluator > getEntropyForAlphabetAsBits
alphabet de 16 → 4.00 bits (hex)
passed
PasswordStrengthEvaluator > getEntropyForAlphabetAsBits
alphabet de 58 → ~5.86 bits (base58)
passed
PasswordStrengthEvaluator > getEntropyForAlphabetAsBits
alphabet de 64 → 6.00 bits (base64)
passed
0.001s
PasswordStrengthEvaluator > getEntropyForAlphabetAsBits
retourne 0 pour alphabet_size ≤ 1
passed
PasswordStrengthEvaluator > getEntropyForAlphabetAsBits
augmente avec la taille de l'alphabet
passed
PasswordStrengthEvaluator > getPasswordStrengthAsBits
chaîne binaire "010101" → 6 * 1.00 = 6 bits
passed
0.001s
PasswordStrengthEvaluator > getPasswordStrengthAsBits
chaîne hex "deadbeef" (8 chars) → 8 * 4.00 = 32 bits
passed
PasswordStrengthEvaluator > getPasswordStrengthAsBits
retourne un nombre positif pour un mot de passe classique
passed
0.001s
PasswordStrengthEvaluator > getPasswordStrengthAsBits
retourne un nombre plus élevé pour un mot de passe plus long
passed
PasswordStrengthEvaluator > getPasswordStrengthAsBits
une clé privée hex 64 chars → 256 bits
passed
PasswordStrengthEvaluator > getPasswordStrengthBitsAsAdjective
"password" (faible) → "Very Weak"
passed
0.001s
PasswordStrengthEvaluator > getPasswordStrengthBitsAsAdjective
chaîne hex courte (8 chars, 32 bits) → "Very Weak"
passed
PasswordStrengthEvaluator > getPasswordStrengthBitsAsAdjective
clé privée hex 64 chars → "Very Secure" (256 bits ≥ 128)
passed
PasswordStrengthEvaluator > getPasswordStrengthBitsAsAdjective
retourne une valeur parmi les valeurs attendues
passed
0.001s
PasswordStrengthEvaluator > getPasswordStrengthScore
retourne un entier entre 0 et 4
passed
0.005s
PasswordStrengthEvaluator > getPasswordStrengthScore
"password" retourne 0 (très faible)
passed
0.002s
PasswordStrengthEvaluator > getPasswordStrengthScore
"123456" retourne 0 (très faible)
passed
0.001s
PasswordStrengthEvaluator > getPasswordStrengthScore
un mot de passe aléatoire long retourne un score élevé (≥ 3)
passed
0.003s
PasswordStrengthEvaluator > getPasswordScoreAsAdjective
"password" → "Very Weak" (score 0)
passed
PasswordStrengthEvaluator > getPasswordScoreAsAdjective
retourne une valeur parmi les adjectifs définis
passed
PasswordStrengthEvaluator > getPasswordStrengthInfo
retourne un objet avec les clés PWD_STR_AS_SCORE et PWD_STR_AS_ADJECTIVE
passed
0.003s
PasswordStrengthEvaluator > getPasswordStrengthInfo
le score est un entier entre 0 et 4
passed
0.002s
PasswordStrengthEvaluator > getPasswordStrengthInfo
l'adjectif est une chaîne non vide
passed
0.001s
PasswordStrengthEvaluator > DS_calculateAdjustedEntropy
retourne un nombre positif pour un mot de passe non vide
passed
PasswordStrengthEvaluator > DS_calculateAdjustedEntropy
retourne 0 pour une chaîne vide
passed
PasswordStrengthEvaluator > DS_calculateAdjustedEntropy
augmente avec la longueur du mot de passe (caractères similaires)
passed
0.001s
PasswordStrengthEvaluator > DS_entropyToScore
< 28 → score 0 (Very Weak)
passed
PasswordStrengthEvaluator > DS_entropyToScore
28..34 → score 1 (Weak)
passed
PasswordStrengthEvaluator > DS_entropyToScore
35..44 → score 2 (Fair)
passed
PasswordStrengthEvaluator > DS_entropyToScore
45..54 → score 3 (Strong)
passed
PasswordStrengthEvaluator > DS_entropyToScore
≥ 55 → score 4 (Very Strong)
passed
0.001s
PasswordStrengthEvaluator > DS_comprehensivePasswordStrength
retourne un objet avec zxcvbnScore, entropy, feedback et finalAssessment
passed
0.001s
PasswordStrengthEvaluator > DS_comprehensivePasswordStrength
zxcvbnScore est entre 0 et 4
passed
0.001s
PasswordStrengthEvaluator > DS_comprehensivePasswordStrength
finalAssessment est entre 0 et 4
passed
0.001s
PasswordStrengthEvaluator > DS_comprehensivePasswordStrength
finalAssessment ≥ zxcvbnScore (max des deux métriques)
passed
0.001s
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\crypto\bip38_utils.test.js
0.082s
BIP38 Utilities > Singleton Pattern
Bip38Utils.This returns a defined instance
passed
0.001s
BIP38 Utilities > Singleton Pattern
Bip38Utils.This always returns the same instance
passed
BIP38 Utilities > Singleton Pattern
direct constructor call throws a TypeError
passed
0.003s
BIP38 Utilities > Singleton Pattern
instance exposes encrypt method
passed
BIP38 Utilities > Singleton Pattern
instance exposes decrypt method
passed
0.001s
BIP38 Utilities > Singleton Pattern
instance exposes getMainWindow method
passed
BIP38 Utilities > encrypt()
returns a non-empty string for valid private key and passphrase
passed
0.002s
BIP38 Utilities > encrypt()
returns a string starting with "6P" (BIP38 Non-EC prefix)
passed
0.001s
BIP38 Utilities > encrypt()
forwards the private key buffer to the bip38 library
passed
0.001s
BIP38 Utilities > encrypt()
forwards the passphrase to the bip38 library
passed
BIP38 Utilities > encrypt()
accepts a private key with 0x prefix
passed
0.001s
BIP38 Utilities > encrypt()
produces consistent result for different valid private keys
passed
0.001s
BIP38 Utilities > encrypt()
returns empty string when private_key is undefined
passed
BIP38 Utilities > encrypt()
returns empty string when private_key is empty string
passed
BIP38 Utilities > encrypt()
returns empty string when passphrase is undefined
passed
BIP38 Utilities > encrypt()
returns empty string when passphrase is empty string
passed
BIP38 Utilities > encrypt()
returns empty string when both private_key and passphrase are undefined
passed
BIP38 Utilities > encrypt()
does not call bip38.encrypt when private_key is empty
passed
BIP38 Utilities > encrypt()
does not call bip38.encrypt when passphrase is empty
passed
BIP38 Utilities > encrypt()
returns ERROR_RETURN_VALUE when bip38.encrypt throws
passed
0.005s
BIP38 Utilities > encrypt()
calls dialog.showMessageBoxSync on encrypt error
passed
0.001s
BIP38 Utilities > encrypt()
passes a progress callback function as 4th argument to bip38.encrypt
passed
0.001s
BIP38 Utilities > encrypt()
passes scryptParams as 5th argument to bip38.encrypt
passed
BIP38 Utilities > decrypt()
returns a non-empty string for valid encrypted key and passphrase
passed
0.001s
BIP38 Utilities > decrypt()
returns a valid 64-character hex private key
passed
0.001s
BIP38 Utilities > decrypt()
returns the correct private key for the spec test vector
passed
0.001s
BIP38 Utilities > decrypt()
forwards the encrypted key to the bip38 library
passed
0.001s
BIP38 Utilities > decrypt()
forwards the passphrase to the bip38 library
passed
0.001s
BIP38 Utilities > decrypt()
returns empty string when encrypted_pk is undefined
passed
0.001s
BIP38 Utilities > decrypt()
returns empty string when encrypted_pk is empty string
passed
BIP38 Utilities > decrypt()
returns empty string when passphrase is undefined
passed
0.001s
BIP38 Utilities > decrypt()
returns empty string when passphrase is empty string
passed
0.001s
BIP38 Utilities > decrypt()
returns empty string when both encrypted_pk and passphrase are undefined
passed
0.001s
BIP38 Utilities > decrypt()
does not call bip38.decrypt when encrypted_pk is empty
passed
BIP38 Utilities > decrypt()
does not call bip38.decrypt when passphrase is empty
passed
0.001s
BIP38 Utilities > decrypt()
returns ERROR_RETURN_VALUE when bip38.decrypt throws
passed
0.002s
BIP38 Utilities > decrypt()
calls dialog.showMessageBoxSync on decrypt error
passed
0.002s
BIP38 Utilities > decrypt()
passes a progress callback function as 3rd argument to bip38.decrypt
passed
0.001s
BIP38 Utilities > decrypt()
passes scryptParams as 4th argument to bip38.decrypt
passed
0.001s
BIP38 Utilities > getMainWindow()
returns undefined before any encrypt/decrypt call
passed
0.001s
BIP38 Utilities > getMainWindow()
returns the window passed to encrypt()
passed
BIP38 Utilities > getMainWindow()
returns the window passed to decrypt()
passed
0.001s
BIP38 Utilities > getMainWindow()
updates stored window when decrypt is called after encrypt with a different window
passed
0.001s
BIP38 Utilities > scryptParams Configuration
scryptParams has an N property
passed
BIP38 Utilities > scryptParams Configuration
scryptParams has an r property equal to 8
passed
BIP38 Utilities > scryptParams Configuration
scryptParams has a p property equal to 8
passed
BIP38 Utilities > scryptParams Configuration
encryptDifficulty is a positive integer
passed
0.001s
BIP38 Utilities > scryptParams Configuration
N in scryptParams matches encryptDifficulty
passed
BIP38 Utilities > scryptParams Configuration
scryptParams is passed to bip38.encrypt on every call
passed
0.001s
BIP38 Utilities > Encrypt / Decrypt Round-trip (mocked bip38 boundary)
decrypt returns the original private key after encrypt (via mock)
passed
0.001s
BIP38 Utilities > Encrypt / Decrypt Round-trip (mocked bip38 boundary)
encrypted key starts with "6P" and is non-empty, decrypted key is 64 hex chars
passed
BIP38 Utilities > Encrypt / Decrypt Round-trip (mocked bip38 boundary)
wrong passphrase causes decrypt to return ERROR_RETURN_VALUE
passed
0.001s
BIP38 Utilities > Encrypt / Decrypt Round-trip (mocked bip38 boundary)
encrypt error does not corrupt a subsequent successful decrypt
passed
0.001s
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\model\main_model.test.js
0.06s
MainModel — Singleton
MainModel.This retourne toujours la même instance
passed
0.001s
MainModel — Singleton
le constructeur privé rejette un appel direct
passed
0.002s
MainModel — Singleton
l'instance a la propriété app_version initialisée
passed
MainModel — saveWalletInfoAsJson() : Simple Wallet
appelle fs.writeFileSync une fois
passed
0.002s
MainModel — saveWalletInfoAsJson() : Simple Wallet
le JSON écrit contient WALLET_MODE
passed
0.001s
MainModel — saveWalletInfoAsJson() : Simple Wallet
le JSON écrit contient BLOCKCHAIN
passed
0.001s
MainModel — saveWalletInfoAsJson() : Simple Wallet
le JSON écrit contient ADDRESS
passed
0.001s
MainModel — saveWalletInfoAsJson() : Simple Wallet
le JSON écrit contient ENTROPY
passed
0.002s
MainModel — saveWalletInfoAsJson() : Simple Wallet
le JSON écrit contient WIF
passed
0.001s
MainModel — saveWalletInfoAsJson() : Simple Wallet
le JSON écrit contient PRIVATE_KEY
passed
0.001s
MainModel — saveWalletInfoAsJson() : Simple Wallet
le JSON écrit contient MNEMONICS
passed
0.001s
MainModel — saveWalletInfoAsJson() : Simple Wallet
le JSON écrit contient LANG
passed
0.001s
MainModel — saveWalletInfoAsJson() : Simple Wallet
le JSON écrit contient le timestamp
passed
0.001s
MainModel — saveWalletInfoAsJson() : Simple Wallet
ENTROPY_SIZE est converti en entier
passed
0.001s
MainModel — saveWalletInfoAsJson() : Simple Wallet
ENTROPY_SIZE string est aussi converti en entier
passed
0.002s
MainModel — saveWalletInfoAsJson() : Simple Wallet
Simple Wallet : BIP32_PASSPHRASE absent du JSON
passed
0.001s
MainModel — saveWalletInfoAsJson() : HD Wallet
WALLET_MODE est HD Wallet
passed
0.001s
MainModel — saveWalletInfoAsJson() : HD Wallet
BIP32_PASSPHRASE est présent pour un HD Wallet
passed
0.001s
MainModel — saveWalletInfoAsJson() : HD Wallet
DERIVATION_PATH est conservé
passed
0.001s
MainModel — saveWalletInfoAsJson() : HD Wallet
ACCOUNT est extrait du DERIVATION_PATH (index 3 sans apostrophe)
passed
0.001s
MainModel — saveWalletInfoAsJson() : HD Wallet
ADDRESS_INDEX est extrait du DERIVATION_PATH (index 5 avec apostrophe)
passed
0.001s
MainModel — saveWalletInfoAsJson() : Dogecoin
BLOCKCHAIN est Dogecoin
passed
0.001s
MainModel — saveWalletInfoAsJson() : Dogecoin
COIN est l'abréviation correcte pour Dogecoin
passed
0.001s
MainModel — saveWalletInfoAsJson() : Dogecoin
ADDRESS contient une adresse Dogecoin valide
passed
0.001s
MainModel — saveWalletInfoAsJson() : champs optionnels
BIP38_ENCRYPTED_PK absent si non défini dans crypto_info
passed
0.001s
MainModel — saveWalletInfoAsJson() : champs optionnels
BIP38_PASSPHRASE absent si non défini
passed
0.001s
MainModel — saveWalletInfoAsJson() : champs optionnels
WORD_INDEXES est inclus
passed
0.001s
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\model\wallet_info_bip85.test.js
0.079s
Bip85 label constants
mnemonics labels
passed
0.001s
Bip85 label constants
values
passed
WalletInfoTemplate - Bip85
template contains Initial Entropy and Bip85 Index
passed
0.001s
WalletInfoTemplate - Bip85
template does NOT contain Bip85 Entropy Size (same value as Entropy Size)
passed
WalletInfoTemplate - Bip85
Bip85 keys are just before Entropy / Entropy Size, in order
passed
0.001s
WalletInfoTemplate - Bip85
clear() resets values: setItemValue() does not mutate the template
passed
MainModel.buildWalletInfoTxt() - Bip85 enabled
labels: 'Initial Entropy', 'Bip 85 Index', 'Bip 85 Entropy'
passed
0.003s
MainModel.buildWalletInfoTxt() - Bip85 enabled
no 'Entropy' label and no raw Bip85 keys
passed
0.001s
MainModel.buildWalletInfoTxt() - Bip85 enabled
no Bip85 Entropy Size line, even if provided (duplicate of Entropy Size)
passed
0.002s
MainModel.buildWalletInfoTxt() - Bip85 enabled
Bip 85 Index 0 is written (not removed as an empty value)
passed
0.001s
MainModel.buildWalletInfoTxt() - Bip85 enabled
order: Coin, Initial Entropy, Bip 85 Index, Bip 85 Entropy, Entropy Size
passed
0.002s
MainModel.buildWalletInfoTxt() - Bip85 enabled
HD Wallet: other Bip85 parameters, HD lines unchanged
passed
0.001s
MainModel.buildWalletInfoTxt() - Bip85 enabled
'Bip85 Derived Seedphrase' replaces 'Secret phrase'
passed
0.002s
MainModel.buildWalletInfoTxt() - Bip85 enabled
'Shortened Seedphrase' label
passed
0.001s
MainModel.buildWalletInfoTxt() - Bip85 enabled
label column widened: all values aligned, at least 2 spaces after the longest label
passed
0.003s
MainModel.buildWalletInfoTxt() - Bip85 disabled
'Seedphrase' replaces 'Secret phrase', 'Shortened Seedphrase' replaces 'Shortened Secret phrase'
passed
0.001s
MainModel.buildWalletInfoTxt() - Bip85 disabled
label column width stays at 24
passed
0.001s
MainModel.buildWalletInfoTxt() - Bip85 disabled
'Entropy' label unchanged, no Bip85 line
passed
0.002s
MainModel.buildWalletInfoTxt() - Bip85 disabled
empty Initial Entropy is handled as Bip85 disabled
passed
0.001s
MainModel.buildWalletInfoTxt() - Bip85 disabled
no leak: a Bip85 save followed by a non Bip85 save
passed
0.002s
MainModel.saveWalletInfoAsJson() - Bip85
Bip85 enabled: 'Bip85 Index' and 'Initial Entropy' are added
passed
0.002s
MainModel.saveWalletInfoAsJson() - Bip85
Bip85 enabled: 'Entropy' and 'Entropy Size' are unchanged
passed
0.001s
MainModel.saveWalletInfoAsJson() - Bip85
Bip85 enabled: same JSON as without Bip85, plus the 2 Bip85 keys
passed
0.006s
MainModel.saveWalletInfoAsJson() - Bip85
Bip85 enabled: no txt label, no raw Bip85 key, no Bip85 Entropy Size
passed
0.002s
MainModel.saveWalletInfoAsJson() - Bip85
'.wits' mnemonics key unchanged ('Secret phrase'), no txt label
passed
0.001s
MainModel.saveWalletInfoAsJson() - Bip85
'Bip85 Index' given as a string is written as an integer
passed
0.001s
MainModel.saveWalletInfoAsJson() - Bip85
HD Wallet + Bip85: HD fields still present
passed
0.001s
MainModel.saveWalletInfoAsJson() - Bip85
Bip85 disabled: no Bip85 field
passed
0.001s
MainModel.saveWalletInfoAsJson() - Bip85
empty Initial Entropy: no Bip85 field
passed
0.001s
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\utils\hex_utils.test.js
0.058s
hex_utils > hexWithoutPrefix
strips 0x prefix
passed
0.001s
hex_utils > hexWithoutPrefix
is idempotent when no prefix
passed
hex_utils > hexWithoutPrefix
strips 0x from a 64-char private key
passed
0.001s
hex_utils > hexWithPrefix
adds 0x prefix
passed
hex_utils > hexWithPrefix
is idempotent when prefix already present
passed
hex_utils > hexWithoutPrefix / hexWithPrefix round-trip
add then remove prefix returns original
passed
hex_utils > hexWithoutPrefix / hexWithPrefix round-trip
remove then add prefix returns prefixed string
passed
hex_utils > isHexString
accepts lowercase hex
passed
hex_utils > isHexString
accepts uppercase hex
passed
0.001s
hex_utils > isHexString
accepts mixed case hex
passed
hex_utils > isHexString
accepts 0x-prefixed hex
passed
hex_utils > isHexString
rejects strings with non-hex characters
passed
hex_utils > isHexString
rejects strings with spaces
passed
hex_utils > isHexString
rejects a standard English word
passed
hex_utils > hexToBinary
converts 0 → 0000
passed
hex_utils > hexToBinary
converts f → 1111
passed
0.001s
hex_utils > hexToBinary
converts ff → 11111111
passed
hex_utils > hexToBinary
converts 00 → 00000000
passed
hex_utils > hexToBinary
output length is 4x input length
passed
hex_utils > binaryToHex
converts 0000 → 0
passed
hex_utils > binaryToHex
converts 1111 → f
passed
hex_utils > binaryToHex
converts 11111111 → ff
passed
hex_utils > hexToBinary / binaryToHex round-trip
hex → binary → hex returns original
passed
0.001s
hex_utils > hexToBinary / binaryToHex round-trip
round-trip pour tous les nibbles 0-f
passed
hex_utils > hexToBinary / binaryToHex round-trip
round-trip pour une entropie 256 bits
passed
hex_utils > hexToUint8Array
converts ff → Uint8Array([255])
passed
hex_utils > hexToUint8Array
converts 00 → Uint8Array([0])
passed
hex_utils > hexToUint8Array
converts 0001 → [0, 1]
passed
0.001s
hex_utils > hexToUint8Array
output length equals input_length / 2
passed
hex_utils > hexToUint8Array
throws on odd-length hex string
passed
hex_utils > hexToUint8Array
strips 0x prefix before conversion
passed
hex_utils > uint8ArrayToHex
converts [255] → ff
passed
hex_utils > uint8ArrayToHex
pads single-digit values with leading zero
passed
hex_utils > uint8ArrayToHex
converts [0, 1] → 0001
passed
hex_utils > hexToUint8Array / uint8ArrayToHex round-trip
hex → Uint8Array → hex returns original
passed
hex_utils > hexToUint8Array / uint8ArrayToHex round-trip
round-trip pour une entropie 128 bits
passed
hex_utils > hexToBytes
converts ff → [255]
passed
hex_utils > hexToBytes
converts 0001 → [0, 1]
passed
hex_utils > hexToBytes
output is a regular Array (not Uint8Array)
passed
hex_utils > hexToBytes
throws on odd-length hex
passed
hex_utils > hexToB64
returns a non-empty string
passed
hex_utils > hexToB64
output does not look like hex
passed
hex_utils > hexToB64 / b64ToHex round-trip
hex → b64 → hex returns original
passed
hex_utils > hexToB64 / b64ToHex round-trip
round-trip pour une clé privée de 64 chars
passed
hex_utils > hexToB64 / b64ToHex round-trip
round-trip pour une entropie 256 bits
passed
hex_utils > getRandomInt
retourne un entier dans [0, max]
passed
0.012s
hex_utils > getRandomInt
retourne 0 pour max=0
passed
hex_utils > getRandomByte
retourne une valeur dans [0, 255]
passed
0.005s
hex_utils > getRandomHexValue
retourne une chaîne de longueur byte_count * 2
passed
0.001s
hex_utils > getRandomHexValue
retourne une chaîne hex valide (minuscules)
passed
0.001s
hex_utils > getRandomHexValue
produit des valeurs différentes à chaque appel (statistique)
passed
hex_utils > getRandomHexValue
fonctionne avec 1 byte
passed
0.001s
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\crypto\entropy_size.test.js
0.034s
EntropySize > GetBitCount
returns 0 bits for a 128-char hex string
passed
0.001s
EntropySize > GetBitCount
returns 0 bits for a 160-char hex string
passed
EntropySize > GetBitCount
returns 0 bits for a 192-char hex string
passed
EntropySize > GetBitCount
returns 0 bits for a 224-char hex string
passed
0.001s
EntropySize > GetBitCount
returns 0 bits for a 256-char hex string
passed
EntropySize > GetBitCount
returns NULL_HEX for a non-hex string
passed
EntropySize > GetBitCount
returns 0 for an empty string (isHexString("") is true, 0 chars * 4 = 0)
passed
EntropySize > GetBitCount
accepts uppercase hex
passed
0.001s
EntropySize > GetBitCount
is proportional to hex string length (4 bits per char)
passed
EntropySize > GetWordCount
returns 0 words for 12-char hex entropy
passed
EntropySize > GetWordCount
returns 0 words for 15-char hex entropy
passed
EntropySize > GetWordCount
returns 0 words for 18-char hex entropy
passed
EntropySize > GetWordCount
returns 0 words for 21-char hex entropy
passed
0.001s
EntropySize > GetWordCount
returns 0 words for 24-char hex entropy
passed
EntropySize > GetWordCount
returns NULL_WORD_COUNT for invalid hex
passed
EntropySize > GetWordCount
returns default word count (24) for empty string (0 bits → default case)
passed
EntropySize > GetExpectedWordCount
maps 128 bits → 12 words
passed
EntropySize > GetExpectedWordCount
maps 160 bits → 15 words
passed
EntropySize > GetExpectedWordCount
maps 192 bits → 18 words
passed
EntropySize > GetExpectedWordCount
maps 224 bits → 21 words
passed
EntropySize > GetExpectedWordCount
maps 256 bits → 24 words
passed
EntropySize > GetExpectedWordCount
returns 24 for unknown entropy size (default case)
passed
EntropySize > GetExpectedWordCount
returns 24 for entropy size 0
passed
EntropySize > GetExpectedByteCount
maps 128 bits → 16 bytes
passed
EntropySize > GetExpectedByteCount
maps 160 bits → 20 bytes
passed
EntropySize > GetExpectedByteCount
maps 192 bits → 24 bytes
passed
EntropySize > GetExpectedByteCount
maps 224 bits → 28 bytes
passed
EntropySize > GetExpectedByteCount
maps 256 bits → 32 bytes
passed
EntropySize > GetExpectedByteCount
returns 32 for unknown entropy size (default case)
passed
0.001s
EntropySize > GetExpectedByteCount
byte count * 8 equals bit count
passed
EntropySize > GetChecksumBitCount
returns 12 checksum bits for 4 words
passed
EntropySize > GetChecksumBitCount
returns 15 checksum bits for 5 words
passed
EntropySize > GetChecksumBitCount
returns 18 checksum bits for 6 words
passed
EntropySize > GetChecksumBitCount
returns 21 checksum bits for 7 words
passed
EntropySize > GetChecksumBitCount
returns 24 checksum bits for 8 words
passed
EntropySize > GetChecksumBitCount
defaults to 4 bits when word_count is undefined
passed
0.001s
EntropySize > GetChecksumBitCount
returns 8 for unknown word count (default case)
passed
EntropySize > GetChecksumBitCount
checksum increases with word count
passed
EntropySize > GetSHA256Substring
returns substring of length 12 for word_count=32
passed
EntropySize > GetSHA256Substring
returns substring of length 15 for word_count=40
passed
EntropySize > GetSHA256Substring
returns substring of length 18 for word_count=48
passed
EntropySize > GetSHA256Substring
returns substring of length 21 for word_count=56
passed
EntropySize > GetSHA256Substring
returns substring of length 24 for word_count=64
passed
EntropySize > GetSHA256Substring
returns a prefix of the original SHA256 for 12 words
passed
0.001s
EntropySize > GetSHA256Substring
returns the full SHA256 for 24 words
passed
EntropySize > Cohérence inter-méthodes
GetWordCount is consistent with GetExpectedWordCount
passed
EntropySize > Cohérence inter-méthodes
GetExpectedByteCount * 2 matches hex string length for all sizes
passed
EntropySize > Cohérence inter-méthodes
GetWordCount and GetExpectedWordCount agree for all standard entropy sizes
passed
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\crypto\crypto_services.test.js
0.044s
CryptoServices > Singleton Pattern
CryptoServices.This retourne une instance définie
passed
CryptoServices > Singleton Pattern
CryptoServices.This retourne toujours la même instance
passed
0.001s
CryptoServices > Singleton Pattern
appel direct du constructeur lève une TypeError
passed
0.001s
CryptoServices > Singleton Pattern
l'instance expose getUUID
passed
CryptoServices > Singleton Pattern
l'instance expose pk2WIF
passed
CryptoServices > getUUID
retourne une chaîne
passed
CryptoServices > getUUID
retourne un UUID v4 valide
passed
CryptoServices > getUUID
retourne un UUID non vide
passed
CryptoServices > getUUID
retourne un UUID de longueur 36 (format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
passed
CryptoServices > getUUID
génère un UUID différent à chaque appel (statistique)
passed
CryptoServices > getUUID
génère des UUID au format v4 de manière répétée (10 fois)
passed
CryptoServices > pk2WIF
retourne une chaîne non vide
passed
0.002s
CryptoServices > pk2WIF
retourne un WIF non-compressé commençant par "5"
passed
0.001s
CryptoServices > pk2WIF
retourne un WIF de longueur ~51 (non-compressé)
passed
0.002s
CryptoServices > pk2WIF
accepte une clé avec préfixe 0x
passed
0.001s
CryptoServices > pk2WIF
est déterministe — même clé → même WIF
passed
0.002s
CryptoServices > pk2WIF
produit des WIF différents pour des clés différentes
passed
0.003s
CryptoServices > pk2WIF
vecteur de référence : clé connue → WIF attendu
passed
0.001s
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\crypto\base58_utils.test.js
0.035s
base58_utils > B58_ALPHABET
contient exactement 58 caractères
passed
base58_utils > B58_ALPHABET
ne contient pas 0 (zero)
passed
base58_utils > B58_ALPHABET
ne contient pas O (lettre majuscule)
passed
base58_utils > B58_ALPHABET
ne contient pas I (i majuscule)
passed
base58_utils > B58_ALPHABET
ne contient pas l (l minuscule)
passed
0.001s
base58_utils > B58_ALPHABET
commence par 1
passed
base58_utils > isBase58String
retourne true pour une adresse Bitcoin valide
passed
base58_utils > isBase58String
retourne true pour une chaîne composée uniquement de caractères Base58
passed
base58_utils > isBase58String
retourne false pour une chaîne contenant "0" (zéro)
passed
base58_utils > isBase58String
retourne false pour une chaîne contenant "O" (O majuscule)
passed
base58_utils > isBase58String
retourne false pour une chaîne contenant "I" (i majuscule)
passed
base58_utils > isBase58String
retourne false pour une chaîne contenant "l" (l minuscule)
passed
0.001s
base58_utils > isBase58String
retourne false pour une chaîne vide
passed
base58_utils > isBase58String
retourne false pour undefined
passed
base58_utils > isBase58String
retourne false pour null
passed
base58_utils > isBase58String
retourne false si la chaîne contient un espace
passed
base58_utils > isBase58String
retourne false pour une adresse Ethereum (contient 0x et chiffres hex)
passed
0.001s
base58_utils > hexToB58
retourne une chaîne non vide pour un hex valide
passed
base58_utils > hexToB58
retourne une chaîne Base58 valide (tous les chars dans B58_ALPHABET)
passed
base58_utils > hexToB58
est déterministe
passed
0.001s
base58_utils > hexToB58
produit des résultats différents pour des hex différents
passed
base58_utils > b58ToHex
retourne une chaîne hex valide
passed
base58_utils > b58ToHex
retourne une chaîne hex (lowercase)
passed
base58_utils > hexToB58 / b58ToHex round-trip
hex → b58 → hex retourne le hex original (sans zéros de tête)
passed
base58_utils > hexToB58 / b58ToHex round-trip
round-trip pour un hash 20 bytes (RIPEMD-160)
passed
base58_utils > hexToB58 / b58ToHex round-trip
round-trip pour un hash 32 bytes (SHA-256)
passed
base58_utils > hexToB58 / b58ToHex round-trip
est déterministe à travers le round-trip
passed
0.001s
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\utils\string_utils.test.js
0.037s
string_utils > isString
returns true for a string literal
passed
0.001s
string_utils > isString
returns true for an empty string
passed
string_utils > isString
returns true for new String()
passed
string_utils > isString
returns false for a number
passed
0.001s
string_utils > isString
returns false for null
passed
string_utils > isString
returns false for undefined
passed
string_utils > isString
returns false for an array
passed
string_utils > isString
returns false for an object
passed
string_utils > isString
returns false for a boolean
passed
0.001s
string_utils > stringify
serializes a simple object
passed
string_utils > stringify
serializes nested objects
passed
string_utils > stringify
serializes arrays
passed
string_utils > stringify
handles circular references without throwing
passed
string_utils > stringify
drops the circular reference key silently
passed
0.001s
string_utils > stringify
returns a string
passed
string_utils > insertAfterEveryN
inserts a space every 4 chars
passed
string_utils > insertAfterEveryN
does not add separator after the last incomplete chunk
passed
string_utils > insertAfterEveryN
works with n=1
passed
0.001s
string_utils > insertAfterEveryN
works with n equal to string length
passed
string_utils > insertAfterEveryN
works on a hex entropy (groups of 8)
passed
string_utils > insertAfterEveryN
output contains the correct number of separators
passed
string_utils > stringToHex
converts "A" to 41
passed
0.001s
string_utils > stringToHex
converts "a" to 61
passed
string_utils > stringToHex
converts empty string to empty hex
passed
string_utils > stringToHex
output length is double the input length
passed
string_utils > stringToHex
output is valid lowercase hex
passed
0.001s
string_utils > stringToHex
is deterministic
passed
string_utils > stringToHex
different strings produce different hex
passed
string_utils > getShortenedString
returns full string if shorter than max_length
passed
string_utils > getShortenedString
returns full string if equal to max_length
passed
string_utils > getShortenedString
truncates and adds "..." if longer than max_length
passed
string_utils > getShortenedString
uses default max_length of 90
passed
string_utils > getShortenedString
removes \n characters
passed
string_utils > getShortenedString
removes \r characters
passed
0.001s
string_utils > asTwoParts
returns single-element array for phrase with 12 words (≤ word_count_per_line=15)
passed
string_utils > asTwoParts
splits 24-word phrase into exactly 2 parts
passed
string_utils > asTwoParts
each part is a non-empty string
passed
0.001s
string_utils > asTwoParts
concatenation of both parts (space-joined) equals original
passed
string_utils > asTwoParts
each part contains roughly half the words
passed
string_utils > asTwoParts
returns "Null-SEEDPHRASE" for undefined input
passed
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\utils\number_utils.test.js
0.038s
number_utils > stringToInt
converts "42" to 42
passed
0.001s
number_utils > stringToInt
converts "0" to 0
passed
number_utils > stringToInt
converts negative string "-5" to -5
passed
0.001s
number_utils > stringToInt
truncates decimal part: "3.9" → 3
passed
number_utils > stringToInt
truncates decimal part: "3.1" → 3
passed
number_utils > stringToInt
returns 0 for a non-numeric string
passed
number_utils > stringToInt
parses leading number in mixed string "42abc"
passed
number_utils > stringToInt
returns a number (not a string)
passed
number_utils > stringToFloat
converts "3.14" to 3.14
passed
number_utils > stringToFloat
converts "0" to 0
passed
number_utils > stringToFloat
converts integer string "5" to 5.0
passed
number_utils > stringToFloat
converts negative float "-1.5" to -1.5
passed
0.001s
number_utils > stringToFloat
returns 0 for a non-numeric string
passed
number_utils > stringToFloat
returns a number (not a string)
passed
number_utils > valueIsNumber
returns true for a positive integer
passed
number_utils > valueIsNumber
returns true for 0
passed
0.001s
number_utils > valueIsNumber
returns true for a negative integer
passed
number_utils > valueIsNumber
returns true for a float
passed
number_utils > valueIsNumber
returns false for NaN
passed
number_utils > valueIsNumber
returns false for Infinity
passed
number_utils > valueIsNumber
returns false for -Infinity
passed
number_utils > valueIsNumber
returns false for a numeric string
passed
number_utils > valueIsNumber
returns false for null
passed
number_utils > valueIsNumber
returns false for undefined
passed
number_utils > valueIsNumber
returns false for a boolean
passed
number_utils > stringIsNumber
returns true for "42"
passed
0.001s
number_utils > stringIsNumber
returns true for "0"
passed
number_utils > stringIsNumber
returns true for "3.14"
passed
number_utils > stringIsNumber
returns true for a mixed string containing a digit "abc1"
passed
number_utils > stringIsNumber
returns false for a pure alpha string "abc"
passed
number_utils > stringIsNumber
returns false for an empty string
passed
0.001s
number_utils > stringIsNumber
returns false for an array (uses Array.isArray guard)
passed
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\wallet\address_validation.test.js
0.031s
Wallet Address Validation > Bitcoin Address Validation
validates legacy Bitcoin addresses (starts with 1)
passed
0.001s
Wallet Address Validation > Bitcoin Address Validation
validates P2SH Bitcoin addresses (starts with 3)
passed
0.001s
Wallet Address Validation > Bitcoin Address Validation
validates SegWit addresses (starts with bc1)
passed
Wallet Address Validation > Bitcoin Address Validation
rejects invalid Bitcoin addresses
passed
Wallet Address Validation > Ethereum Address Validation
validates Ethereum addresses
passed
Wallet Address Validation > Ethereum Address Validation
rejects invalid Ethereum addresses
passed
Wallet Address Validation > Ethereum Address Validation
validates checksum addresses
passed
Wallet Address Validation > WIF Private Key Validation
validates uncompressed WIF (starts with 5)
passed
Wallet Address Validation > WIF Private Key Validation
validates compressed WIF (starts with K or L)
passed
Wallet Address Validation > WIF Private Key Validation
rejects invalid WIF
passed
0.001s
Wallet Address Validation > Mnemonic Phrase Validation
validates 12-word mnemonic
passed
Wallet Address Validation > Mnemonic Phrase Validation
validates 24-word mnemonic
passed
Wallet Address Validation > Mnemonic Phrase Validation
rejects invalid mnemonic (wrong word count)
passed
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\smoke.test.js
0.027s
Jest Configuration
Jest is working correctly
passed
Jest Configuration
can access global TEST_MODE variable
passed
Jest Configuration
can access CRYPTO_CONFIG globals
passed
Jest Configuration
can access TEST_PATHS globals
passed
0.001s
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\utils\fixture_loading.test.js
0.027s
Fixture Loading Examples
can load input fixture
passed
0.002s
Fixture Loading Examples
fixture contains expected properties
passed
0.001s
Fixture Loading Examples
fixture entropy matches expected length
passed
0.001s
Fixture Loading Examples
fixture mnemonic is valid
passed
Test Paths and Configuration
TEST_PATHS are correctly configured
passed
0.001s
Test Paths and Configuration
CRYPTO_CONFIG contains supported coins
passed
Test Paths and Configuration
CRYPTO_CONFIG contains BIP44 coin types
passed
0.001s
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\crypto\bip85_utils.test.js
15.24s
Bip85Utils > Singleton
getInstance() always returns the same instance
passed
0.006s
Bip85Utils > Singleton
'This' getter returns the Singleton
passed
Bip85Utils > Singleton
'new Bip85Utils()' returns the Singleton
passed
0.001s
Bip85Utils > BIP85 specification test vectors
test case 1: raw derivation
passed
1.062s
Bip85Utils > BIP85 specification test vectors
test case 2: raw derivation
passed
0.271s
Bip85Utils > BIP85 specification test vectors
BIP39 application: 12 words
passed
0.879s
Bip85Utils > BIP85 specification test vectors
BIP39 application: 18 words
passed
0.91s
Bip85Utils > BIP85 specification test vectors
BIP39 application: 24 words
passed
0.762s
Bip85Utils > BIP85 specification test vectors
WIF application
passed
0.258s
Bip85Utils > BIP85 specification test vectors
XPRV application
passed
0.218s
Bip85Utils > BIP85 specification test vectors
HEX application
passed
0.297s
Bip85Utils > Ian Coleman BIP39 vector (entropy -> BIP85)
initial entropy -> initial mnemonic
passed
Bip85Utils > Ian Coleman BIP39 vector (entropy -> BIP85)
deriveToBip85Infos() gives the expected BIP85 seedphrase and entropy
passed
0.452s
Bip85Utils > deriveToBip85Infos()
returns index, entropy, mnemonics and entropy size
passed
0.426s
Bip85Utils > deriveToBip85Infos()
entropy size 128 bits -> 12 words
passed
0.483s
Bip85Utils > deriveToBip85Infos()
entropy size 160 bits -> 15 words
passed
0.508s
Bip85Utils > deriveToBip85Infos()
entropy size 192 bits -> 18 words
passed
0.478s
Bip85Utils > deriveToBip85Infos()
entropy size 224 bits -> 21 words
passed
0.401s
Bip85Utils > deriveToBip85Infos()
entropy size 256 bits -> 24 words
passed
0.361s
Bip85Utils > deriveToBip85Infos()
is consistent with the BIP39 application path (12, 18, 24 words)
passed
2.61s
Bip85Utils > deriveToBip85Infos()
is deterministic
passed
0.803s
Bip85Utils > deriveToBip85Infos()
different index -> different BIP85 entropy
passed
0.787s
Bip85Utils > deriveToBip85Infos()
different initial entropy -> different BIP85 entropy
passed
1.015s
Bip85Utils > deriveToBip85Infos()
BIP85 entropy is never the initial entropy
passed
0.473s
Bip85Utils > deriveToBip85Infos()
accepts the maximum index (2^31 - 1)
passed
0.469s
Bip85Utils > deriveToBip85Infos()
default parameters: index 0, 256 bits
passed
0.866s
Bip85Utils > deriveToBip85Infos()
throws on invalid entropy size: 0
passed
0.003s
Bip85Utils > deriveToBip85Infos()
throws on invalid entropy size: 96
passed
Bip85Utils > deriveToBip85Infos()
throws on invalid entropy size: 100
passed
Bip85Utils > deriveToBip85Infos()
throws on invalid entropy size: 136
passed
0.001s
Bip85Utils > deriveToBip85Infos()
throws on invalid entropy size: 288
passed
Bip85Utils > deriveToBip85Infos()
throws on invalid entropy size: 512
passed
Bip85Utils > deriveToBip85Infos()
throws on invalid entropy size: "256"
passed
0.001s
Bip85Utils > deriveToBip85Infos()
throws on invalid entropy size: null
passed
Bip85Utils > deriveToBip85Infos()
throws on invalid index: -1
passed
Bip85Utils > deriveToBip85Infos()
throws on invalid index: "0"
passed
Bip85Utils > deriveToBip85Infos()
throws on invalid index: null
passed
Bip85Utils > deriveToBip85Infos()
throws on invalid index: NaN
passed
Bip85Utils > deriveToBip85Infos()
throws on invalid initial entropy
passed
0.001s
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\view\main_gui_bip85.test.js
52.093s
MainGUI - Bip85 mode > Bip85 disabled (default)
Bip85 is disabled at startup
passed
0.013s
MainGUI - Bip85 mode > Bip85 disabled (default)
updateEntropy(): entropy unchanged, Bip85 derivation is only a preview
passed
2.539s
MainGUI - Bip85 mode > Bip85 disabled (default)
updateEntropy() does not change wallet entropy size
passed
0.491s
MainGUI - Bip85 mode > Bip85 disabled (default)
Bip85 parameters are stored in wallet_info
passed
0.471s
MainGUI - Bip85 mode > Activation
[OK]: current Entropy becomes Initial Entropy and is replaced by Bip85 Entropy
passed
1.212s
MainGUI - Bip85 mode > Activation
[OK]: wallet is recomputed from the Bip85 Entropy
passed
1.435s
MainGUI - Bip85 mode > Activation
[OK]: labels are renamed (Bip85 Generate / Bip85 Entropy / Bip85 Seedphrase)
passed
1.083s
MainGUI - Bip85 mode > Activation
[OK]: wallet entropy size is aligned on Bip85 entropy size
passed
0.95s
MainGUI - Bip85 mode > Activation
[Cancel]: nothing changes and checkbox is unchecked
passed
0.493s
MainGUI - Bip85 mode > Activation
warning dialog is shown only when enabling
passed
1.253s
MainGUI - Bip85 mode > Activation
setBip85Enabled(true) twice does not derive twice
passed
0.934s
MainGUI - Bip85 mode > Bip85 enabled: entropy updates
refresh with current Bip85 Entropy (Account, Address Index, Bip39 passphrase) does not re-derive
passed
0.975s
MainGUI - Bip85 mode > Bip85 enabled: entropy updates
updateBip39Passphrase() keeps Initial and Bip85 Entropy
passed
1.045s
MainGUI - Bip85 mode > Bip85 enabled: entropy updates
[Bip85 Generate]: new entropy becomes the new Initial Entropy and is derived
passed
2.152s
MainGUI - Bip85 mode > Bip85 enabled: entropy updates
derivation failure: entropy is kept as is
passed
0.878s
MainGUI - Bip85 mode > Bip85 parameters (Edit dialog / Entropy Size selectors)
Bip85 enabled: Initial Entropy unchanged, Bip85 Entropy recomputed, wallet recomputed
passed
1.677s
MainGUI - Bip85 mode > Bip85 parameters (Edit dialog / Entropy Size selectors)
Bip85 enabled: wallet entropy size follows the new Bip85 entropy size
passed
1.36s
MainGUI - Bip85 mode > Bip85 parameters (Edit dialog / Entropy Size selectors)
'data.entropy' from the dialog is ignored (Initial Entropy is used)
passed
1.68s
MainGUI - Bip85 mode > Bip85 parameters (Edit dialog / Entropy Size selectors)
Bip85 disabled: preview only, entropy and wallet unchanged
passed
1.266s
MainGUI - Bip85 mode > Bip85 parameters (Edit dialog / Entropy Size selectors)
Bip85 enabled: wallet [Entropy Size] = 128 changes Bip85 entropy size
passed
1.625s
MainGUI - Bip85 mode > Bip85 parameters (Edit dialog / Entropy Size selectors)
Bip85 enabled: wallet [Entropy Size] = 160 changes Bip85 entropy size
passed
1.627s
MainGUI - Bip85 mode > Bip85 parameters (Edit dialog / Entropy Size selectors)
Bip85 enabled: wallet [Entropy Size] = 192 changes Bip85 entropy size
passed
1.733s
MainGUI - Bip85 mode > Bip85 parameters (Edit dialog / Entropy Size selectors)
Bip85 enabled: wallet [Entropy Size] = 224 changes Bip85 entropy size
passed
1.668s
MainGUI - Bip85 mode > Bip85 parameters (Edit dialog / Entropy Size selectors)
Bip85 enabled: wallet [Word Count] changes Bip85 entropy size (keeps Bip85 index)
passed
2.135s
MainGUI - Bip85 mode > Bip85 parameters (Edit dialog / Entropy Size selectors)
Bip85 disabled: wallet [Entropy Size] uses the standard path (updateEntropySize)
passed
0.49s
MainGUI - Bip85 mode > Show / Hide Bip85 parameters
Bip85 enabled: Show/Hide does not overwrite Initial Entropy
passed
0.84s
MainGUI - Bip85 mode > Show / Hide Bip85 parameters
Bip85 disabled: Show copies current Entropy to Initial Entropy
passed
0.497s
MainGUI - Bip85 mode > Deactivation
Initial Entropy is restored as the current Entropy
passed
1.426s
MainGUI - Bip85 mode > Deactivation
labels are restored
passed
1.412s
MainGUI - Bip85 mode > Deactivation
wallet entropy size is aligned on the restored Initial Entropy
passed
1.375s
MainGUI - Bip85 mode > Deactivation
after [Bip85 Generate], the last Initial Entropy is restored
passed
1.701s
MainGUI - Bip85 mode > Deactivation
re-activation derives again from the current Entropy
passed
2.243s
MainGUI - Bip85 mode > Premium
Premium disabled while Bip85 enabled: Bip85 is disabled and Initial Entropy restored
passed
1.345s
MainGUI - Bip85 mode > Premium
Premium disabled while Bip85 disabled: entropy unchanged
passed
0.461s
MainGUI - Bip85 mode > Premium
Premium allowed: Bip85 mode is NOT enabled automatically
passed
0.427s
MainGUI - Bip85 mode > getWalletInfo() (data saved in wallet_info.txt / wallet_info.wits)
Bip85 enabled: Initial Entropy and Index are added (not Bip85 Entropy Size)
passed
1.772s
MainGUI - Bip85 mode > getWalletInfo() (data saved in wallet_info.txt / wallet_info.wits)
Bip85 disabled: no Bip85 field (even if Bip85 preview was computed)
passed
0.424s
MainGUI - Bip85 mode > getWalletInfo() (data saved in wallet_info.txt / wallet_info.wits)
Bip85 disabled after being enabled: no Bip85 field
passed
1.304s
MainGUI - Bip85 mode > Open Wallet: restoreBip85State()
'.wits' keys match const_keywords.js
passed
0.003s
MainGUI - Bip85 mode > Open Wallet: restoreBip85State()
Bip85 wallet: [Enable] checked, labels, Bip85 parameters restored
passed
0.468s
MainGUI - Bip85 mode > Open Wallet: restoreBip85State()
Bip85 wallet: no derivation, opened Entropy unchanged
passed
0.414s
MainGUI - Bip85 mode > Open Wallet: restoreBip85State()
Bip85 wallet: Bip85 Index given as a string
passed
0.469s
MainGUI - Bip85 mode > Open Wallet: restoreBip85State()
Bip85 wallet: next refresh (Account, Address Index) does not re-derive
passed
0.461s
MainGUI - Bip85 mode > Open Wallet: restoreBip85State()
Bip85 wallet: disabling Bip85 restores the Initial Entropy
passed
0.889s
MainGUI - Bip85 mode > Open Wallet: restoreBip85State()
Bip85 wallet: [Edit] re-derives from the restored Initial Entropy
passed
1.335s
MainGUI - Bip85 mode > Open Wallet: restoreBip85State()
Bip85 wallet without Premium: opened as a non Bip85 wallet
passed
0.378s
MainGUI - Bip85 mode > Open Wallet: restoreBip85State()
non Bip85 wallet opened while Bip85 enabled: Bip85 disabled, no recomputation
passed
0.799s
MainGUI - Bip85 mode > alignWalletEntropySize()
128 bits
passed
0.002s
MainGUI - Bip85 mode > alignWalletEntropySize()
160 bits
passed
0.002s
MainGUI - Bip85 mode > alignWalletEntropySize()
192 bits
passed
0.002s
MainGUI - Bip85 mode > alignWalletEntropySize()
224 bits
passed
0.001s
MainGUI - Bip85 mode > alignWalletEntropySize()
256 bits
passed
0.003s
MainGUI - Bip85 mode > alignWalletEntropySize()
accepts a string
passed
0.002s
MainGUI - Bip85 mode > alignWalletEntropySize()
ignores invalid size 0
passed
0.001s
MainGUI - Bip85 mode > alignWalletEntropySize()
ignores invalid size 100
passed
0.002s
MainGUI - Bip85 mode > alignWalletEntropySize()
ignores invalid size 136
passed
0.002s
MainGUI - Bip85 mode > alignWalletEntropySize()
ignores invalid size 288
passed
0.002s
MainGUI - Bip85 mode > alignWalletEntropySize()
ignores invalid size NaN
passed
0.002s
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\wallet\simple_wallet.test.js
60.485s
Simple Wallet Generation > Bitcoin Simple Wallet
generates a valid Bitcoin wallet
passed
0.003s
Simple Wallet Generation > Bitcoin Simple Wallet
has valid Bitcoin address
passed
Simple Wallet Generation > Bitcoin Simple Wallet
has valid private key
passed
0.001s
Simple Wallet Generation > Bitcoin Simple Wallet
has valid public key
passed
Simple Wallet Generation > Bitcoin Simple Wallet
has valid mnemonic phrase
passed
Simple Wallet Generation > Bitcoin Simple Wallet
wallet mode is Simple Wallet
passed
0.001s
Simple Wallet Generation > Ethereum Simple Wallet
generates a valid Ethereum wallet
passed
0.001s
Simple Wallet Generation > Ethereum Simple Wallet
has valid Ethereum address
passed
Simple Wallet Generation > Ethereum Simple Wallet
has valid private key
passed
Simple Wallet Generation > Ethereum Simple Wallet
has valid mnemonic phrase
passed
0.001s
Simple Wallet Generation > Litecoin Simple Wallet
generates a valid Litecoin wallet
passed
0.001s
Simple Wallet Generation > Litecoin Simple Wallet
has valid address
passed
Simple Wallet Generation > Litecoin Simple Wallet
has valid private key
passed
Simple Wallet Generation > Litecoin Simple Wallet
has valid mnemonic phrase
passed
Simple Wallet Generation > Dogecoin Simple Wallet
generates a valid Dogecoin wallet
passed
Simple Wallet Generation > Dogecoin Simple Wallet
has valid address
passed
0.001s
Simple Wallet Generation > Dogecoin Simple Wallet
has valid private key
passed
Simple Wallet Generation > Dogecoin Simple Wallet
has valid mnemonic phrase
passed
Simple Wallet Generation > Solana Simple Wallet
generates a valid Solana wallet
passed
Simple Wallet Generation > Solana Simple Wallet
has valid Solana address
passed
0.001s
Simple Wallet Generation > Solana Simple Wallet
has valid private key
passed
Simple Wallet Generation > Solana Simple Wallet
has valid mnemonic phrase
passed
Simple Wallet Generation > Avalanche Simple Wallet
generates a valid Avalanche wallet
passed
Simple Wallet Generation > Avalanche Simple Wallet
has valid Ethereum-compatible address
passed
Simple Wallet Generation > Avalanche Simple Wallet
has valid private key
passed
Simple Wallet Generation > Avalanche Simple Wallet
has correct coin abbreviation
passed
Simple Wallet Generation > Polygon Simple Wallet
generates a valid Polygon wallet
passed
Simple Wallet Generation > Polygon Simple Wallet
has valid Ethereum-compatible address
passed
0.001s
Simple Wallet Generation > Polygon Simple Wallet
has valid private key
passed
Simple Wallet Generation > Polygon Simple Wallet
has correct coin abbreviation
passed
Simple Wallet Generation > Toncoin Simple Wallet
generates a valid Toncoin wallet
passed
Simple Wallet Generation > Toncoin Simple Wallet
has valid address
passed
0.001s
Simple Wallet Generation > Toncoin Simple Wallet
has valid private key
passed
Simple Wallet Generation > Toncoin Simple Wallet
has valid mnemonic phrase
passed
Simple Wallet Generation > Terra (Luna) Simple Wallet
generates a valid Terra wallet
passed
0.001s
Simple Wallet Generation > Terra (Luna) Simple Wallet
has valid address
passed
Simple Wallet Generation > Terra (Luna) Simple Wallet
has valid private key
passed
Simple Wallet Generation > Terra (Luna) Simple Wallet
has valid mnemonic phrase
passed
0.001s
Simple Wallet Generation > Horizen Simple Wallet
generates a valid Horizen wallet
passed
0.001s
Simple Wallet Generation > Horizen Simple Wallet
has valid address
passed
Simple Wallet Generation > Horizen Simple Wallet
has valid private key
passed
Simple Wallet Generation > Horizen Simple Wallet
has valid mnemonic phrase
passed
Simple Wallet Generation > Cross-Blockchain Consistency
same entropy generates different addresses for different blockchains
passed
0.097s
Simple Wallet Generation > Cross-Blockchain Consistency
same entropy generates same mnemonic for all blockchains
passed
0.138s
Simple Wallet Generation > Cross-Blockchain Consistency
all wallets have wallet mode set to Simple Wallet
passed
0.258s
Simple Wallet Generation > Simple Wallet entropy sizes
128-bit entropy produces a 12-word mnemonic
passed
3.307s
Simple Wallet Generation > Simple Wallet entropy sizes
128-bit entropy yields a valid non-null Bitcoin address
passed
3.326s
Simple Wallet Generation > Simple Wallet entropy sizes
128-bit entropy is derived to a 256-bit (64-hex) private key
passed
3.62s
Simple Wallet Generation > Simple Wallet entropy sizes
160-bit entropy => 15-word mnemonic + valid non-null BTC address + 64-hex key
passed
3.21s
Simple Wallet Generation > Simple Wallet entropy sizes
192-bit entropy => 18-word mnemonic + valid non-null BTC address + 64-hex key
passed
2.944s
Simple Wallet Generation > Simple Wallet entropy sizes
224-bit entropy => 21-word mnemonic + valid non-null BTC address + 64-hex key
passed
2.961s
Simple Wallet Generation > Simple Wallet entropy sizes
128-bit entropy yields a valid non-null Ethereum address
passed
2.871s
Simple Wallet Generation > Simple Wallet entropy sizes
128-bit Ethereum wallet has a 12-word mnemonic and a 64-hex private key
passed
2.881s
Simple Wallet Generation > Simple Wallet entropy sizes
128-bit entropy yields a valid non-null Solana address
passed
0.029s
Simple Wallet Generation > Simple Wallet entropy sizes
128-bit Solana wallet has a 12-word mnemonic and a seed-derived key
passed
0.016s
Simple Wallet Generation > Simple Wallet entropy sizes
256-bit entropy still produces a 24-word mnemonic
passed
0.132s
Simple Wallet Generation > Simple Wallet entropy sizes
256-bit entropy is used unchanged as the private key (non-breaking)
passed
0.077s
Simple Wallet Generation > Simple Wallet entropy sizes
128-bit Simple Wallet BTC converges with HD Wallet BTC
passed
6.038s
Simple Wallet Generation > Simple Wallet entropy sizes
128-bit Simple Wallet ETH converges with HD Wallet ETH
passed
5.891s
Simple Wallet Generation > Simple Wallet entropy sizes
160-bit (15 words) Simple Wallet BTC converges with HD Wallet BTC
passed
5.913s
Simple Wallet Generation > Simple Wallet entropy sizes
192-bit (18 words) Simple Wallet BTC converges with HD Wallet BTC
passed
5.392s
Simple Wallet Generation > Simple Wallet entropy sizes
224-bit (21 words) Simple Wallet BTC converges with HD Wallet BTC
passed
5.573s
Simple Wallet Generation > Error Handling
throws error when entropy_hex is undefined
passed
0.002s
Simple Wallet Generation > Error Handling
throws error when entropy_hex is empty string
passed
Simple Wallet Generation > Testnet Support
generates Bitcoin testnet wallet
passed
0.065s
Simple Wallet Generation > Testnet Support
generates Ethereum testnet wallet
passed
0.029s
Simple Wallet Generation > Helper Functions
InitializeWallet creates null wallet
passed
Simple Wallet Generation > Helper Functions
GenerateKeyPairFromMnemonic generates valid key pair
passed
0.095s
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\wallet\hd_wallet.test.js
100.794s
HD Wallet Generation (BIP32/BIP44) > HDWallet Initialization
InitializeWallet creates null wallet with correct structure
passed
0.005s
HD Wallet Generation (BIP32/BIP44) > Error Handling
throws error when entropy_hex is undefined
passed
0.003s
HD Wallet Generation (BIP32/BIP44) > Error Handling
throws error when entropy_hex is empty string
passed
0.001s
HD Wallet Generation (BIP32/BIP44) > Error Handling
throws error when salt_uuid is undefined
passed
0.001s
HD Wallet Generation (BIP32/BIP44) > Error Handling
throws error when salt_uuid is empty string
passed
0.001s
HD Wallet Generation (BIP32/BIP44) > Bitcoin HD Wallet (BIP44)
generates a valid Bitcoin HD wallet
passed
0.001s
HD Wallet Generation (BIP32/BIP44) > Bitcoin HD Wallet (BIP44)
has valid Bitcoin address
passed
HD Wallet Generation (BIP32/BIP44) > Bitcoin HD Wallet (BIP44)
has valid private key
passed
0.001s
HD Wallet Generation (BIP32/BIP44) > Bitcoin HD Wallet (BIP44)
has valid WIF
passed
HD Wallet Generation (BIP32/BIP44) > Bitcoin HD Wallet (BIP44)
has valid mnemonic phrase
passed
HD Wallet Generation (BIP32/BIP44) > Bitcoin HD Wallet (BIP44)
has correct derivation path
passed
0.001s
HD Wallet Generation (BIP32/BIP44) > Bitcoin HD Wallet (BIP44)
has coin type information
passed
HD Wallet Generation (BIP32/BIP44) > Ethereum HD Wallet (BIP44)
generates a valid Ethereum HD wallet
passed
HD Wallet Generation (BIP32/BIP44) > Ethereum HD Wallet (BIP44)
has valid Ethereum address
passed
0.001s
HD Wallet Generation (BIP32/BIP44) > Ethereum HD Wallet (BIP44)
has valid private key
passed
HD Wallet Generation (BIP32/BIP44) > Ethereum HD Wallet (BIP44)
has valid mnemonic phrase
passed
HD Wallet Generation (BIP32/BIP44) > Ethereum HD Wallet (BIP44)
has correct derivation path
passed
HD Wallet Generation (BIP32/BIP44) > Ethereum HD Wallet (BIP44)
has coin type information
passed
HD Wallet Generation (BIP32/BIP44) > Litecoin HD Wallet (BIP44)
generates a valid Litecoin HD wallet
passed
0.001s
HD Wallet Generation (BIP32/BIP44) > Litecoin HD Wallet (BIP44)
has valid Litecoin address
passed
0.001s
HD Wallet Generation (BIP32/BIP44) > Litecoin HD Wallet (BIP44)
has valid private key
passed
HD Wallet Generation (BIP32/BIP44) > Litecoin HD Wallet (BIP44)
has correct derivation path
passed
0.001s
HD Wallet Generation (BIP32/BIP44) > Litecoin HD Wallet (BIP44)
has coin type information
passed
HD Wallet Generation (BIP32/BIP44) > Dogecoin HD Wallet (BIP44)
generates a valid Dogecoin HD wallet
passed
HD Wallet Generation (BIP32/BIP44) > Dogecoin HD Wallet (BIP44)
has valid Dogecoin address
passed
0.001s
HD Wallet Generation (BIP32/BIP44) > Dogecoin HD Wallet (BIP44)
has valid private key
passed
HD Wallet Generation (BIP32/BIP44) > Dogecoin HD Wallet (BIP44)
has correct derivation path
passed
HD Wallet Generation (BIP32/BIP44) > Dogecoin HD Wallet (BIP44)
has coin type information
passed
HD Wallet Generation (BIP32/BIP44) > Avalanche HD Wallet (BIP44 - Ethereum compatible)
generates a valid Avalanche HD wallet
passed
HD Wallet Generation (BIP32/BIP44) > Avalanche HD Wallet (BIP44 - Ethereum compatible)
has valid Ethereum-compatible address
passed
0.001s
HD Wallet Generation (BIP32/BIP44) > Avalanche HD Wallet (BIP44 - Ethereum compatible)
has valid private key
passed
HD Wallet Generation (BIP32/BIP44) > Avalanche HD Wallet (BIP44 - Ethereum compatible)
uses Ethereum derivation path
passed
HD Wallet Generation (BIP32/BIP44) > Avalanche HD Wallet (BIP44 - Ethereum compatible)
has coin abbreviation (ETH since it uses Ethereum API)
passed
HD Wallet Generation (BIP32/BIP44) > Polygon HD Wallet (BIP44 - Ethereum compatible)
generates a valid Polygon HD wallet
passed
HD Wallet Generation (BIP32/BIP44) > Polygon HD Wallet (BIP44 - Ethereum compatible)
has valid Ethereum-compatible address
passed
HD Wallet Generation (BIP32/BIP44) > Polygon HD Wallet (BIP44 - Ethereum compatible)
uses Ethereum derivation path
passed
HD Wallet Generation (BIP32/BIP44) > Polygon HD Wallet (BIP44 - Ethereum compatible)
has coin abbreviation (ETH since it uses Ethereum API)
passed
HD Wallet Generation (BIP32/BIP44) > Solana HD Wallet (BIP44)
generates a valid Solana HD wallet
passed
0.001s
HD Wallet Generation (BIP32/BIP44) > Solana HD Wallet (BIP44)
has valid Solana address
passed
HD Wallet Generation (BIP32/BIP44) > Solana HD Wallet (BIP44)
has valid private key (Base58 format for Solana)
passed
HD Wallet Generation (BIP32/BIP44) > Solana HD Wallet (BIP44)
has valid mnemonic phrase
passed
HD Wallet Generation (BIP32/BIP44) > Cardano HD Wallet (BIP44)
generates a valid Cardano HD wallet
passed
0.001s
HD Wallet Generation (BIP32/BIP44) > Cardano HD Wallet (BIP44)
has valid Cardano address
passed
0.001s
HD Wallet Generation (BIP32/BIP44) > Cardano HD Wallet (BIP44)
has valid private key (Cardano extended format)
passed
HD Wallet Generation (BIP32/BIP44) > Cardano HD Wallet (BIP44)
has valid mnemonic phrase
passed
HD Wallet Generation (BIP32/BIP44) > Derivation Path Variations
generates different addresses for different address indices
passed
5.982s
HD Wallet Generation (BIP32/BIP44) > Derivation Path Variations
generates different addresses for different accounts
passed
6.207s
HD Wallet Generation (BIP32/BIP44) > Derivation Path Variations
BIP44 protocol generates valid addresses
passed
3.117s
HD Wallet Generation (BIP32/BIP44) > BIP32 Passphrase Support
generates different addresses with different passphrases
passed
5.898s
HD Wallet Generation (BIP32/BIP44) > BIP32 Passphrase Support
wallet with passphrase stores passphrase field
passed
3.145s
HD Wallet Generation (BIP32/BIP44) > BIP32 Passphrase Support
wallet without passphrase does not store passphrase field
passed
3.011s
HD Wallet Generation (BIP32/BIP44) > Default Values
uses default values when args specify blockchain and crypto_net
passed
2.938s
HD Wallet Generation (BIP32/BIP44) > Default Values
defaults to Bitcoin when no blockchain specified
passed
2.565s
HD Wallet Generation (BIP32/BIP44) > Default Values
defaults to BIP44 when no protocol specified
passed
2.688s
HD Wallet Generation (BIP32/BIP44) > Default Values
defaults to account 0 and address_index 0
passed
2.681s
HD Wallet Generation (BIP32/BIP44) > Cross-Blockchain Consistency
same entropy generates same mnemonic for all blockchains
passed
9.983s
HD Wallet Generation (BIP32/BIP44) > Cross-Blockchain Consistency
same entropy generates different addresses for different blockchains
passed
5.105s
HD Wallet Generation (BIP32/BIP44) > Cross-Blockchain Consistency
all HD wallets have HD_WALLET_TYPE mode
passed
9.634s
HD Wallet Generation (BIP32/BIP44) > Testnet Support
generates Bitcoin testnet HD wallet
passed
2.575s
HD Wallet Generation (BIP32/BIP44) > Testnet Support
generates Ethereum testnet HD wallet
passed
2.597s
HD Wallet Generation (BIP32/BIP44) > HD Wallet entropy sizes
128-bit entropy produces a 12-word mnemonic
passed
2.489s
HD Wallet Generation (BIP32/BIP44) > HD Wallet entropy sizes
128-bit entropy yields a valid non-null Bitcoin HD address
passed
2.445s
HD Wallet Generation (BIP32/BIP44) > HD Wallet entropy sizes
128-bit entropy yields a valid 64-hex derived private key
passed
2.574s
HD Wallet Generation (BIP32/BIP44) > HD Wallet entropy sizes
256-bit entropy still produces a 24-word mnemonic
passed
2.559s
E:\_00_Michel\_00_Lab\_00_GitHub\Cryptocalc\tests\jest\unit\crypto\bip32_utils.test.js
104.926s
BIP32 Utilities > MnemonicsToHDWalletInfo - Bitcoin
generates correct HD wallet info for Bitcoin with default parameters
passed
3.194s
BIP32 Utilities > MnemonicsToHDWalletInfo - Bitcoin
generates correct derivation path for Bitcoin
passed
3.36s
BIP32 Utilities > MnemonicsToHDWalletInfo - Bitcoin
respects custom BIP32 protocol parameter
passed
3.344s
BIP32 Utilities > MnemonicsToHDWalletInfo - Bitcoin
handles BIP32 passphrase correctly
passed
6.582s
BIP32 Utilities > MnemonicsToHDWalletInfo - Bitcoin
handles custom account index
passed
3.106s
BIP32 Utilities > MnemonicsToHDWalletInfo - Bitcoin
handles custom address index
passed
2.793s
BIP32 Utilities > MnemonicsToHDWalletInfo - Bitcoin
uses default mnemonics when none provided
passed
2.834s
BIP32 Utilities > MnemonicsToHDWalletInfo - Ethereum
generates correct HD wallet info for Ethereum
passed
2.882s
BIP32 Utilities > MnemonicsToHDWalletInfo - Ethereum
generates different addresses for different account indices
passed
5.456s
BIP32 Utilities > MnemonicsToHDWalletInfo - Multiple Blockchains
generates valid wallet for DogeCoin
passed
2.85s
BIP32 Utilities > MnemonicsToHDWalletInfo - Multiple Blockchains
generates valid wallet for LiteCoin
passed
2.694s
BIP32 Utilities > MnemonicsToHDWalletInfo - Multiple Blockchains
generates valid wallet for Bitcoin Cash
passed
2.851s
BIP32 Utilities > MnemonicsToHDWalletInfo - Special Cases
handles Bitcoin Cash address conversion
passed
2.821s
BIP32 Utilities > MnemonicsToHDWalletInfo - Special Cases
handles Stellar special case for ACCOUNT_XPRIV
passed
2.432s
BIP32 Utilities > MnemonicsToHDWalletInfo - Special Cases
handles Stellar special case for WIF
passed
2.339s
BIP32 Utilities > GetDerivationPath
generates correct derivation path with default parameters
passed
BIP32 Utilities > GetDerivationPath
generates correct derivation path with custom account
passed
BIP32 Utilities > GetDerivationPath
generates correct derivation path with custom address index
passed
BIP32 Utilities > GetDerivationPath
generates correct derivation path with custom BIP32 protocol
passed
BIP32 Utilities > GetDerivationPath
generates correct derivation path with all custom parameters
passed
BIP32 Utilities > GetDerivationPath
handles string parameters correctly
passed
BIP32 Utilities > GetDerivationPath
handles number parameters correctly
passed
BIP32 Utilities > GetDerivationPath
generates path for different coin types
passed
BIP32 Utilities > GetDerivationPath
handles undefined options parameter
passed
BIP32 Utilities > GetDerivationPath
handles empty options object
passed
0.001s
BIP32 Utilities > Consistency and Determinism
generates same wallet for same mnemonics and parameters
passed
5.058s
BIP32 Utilities > Consistency and Determinism
generates different wallets for different mnemonics
passed
5.251s
BIP32 Utilities > Consistency and Determinism
master private key and chaincode have correct lengths
passed
2.451s
BIP32 Utilities > Consistency and Determinism
private key has correct length
passed
2.456s
BIP32 Utilities > Integration with Bip39Utils
uses Bip39Utils.GetArgs correctly
passed
2.278s
BIP32 Utilities > Integration with Bip39Utils
works with Bip39Utils generated mnemonics
passed
2.356s
BIP32 Utilities > Use Case - HD Wallet with account, address index, and BIP39 passphrase
Bitcoin: derivation path reflects account=2 and address_index=5
passed
2.541s
BIP32 Utilities > Use Case - HD Wallet with account, address index, and BIP39 passphrase
Bitcoin: address and private key are deterministic
passed
4.547s
BIP32 Utilities > Use Case - HD Wallet with account, address index, and BIP39 passphrase
Bitcoin: passphrase changes the derived address (same account/index)
passed
4.659s
BIP32 Utilities > Use Case - HD Wallet with account, address index, and BIP39 passphrase
Bitcoin: known reference values for account=2, index=5, passphrase
passed
2.245s
BIP32 Utilities > Use Case - HD Wallet with account, address index, and BIP39 passphrase
Ethereum: derivation path reflects account=2 and address_index=5
passed
2.411s
BIP32 Utilities > Use Case - HD Wallet with account, address index, and BIP39 passphrase
Ethereum: known reference address for account=2, index=5, passphrase
passed
2.422s
BIP32 Utilities > Edge Cases
handles very large account index
passed
2.407s
BIP32 Utilities > Edge Cases
handles very large address index
passed
2.361s
BIP32 Utilities > Edge Cases
handles empty passphrase (should be same as no passphrase)
passed
4.914s
BIP32 Utilities > Edge Cases
handles null passphrase (should be same as no passphrase)
passed
4.485s