From b050fd89a75a4788f8e98dad4f6f93366a3061f2 Mon Sep 17 00:00:00 2001 From: semux Date: Sat, 6 Jul 2019 13:07:30 +0100 Subject: [PATCH] GUI: display gas price in transaction dialog --- .../java/org/semux/config/DevnetConfig.java | 2 - .../org/semux/gui/dialog/ConsoleDialog.java | 2 +- .../semux/gui/dialog/TransactionDialog.java | 22 +- .../gui/panel/TransactionsPanelFilter.java | 3 +- .../org/semux/gui/messages.properties | 461 +++++++++--------- .../org/semux/consensus/SemuxSyncTest.java | 1 - .../semux/gui/dialog/ConsoleDialogTest.java | 2 - .../org/semux/util/CommandParserTest.java | 4 +- 8 files changed, 252 insertions(+), 245 deletions(-) diff --git a/src/main/java/org/semux/config/DevnetConfig.java b/src/main/java/org/semux/config/DevnetConfig.java index 9dc8109f6..00dc1bceb 100644 --- a/src/main/java/org/semux/config/DevnetConfig.java +++ b/src/main/java/org/semux/config/DevnetConfig.java @@ -7,10 +7,8 @@ package org.semux.config; import java.util.Collections; -import java.util.HashMap; import java.util.Map; -import org.apache.commons.collections4.MapUtils; import org.semux.Network; import org.semux.core.Fork; diff --git a/src/main/java/org/semux/gui/dialog/ConsoleDialog.java b/src/main/java/org/semux/gui/dialog/ConsoleDialog.java index 45fd687c9..5963a5673 100644 --- a/src/main/java/org/semux/gui/dialog/ConsoleDialog.java +++ b/src/main/java/org/semux/gui/dialog/ConsoleDialog.java @@ -37,13 +37,13 @@ import org.semux.gui.SemuxGui; import org.semux.message.GuiMessages; import org.semux.util.CircularFixedSizeList; +import org.semux.util.CommandParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import io.swagger.annotations.ApiOperation; -import org.semux.util.CommandParser; public class ConsoleDialog extends JDialog implements ActionListener { diff --git a/src/main/java/org/semux/gui/dialog/TransactionDialog.java b/src/main/java/org/semux/gui/dialog/TransactionDialog.java index 710fa31da..55fd77942 100644 --- a/src/main/java/org/semux/gui/dialog/TransactionDialog.java +++ b/src/main/java/org/semux/gui/dialog/TransactionDialog.java @@ -42,6 +42,7 @@ public TransactionDialog(JFrame parent, Transaction tx, TransactionResult result JLabel lblData = new JLabel(GuiMessages.get("Data") + ":"); JLabel lblSucceeded = new JLabel(GuiMessages.get("Success")); + JLabel lblGasPrice = new JLabel(GuiMessages.get("GasPrice")); JLabel lblGasProvided = new JLabel(GuiMessages.get("GasProvided")); JLabel lblGasUsed = new JLabel(GuiMessages.get("GasUsed")); JLabel lblOutput = new JLabel(GuiMessages.get("Output")); @@ -70,6 +71,9 @@ public TransactionDialog(JFrame parent, Transaction tx, TransactionResult result JLabel timestamp = new JLabel(SwingUtil.formatTimestamp(tx.getTimestamp())); timestamp.setName("timestampText"); + JLabel gasPrice = new JLabel(SwingUtil.formatAmount(tx.getGasPrice())); + gasPrice.setName("gasPriceText"); + JLabel gasProvided = new JLabel(SwingUtil.formatNumber(tx.getGas())); gasProvided.setName("gasProvidedText"); @@ -99,8 +103,9 @@ public TransactionDialog(JFrame parent, Transaction tx, TransactionResult result .addGroup(groupLayout.createParallelGroup(Alignment.TRAILING) .addComponent(lblOutput) .addComponent(lblGasUsed) - .addComponent(lblGasProvided) .addComponent(lblSucceeded) + .addComponent(lblGasProvided) + .addComponent(lblGasPrice) .addComponent(lblData) .addComponent(lblTimestamp) .addComponent(lblNonce) @@ -121,8 +126,9 @@ public TransactionDialog(JFrame parent, Transaction tx, TransactionResult result .addComponent(nonce) .addComponent(timestamp) .addComponent(dataScroll, GroupLayout.PREFERRED_SIZE, 450, GroupLayout.PREFERRED_SIZE) - .addComponent(success) + .addComponent(gasPrice) .addComponent(gasProvided) + .addComponent(success) .addComponent(gasUsed) .addComponent(outputScroll, GroupLayout.PREFERRED_SIZE, 450, GroupLayout.PREFERRED_SIZE)) .addContainerGap(19, Short.MAX_VALUE)) @@ -168,12 +174,16 @@ public TransactionDialog(JFrame parent, Transaction tx, TransactionResult result .addComponent(dataScroll, GroupLayout.PREFERRED_SIZE, 60, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(ComponentPlacement.UNRELATED) .addGroup(groupLayout.createParallelGroup(Alignment.BASELINE) - .addComponent(lblSucceeded) - .addComponent(success)) + .addComponent(lblGasPrice) + .addComponent(gasPrice)) + .addPreferredGap(ComponentPlacement.UNRELATED) + .addGroup(groupLayout.createParallelGroup(Alignment.BASELINE) + .addComponent(lblGasProvided) + .addComponent(gasProvided)) .addPreferredGap(ComponentPlacement.UNRELATED) .addGroup(groupLayout.createParallelGroup(Alignment.BASELINE) - .addComponent(lblGasProvided) - .addComponent(gasProvided)) + .addComponent(lblSucceeded) + .addComponent(success)) .addPreferredGap(ComponentPlacement.UNRELATED) .addGroup(groupLayout.createParallelGroup(Alignment.BASELINE) .addComponent(lblGasUsed) diff --git a/src/main/java/org/semux/gui/panel/TransactionsPanelFilter.java b/src/main/java/org/semux/gui/panel/TransactionsPanelFilter.java index adda3b1a6..d6169113d 100644 --- a/src/main/java/org/semux/gui/panel/TransactionsPanelFilter.java +++ b/src/main/java/org/semux/gui/panel/TransactionsPanelFilter.java @@ -11,6 +11,7 @@ import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.TreeSet; import java.util.stream.Collectors; @@ -200,7 +201,7 @@ public void setSelectedItem(Object anObject) { T existing = getSelectedValue(); @SuppressWarnings("unchecked") T newValue = (T) (anObject instanceof ComboBoxItem ? ((ComboBoxItem) anObject).getValue() : anObject); - if (existing != newValue && (existing == null || !existing.equals(newValue))) { + if (!Objects.equals(existing, newValue)) { super.setSelectedItem(anObject); List filteredTransactions = getFilteredTransactions(); tableModel.setData(filteredTransactions); diff --git a/src/main/resources/org/semux/gui/messages.properties b/src/main/resources/org/semux/gui/messages.properties index 3c40b181c..34de270d7 100644 --- a/src/main/resources/org/semux/gui/messages.properties +++ b/src/main/resources/org/semux/gui/messages.properties @@ -1,230 +1,231 @@ -# splash screen -SplashLoading = Loading... -SplashLoadingWallet = Loading Wallet... -SplashStartingKernel = Starting Kernel... -SplashUpgradingDatabase = Upgrading database ({0} / {1} blocks) - -# welcome frame -SemuxWallet = Semux Wallet -WelcomeDescriptionHtml =

Welcome to semux!

Do you want to create a new account or import accounts from backup files?

-WalletNeedToBeUpgraded = Your wallet needs to be upgraded! -WalletCanBeUpgraded = There is a new version of semux available! -AccountSelection = Which account would you like to use? -CreateNewAccount = Create new account -ImportAccountsFromBackupFile = Import accounts from backup file -NoAccountFound = No account found! -UnlockFailed = Failed to unlock the wallet, wrong password? -AutomaticUnlockFailed = Failed to unlock the wallet.\nA wrong SEMUX_WALLET_PASSWORD environment variable might be set. - -# general -OK = OK -Cancel = Cancel -Next = Next -Cut = Cut -Copy = Copy -Paste = Paste -Add = Add -Edit = Edit -Delete = Delete -Input = Input -Select = Select -Overview = Overview -Consensus = Consensus -ErrorDialogTitle = Error -WarningDialogTitle = Warning -SuccessDialogTitle = Success! -WarningWalletPosixPermission = Your wallet.data file is too open.\nPlease set its permission level to 600. -WarningConfigPosixPermission = Your semux.properties config file is too open.\nPlease set its permission level to 600. -Jvm32NotSupported = 32-bit Java runtime is no longer supported since v1.3.0 - -# menu -File = File -Exit = Exit -Wallet = Wallet -Help = Help -About = About -WalletLocked = Wallet is locked! - -# home panel -Home = Home -Send = Send -Receive = Receive -Transaction = Transaction -Transactions = Transactions -Delegates = Delegates -Normal = Normal -Delegate = Delegate -Validator = Validator -Lock = Lock -Unlock = Unlock -Available = Available -Locked = Locked -TotalBalance = Total Balance -Clear = Clear -BestBlockNum = Best Known Block # -BlockNum = Block # -BlockTime = Block Time -Coinbase = Coinbase -Peers = Peers -BlockReward = Block reward -SyncProgress = Sync -SyncStopped = stopped -SyncFinished = finished - -# consensus table -PrimaryValidator = Primary Validator -BackupValidator = Backup Validator -NextValidator = Next Validator -RoundEndBlock = Round End Block -RoundEndTime = Round End Time - -# receive panel -NewAccount = New Account -NewAccountCreated = New account created! -WalletSaveFailed = Unable to save wallet! -AccountNumShort = Acc #{0} -AccountNum = Account #{0} -CopyAddress = Copy Address -AddressCopied = Address copied: {0} - -# send panel -ConfirmTransfer = Confirm transfer -TransferInfo = Are you sure you want to transfer {0} to {1}? -EnterValidValue = Please enter a valid value! -InsufficientFunds = Insufficient funds! You need {0}. -InsufficientLockedFunds = Insufficient locked funds! You need {0}. -InsufficientVotes = Insufficient votes for selected delegate. -InvalidReceivingAddress = Invalid receiving address! -TransactionFeeTooLow = Transaction fee is too low! -InvalidData = Invalid data, max length = {0} -TransactionFailed = Transaction failed! (Error: {0}) -TransactionSent = Transaction sent. It takes at least {0}s to get processed! -Text = Text -Hex = Hex - -# transaction panel -Hash = Hash -Type = Type -FromTo = From/To -From = From -To = To -Value = Value -Amount = Amount -Fee = Fee -FeeTip = Transaction fees are paid to validators for transaction processing. The min transaction fee is: {0}. -Data = Data -DataDecoded = Data decoded -DataTip =
Data is a String attached to the transaction!
Note: data will be stored on the blockchain and is publicly visible!
-Nonce = Nonce -Timestamp = Timestamp -Time = Time -Completed = Completed -Pending = Pending -NotAvailable = N/A - -# delegate panel -Num = # -Name = Name -Address = Address -RegisteredAt = Registered At -Vote = Vote -Votes = Votes -Unvote = Unvote -NumVotes = # of votes -VotesFromMe = Votes from Me -NumBlocksForged = # of Blocks Forged -NumTurnsHit = # of Turns Hit -NumTurnsMissed = # of Turns Missed -Rate = Rate -Status = Status -Rank = Rank -PleaseSelectDelegate = Please select a delegate -SelectedDelegate = Delegate: {0} -DelegateRegistration = Delegate registration -AccountNameError = Only 4-16 lowercase letters, numbers and underscore are allowed! -DelegateRegistrationNoteHtml = NOTE: {0} will be burned when you register a delegate; {1} transaction fee will apply when registering, voting or unvoting a delegate. -DelegateRegistrationDuplicatedAddress = The selected account is already a delegate. -DelegateRegistrationDuplicatedName = The name of delegate registration is already taken. -DelegateName = Name of your delegate -RegisterAsDelegate = Register as delegate -RegisterAsDelegateToolTip = Please enter a name for your delegate and click to register. {0} will be burned for the registration. -ConfirmDelegateRegistration = Confirm delegate registration -DelegateRegistrationInfo = Delegate registration will burn {0} from your balance, and this process is irreversible, continue? -UnknownDelegate = Unknown Delegate -SelectAccount = Please select an account! -SelectDelegate = Please select a delegate! -EnterValidNumberOfVotes = Please enter a valid number of votes! -NotEnoughBalanceToUnvote = You will not have enough balance to unvote, continue? - -# change password -Password = Password -EnterPassword = Please enter the password -WrongPasswordPleaseTryAgain = Incorrect password, please try again -OldPassword = Old Password -RepeatPassword = Repeat Password -IncorrectPassword = Incorrect password! -PasswordChanged = Password changed! -RepeatPasswordError = Repeat password does not match! -ChangePassword = Change password - -# menu bar -RecoverWallet = Recover accounts from backup -RecoverHdWallet = Recover HD wallet from phrase -ScanHdWallets = Scan for new HD wallet accounts -BackupWallet = Backup wallet -ImportPrivateKey = Import private key -EnterPrivateKey = Please enter the private key: -PrivateKeyImportSuccess = The private key was successfully imported! -PrivateKeyAlreadyExists = The private key already exists in your wallet! -PrivateKeyImportFailed = Failed to import the private key! -ApiExplorer = API Explorer - -# backup/recover wallet -WalletBinaryFormat = Wallet binary format -ImportSuccess = Success! {0} accounts were imported. -BackupFileExists = "{0}" already exists. Do you want to replace it? -WalletSavedAt = Your wallet has been saved at {0} -SaveBackupFailed = Failed to save backup file -DeleteAccount = Delete Account -RenameAccount = Rename Account -AccountDeleted = Account deleted! -ConfirmDeleteAccount = Do you want to delete this account? -ComputerNotQualified = Your computer is not qualified for running a validator node, continue? -Imported = Imported: - -# HD wallet -WalletRecoveryPhrase = Wallet recovery phrase -InvalidHdPhrase = Invalid wallet recovery phrase -CreateHdWallet = Create wallet recovery phrase -EnterNewHdPassword=HD key password -HdWalletInstructions=Creating HD wallet backup phrase
Please write this down safely so you can restore your wallet if
you lose your wallet file! The password for the HD wallet does
not need to be the same as your wallet password. -ReEnterNewHdPassword=Re-enter HD key password -HdWalletAliasPrefix=HD/Semux - -# export private dialog -ExportPrivateKey = Export private key -PrivateKey = Private key -CopyPrivateKey = Copy private key -PrivateKeyCopied = Private key copied: {0} - -# address book -AddressBook = Address book -SelectAddress = Please select an address! -AddAddress = Add an address -InvalidAddress = Invalid address! -AddAddressBookEntry = Add address book entry -EditAddressBookEntry = Edit address book entry -InvalidName = Invalid name! - -# command console -Console = Console -ConsoleHelp = Type "{0}" to display commands -UnknownMethod = Unknown method call: {0} -MethodError = Error calling {0} - -# VM -CreateContract = Create Contract -GasUsed = Gas Used -Output = Output -GasProvided = Gas Provided -Success = Success +# splash screen +SplashLoading = Loading... +SplashLoadingWallet = Loading Wallet... +SplashStartingKernel = Starting Kernel... +SplashUpgradingDatabase = Upgrading database ({0} / {1} blocks) + +# welcome frame +SemuxWallet = Semux Wallet +WelcomeDescriptionHtml =

Welcome to semux!

Do you want to create a new account or import accounts from backup files?

+WalletNeedToBeUpgraded = Your wallet needs to be upgraded! +WalletCanBeUpgraded = There is a new version of semux available! +AccountSelection = Which account would you like to use? +CreateNewAccount = Create new account +ImportAccountsFromBackupFile = Import accounts from backup file +NoAccountFound = No account found! +UnlockFailed = Failed to unlock the wallet, wrong password? +AutomaticUnlockFailed = Failed to unlock the wallet.\nA wrong SEMUX_WALLET_PASSWORD environment variable might be set. + +# general +OK = OK +Cancel = Cancel +Next = Next +Cut = Cut +Copy = Copy +Paste = Paste +Add = Add +Edit = Edit +Delete = Delete +Input = Input +Select = Select +Overview = Overview +Consensus = Consensus +ErrorDialogTitle = Error +WarningDialogTitle = Warning +SuccessDialogTitle = Success! +WarningWalletPosixPermission = Your wallet.data file is too open.\nPlease set its permission level to 600. +WarningConfigPosixPermission = Your semux.properties config file is too open.\nPlease set its permission level to 600. +Jvm32NotSupported = 32-bit Java runtime is no longer supported since v1.3.0 + +# menu +File = File +Exit = Exit +Wallet = Wallet +Help = Help +About = About +WalletLocked = Wallet is locked! + +# home panel +Home = Home +Send = Send +Receive = Receive +Transaction = Transaction +Transactions = Transactions +Delegates = Delegates +Normal = Normal +Delegate = Delegate +Validator = Validator +Lock = Lock +Unlock = Unlock +Available = Available +Locked = Locked +TotalBalance = Total Balance +Clear = Clear +BestBlockNum = Best Known Block # +BlockNum = Block # +BlockTime = Block Time +Coinbase = Coinbase +Peers = Peers +BlockReward = Block reward +SyncProgress = Sync +SyncStopped = stopped +SyncFinished = finished + +# consensus table +PrimaryValidator = Primary Validator +BackupValidator = Backup Validator +NextValidator = Next Validator +RoundEndBlock = Round End Block +RoundEndTime = Round End Time + +# receive panel +NewAccount = New Account +NewAccountCreated = New account created! +WalletSaveFailed = Unable to save wallet! +AccountNumShort = Acc #{0} +AccountNum = Account #{0} +CopyAddress = Copy Address +AddressCopied = Address copied: {0} + +# send panel +ConfirmTransfer = Confirm transfer +TransferInfo = Are you sure you want to transfer {0} to {1}? +EnterValidValue = Please enter a valid value! +InsufficientFunds = Insufficient funds! You need {0}. +InsufficientLockedFunds = Insufficient locked funds! You need {0}. +InsufficientVotes = Insufficient votes for selected delegate. +InvalidReceivingAddress = Invalid receiving address! +TransactionFeeTooLow = Transaction fee is too low! +InvalidData = Invalid data, max length = {0} +TransactionFailed = Transaction failed! (Error: {0}) +TransactionSent = Transaction sent. It takes at least {0}s to get processed! +Text = Text +Hex = Hex + +# transaction panel +Hash = Hash +Type = Type +FromTo = From/To +From = From +To = To +Value = Value +Amount = Amount +Fee = Fee +FeeTip = Transaction fees are paid to validators for transaction processing. The min transaction fee is: {0}. +Data = Data +DataDecoded = Data decoded +DataTip =
Data is a String attached to the transaction!
Note: data will be stored on the blockchain and is publicly visible!
+Nonce = Nonce +Timestamp = Timestamp +Time = Time +Completed = Completed +Pending = Pending +NotAvailable = N/A + +# delegate panel +Num = # +Name = Name +Address = Address +RegisteredAt = Registered At +Vote = Vote +Votes = Votes +Unvote = Unvote +NumVotes = # of votes +VotesFromMe = Votes from Me +NumBlocksForged = # of Blocks Forged +NumTurnsHit = # of Turns Hit +NumTurnsMissed = # of Turns Missed +Rate = Rate +Status = Status +Rank = Rank +PleaseSelectDelegate = Please select a delegate +SelectedDelegate = Delegate: {0} +DelegateRegistration = Delegate registration +AccountNameError = Only 4-16 lowercase letters, numbers and underscore are allowed! +DelegateRegistrationNoteHtml = NOTE: {0} will be burned when you register a delegate; {1} transaction fee will apply when registering, voting or unvoting a delegate. +DelegateRegistrationDuplicatedAddress = The selected account is already a delegate. +DelegateRegistrationDuplicatedName = The name of delegate registration is already taken. +DelegateName = Name of your delegate +RegisterAsDelegate = Register as delegate +RegisterAsDelegateToolTip = Please enter a name for your delegate and click to register. {0} will be burned for the registration. +ConfirmDelegateRegistration = Confirm delegate registration +DelegateRegistrationInfo = Delegate registration will burn {0} from your balance, and this process is irreversible, continue? +UnknownDelegate = Unknown Delegate +SelectAccount = Please select an account! +SelectDelegate = Please select a delegate! +EnterValidNumberOfVotes = Please enter a valid number of votes! +NotEnoughBalanceToUnvote = You will not have enough balance to unvote, continue? + +# change password +Password = Password +EnterPassword = Please enter the password +WrongPasswordPleaseTryAgain = Incorrect password, please try again +OldPassword = Old Password +RepeatPassword = Repeat Password +IncorrectPassword = Incorrect password! +PasswordChanged = Password changed! +RepeatPasswordError = Repeat password does not match! +ChangePassword = Change password + +# menu bar +RecoverWallet = Recover accounts from backup +RecoverHdWallet = Recover HD wallet from phrase +ScanHdWallets = Scan for new HD wallet accounts +BackupWallet = Backup wallet +ImportPrivateKey = Import private key +EnterPrivateKey = Please enter the private key: +PrivateKeyImportSuccess = The private key was successfully imported! +PrivateKeyAlreadyExists = The private key already exists in your wallet! +PrivateKeyImportFailed = Failed to import the private key! +ApiExplorer = API Explorer + +# backup/recover wallet +WalletBinaryFormat = Wallet binary format +ImportSuccess = Success! {0} accounts were imported. +BackupFileExists = "{0}" already exists. Do you want to replace it? +WalletSavedAt = Your wallet has been saved at {0} +SaveBackupFailed = Failed to save backup file +DeleteAccount = Delete Account +RenameAccount = Rename Account +AccountDeleted = Account deleted! +ConfirmDeleteAccount = Do you want to delete this account? +ComputerNotQualified = Your computer is not qualified for running a validator node, continue? +Imported = Imported: + +# HD wallet +WalletRecoveryPhrase = Wallet recovery phrase +InvalidHdPhrase = Invalid wallet recovery phrase +CreateHdWallet = Create wallet recovery phrase +EnterNewHdPassword=HD key password +HdWalletInstructions=Creating HD wallet backup phrase
Please write this down safely so you can restore your wallet if
you lose your wallet file! The password for the HD wallet does
not need to be the same as your wallet password. +ReEnterNewHdPassword=Re-enter HD key password +HdWalletAliasPrefix=HD/Semux + +# export private dialog +ExportPrivateKey = Export private key +PrivateKey = Private key +CopyPrivateKey = Copy private key +PrivateKeyCopied = Private key copied: {0} + +# address book +AddressBook = Address book +SelectAddress = Please select an address! +AddAddress = Add an address +InvalidAddress = Invalid address! +AddAddressBookEntry = Add address book entry +EditAddressBookEntry = Edit address book entry +InvalidName = Invalid name! + +# command console +Console = Console +ConsoleHelp = Type "{0}" to display commands +UnknownMethod = Unknown method call: {0} +MethodError = Error calling {0} + +# VM +CreateContract = Create Contract +Output = Output +GasPrice = Gas Price +GasProvided = Gas Provided +GasUsed = Gas Used +Success = Success diff --git a/src/test/java/org/semux/consensus/SemuxSyncTest.java b/src/test/java/org/semux/consensus/SemuxSyncTest.java index 1fef4b0a0..5dfc2ff35 100644 --- a/src/test/java/org/semux/consensus/SemuxSyncTest.java +++ b/src/test/java/org/semux/consensus/SemuxSyncTest.java @@ -10,7 +10,6 @@ import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; diff --git a/src/test/java/org/semux/gui/dialog/ConsoleDialogTest.java b/src/test/java/org/semux/gui/dialog/ConsoleDialogTest.java index bb50ea047..dd355c539 100644 --- a/src/test/java/org/semux/gui/dialog/ConsoleDialogTest.java +++ b/src/test/java/org/semux/gui/dialog/ConsoleDialogTest.java @@ -14,8 +14,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import org.assertj.swing.edt.GuiActionRunner; import org.assertj.swing.fixture.DialogFixture; diff --git a/src/test/java/org/semux/util/CommandParserTest.java b/src/test/java/org/semux/util/CommandParserTest.java index e173d5af4..85b805d50 100644 --- a/src/test/java/org/semux/util/CommandParserTest.java +++ b/src/test/java/org/semux/util/CommandParserTest.java @@ -6,11 +6,11 @@ */ package org.semux.util; +import java.util.List; + import org.junit.Assert; import org.junit.Test; -import java.util.List; - public class CommandParserTest { @Test