tools/mpremote: Add initial regression tests for mpremote.
These tests are specifically for the command-line interface and cover: - resume/soft-reset/connect/disconnect - mount - fs cp,touch,mkdir,cat,sha256sum,rm,rmdir - eval/exec/run This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared <jim.mussared@gmail.com> Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
parent
dd6f78f014
commit
6461ffd9d1
14
tools/mpremote/tests/README.md
Normal file
14
tools/mpremote/tests/README.md
Normal file
@ -0,0 +1,14 @@
|
||||
# Tests for mpremote
|
||||
|
||||
This directory contains a set of tests for `mpremote`.
|
||||
|
||||
Requirements:
|
||||
- A device running MicroPython connected to a serial port on the host.
|
||||
- Python 3.x, `bash` and various Unix tools such as `find`, `mktemp`, `sed`, `sort`, `tr`.
|
||||
|
||||
To run the tests do:
|
||||
|
||||
$ ./run-mpremote-tests.sh
|
||||
|
||||
Each test should print "OK" if it passed. Otherwise it will print "CRASH", or "FAIL"
|
||||
and a diff of the expected and actual test output.
|
30
tools/mpremote/tests/run-mpremote-tests.sh
Executable file
30
tools/mpremote/tests/run-mpremote-tests.sh
Executable file
@ -0,0 +1,30 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
TEST_DIR=$(dirname $0)
|
||||
MPREMOTE=${TEST_DIR}/../mpremote.py
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
# Find tests matching test_*.sh
|
||||
TESTS=${TEST_DIR}/test_*.sh
|
||||
else
|
||||
# Specific test path from the command line.
|
||||
TESTS="$1"
|
||||
fi
|
||||
|
||||
for t in $TESTS; do
|
||||
TMP=$(mktemp -d)
|
||||
echo -n "${t}: "
|
||||
# Strip CR and replace the random temp dir with a token.
|
||||
if env MPREMOTE=${MPREMOTE} TMP="${TMP}" "${t}" | tr -d '\r' | sed "s,${TMP},"'${TMP},g' > "${t}.out"; then
|
||||
if diff "${t}.out" "${t}.exp" > /dev/null; then
|
||||
echo "OK"
|
||||
else
|
||||
echo "FAIL"
|
||||
diff "${t}.out" "${t}.exp" || true
|
||||
fi
|
||||
else
|
||||
echo "CRASH"
|
||||
fi
|
||||
rm -r "${TMP}"
|
||||
done
|
26
tools/mpremote/tests/test_eval_exec_run.sh
Executable file
26
tools/mpremote/tests/test_eval_exec_run.sh
Executable file
@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
$MPREMOTE exec "print('mpremote')"
|
||||
|
||||
$MPREMOTE exec "print('before sleep'); import time; time.sleep(0.1); print('after sleep')"
|
||||
$MPREMOTE exec --no-follow "print('before sleep'); import time; time.sleep(0.1); print('after sleep')"
|
||||
sleep 0.3
|
||||
|
||||
$MPREMOTE eval "1+2"
|
||||
$MPREMOTE eval "[{'a': 'b'}, (1,2,3,), True]"
|
||||
|
||||
cat << EOF > /tmp/run.py
|
||||
print("run")
|
||||
EOF
|
||||
|
||||
$MPREMOTE run /tmp/run.py
|
||||
|
||||
cat << EOF > /tmp/run.py
|
||||
import time
|
||||
for i in range(3):
|
||||
time.sleep(0.1)
|
||||
print("run")
|
||||
EOF
|
||||
$MPREMOTE run --no-follow /tmp/run.py
|
||||
sleep 0.5
|
6
tools/mpremote/tests/test_eval_exec_run.sh.exp
Normal file
6
tools/mpremote/tests/test_eval_exec_run.sh.exp
Normal file
@ -0,0 +1,6 @@
|
||||
mpremote
|
||||
before sleep
|
||||
after sleep
|
||||
3
|
||||
[{'a': 'b'}, (1, 2, 3), True]
|
||||
run
|
162
tools/mpremote/tests/test_filesystem.sh
Executable file
162
tools/mpremote/tests/test_filesystem.sh
Executable file
@ -0,0 +1,162 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Creates a RAM disk big enough to hold two copies of the test directory
|
||||
# structure.
|
||||
cat << EOF > "${TMP}/ramdisk.py"
|
||||
class RAMBlockDev:
|
||||
def __init__(self, block_size, num_blocks):
|
||||
self.block_size = block_size
|
||||
self.data = bytearray(block_size * num_blocks)
|
||||
|
||||
def readblocks(self, block_num, buf):
|
||||
for i in range(len(buf)):
|
||||
buf[i] = self.data[block_num * self.block_size + i]
|
||||
|
||||
def writeblocks(self, block_num, buf):
|
||||
for i in range(len(buf)):
|
||||
self.data[block_num * self.block_size + i] = buf[i]
|
||||
|
||||
def ioctl(self, op, arg):
|
||||
if op == 4: # get number of blocks
|
||||
return len(self.data) // self.block_size
|
||||
if op == 5: # get block size
|
||||
return self.block_size
|
||||
|
||||
import os
|
||||
|
||||
bdev = RAMBlockDev(512, 50)
|
||||
os.VfsFat.mkfs(bdev)
|
||||
os.mount(bdev, '/ramdisk')
|
||||
os.chdir('/ramdisk')
|
||||
EOF
|
||||
|
||||
|
||||
echo -----
|
||||
$MPREMOTE run "${TMP}/ramdisk.py"
|
||||
$MPREMOTE resume ls
|
||||
|
||||
echo -----
|
||||
$MPREMOTE resume touch a.py
|
||||
$MPREMOTE resume touch :b.py
|
||||
$MPREMOTE resume ls :
|
||||
$MPREMOTE resume cat a.py
|
||||
$MPREMOTE resume cat :b.py
|
||||
$MPREMOTE resume sha256sum a.py
|
||||
echo -n "" | sha256sum
|
||||
|
||||
echo -----
|
||||
cat << EOF > "${TMP}/a.py"
|
||||
print("Hello")
|
||||
print("World")
|
||||
EOF
|
||||
$MPREMOTE resume cp "${TMP}/a.py" :
|
||||
$MPREMOTE resume cp "${TMP}/a.py" :b.py
|
||||
$MPREMOTE resume cp "${TMP}/a.py" :c.py
|
||||
$MPREMOTE resume cp :a.py :d.py
|
||||
$MPREMOTE resume ls
|
||||
$MPREMOTE resume exec "import a; import b; import c"
|
||||
$MPREMOTE resume sha256sum a.py
|
||||
cat "${TMP}/a.py" | sha256sum
|
||||
|
||||
echo -----
|
||||
$MPREMOTE resume mkdir aaa
|
||||
$MPREMOTE resume mkdir :bbb
|
||||
$MPREMOTE resume cp "${TMP}/a.py" :aaa
|
||||
$MPREMOTE resume cp "${TMP}/a.py" :bbb/b.py
|
||||
$MPREMOTE resume cat :aaa/a.py bbb/b.py
|
||||
|
||||
echo -----
|
||||
$MPREMOTE resume rm :b.py c.py
|
||||
$MPREMOTE resume ls
|
||||
$MPREMOTE resume rm :aaa/a.py bbb/b.py
|
||||
$MPREMOTE resume rmdir aaa :bbb
|
||||
$MPREMOTE resume ls
|
||||
|
||||
echo -----
|
||||
env EDITOR="sed -i s/Hello/Goodbye/" $MPREMOTE resume edit d.py
|
||||
$MPREMOTE resume sha256sum :d.py
|
||||
$MPREMOTE resume exec "import d"
|
||||
|
||||
|
||||
# Create a local directory structure and copy it to `:` on the device.
|
||||
echo -----
|
||||
mkdir -p "${TMP}/package"
|
||||
mkdir -p "${TMP}/package/subpackage"
|
||||
cat << EOF > "${TMP}/package/__init__.py"
|
||||
from .x import x
|
||||
from .subpackage import y
|
||||
EOF
|
||||
cat << EOF > "${TMP}/package/x.py"
|
||||
def x():
|
||||
print("x")
|
||||
EOF
|
||||
cat << EOF > "${TMP}/package/subpackage/__init__.py"
|
||||
from .y import y
|
||||
EOF
|
||||
cat << EOF > "${TMP}/package/subpackage/y.py"
|
||||
def y():
|
||||
print("y")
|
||||
EOF
|
||||
$MPREMOTE run "${TMP}/ramdisk.py"
|
||||
$MPREMOTE resume cp -r "${TMP}/package" :
|
||||
$MPREMOTE resume ls : :package :package/subpackage
|
||||
$MPREMOTE resume exec "import package; package.x(); package.y()"
|
||||
|
||||
|
||||
# Same thing except with a destination directory name.
|
||||
echo -----
|
||||
$MPREMOTE run "${TMP}/ramdisk.py"
|
||||
$MPREMOTE resume cp -r "${TMP}/package" :package2
|
||||
$MPREMOTE resume ls : :package2 :package2/subpackage
|
||||
$MPREMOTE resume exec "import package2; package2.x(); package2.y()"
|
||||
|
||||
|
||||
# Copy to an existing directory, it will be copied inside.
|
||||
echo -----
|
||||
$MPREMOTE run "${TMP}/ramdisk.py"
|
||||
$MPREMOTE resume mkdir :test
|
||||
$MPREMOTE resume cp -r "${TMP}/package" :test
|
||||
$MPREMOTE resume ls :test :test/package :test/package/subpackage
|
||||
|
||||
# Copy to non-existing sub-directory.
|
||||
echo -----
|
||||
$MPREMOTE resume cp -r "${TMP}/package" :test/package2
|
||||
$MPREMOTE resume ls :test :test/package2 :test/package2/subpackage
|
||||
|
||||
# Copy from the device back to local.
|
||||
echo -----
|
||||
mkdir "${TMP}/copy"
|
||||
$MPREMOTE resume cp -r :test/package "${TMP}/copy"
|
||||
ls "${TMP}/copy" "${TMP}/copy/package" "${TMP}/copy/package/subpackage"
|
||||
|
||||
# Copy from the device back to local with destination directory name.
|
||||
echo -----
|
||||
$MPREMOTE resume cp -r :test/package "${TMP}/copy/package2"
|
||||
ls "${TMP}/copy" "${TMP}/copy/package2" "${TMP}/copy/package2/subpackage"
|
||||
|
||||
|
||||
# Copy from device to another location on the device with destination directory name.
|
||||
echo -----
|
||||
$MPREMOTE run "${TMP}/ramdisk.py"
|
||||
$MPREMOTE resume cp -r "${TMP}/package" :
|
||||
$MPREMOTE resume cp -r :package :package3
|
||||
$MPREMOTE resume ls : :package3 :package3/subpackage
|
||||
|
||||
# Copy from device to another location on the device into an existing directory.
|
||||
echo -----
|
||||
$MPREMOTE run "${TMP}/ramdisk.py"
|
||||
$MPREMOTE resume cp -r "${TMP}/package" :
|
||||
$MPREMOTE resume mkdir :package4
|
||||
$MPREMOTE resume cp -r :package :package4
|
||||
$MPREMOTE resume ls : :package4 :package4/package :package4/package/subpackage
|
||||
|
||||
# Repeat an existing copy with one file modified.
|
||||
echo -----
|
||||
cat << EOF > "${TMP}/package/subpackage/y.py"
|
||||
def y():
|
||||
print("y2")
|
||||
EOF
|
||||
$MPREMOTE resume cp -r "${TMP}/package" :
|
||||
$MPREMOTE resume ls : :package :package/subpackage
|
||||
$MPREMOTE resume exec "import package; package.x(); package.y()"
|
183
tools/mpremote/tests/test_filesystem.sh.exp
Normal file
183
tools/mpremote/tests/test_filesystem.sh.exp
Normal file
@ -0,0 +1,183 @@
|
||||
-----
|
||||
ls :
|
||||
-----
|
||||
touch :a.py
|
||||
touch :b.py
|
||||
ls :
|
||||
0 a.py
|
||||
0 b.py
|
||||
sha256sum :a.py
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -
|
||||
-----
|
||||
cp ${TMP}/a.py :
|
||||
cp ${TMP}/a.py :b.py
|
||||
cp ${TMP}/a.py :c.py
|
||||
cp :a.py :d.py
|
||||
ls :
|
||||
30 a.py
|
||||
30 b.py
|
||||
30 c.py
|
||||
30 d.py
|
||||
Hello
|
||||
World
|
||||
Hello
|
||||
World
|
||||
Hello
|
||||
World
|
||||
sha256sum :a.py
|
||||
50f0a701dd6cd6125387b96515300c9d5294c006518f8e62fa9eea3b66587f21
|
||||
50f0a701dd6cd6125387b96515300c9d5294c006518f8e62fa9eea3b66587f21 -
|
||||
-----
|
||||
mkdir :aaa
|
||||
mkdir :bbb
|
||||
cp ${TMP}/a.py :aaa
|
||||
cp ${TMP}/a.py :bbb/b.py
|
||||
print("Hello")
|
||||
print("World")
|
||||
print("Hello")
|
||||
print("World")
|
||||
-----
|
||||
rm :b.py
|
||||
rm :c.py
|
||||
ls :
|
||||
30 a.py
|
||||
30 d.py
|
||||
0 aaa/
|
||||
0 bbb/
|
||||
rm :aaa/a.py
|
||||
rm :bbb/b.py
|
||||
rmdir :aaa
|
||||
rmdir :bbb
|
||||
ls :
|
||||
30 a.py
|
||||
30 d.py
|
||||
-----
|
||||
edit :d.py
|
||||
sha256sum :d.py
|
||||
612c7ddb88390ac86b4174b26a6e5b52fc2f2838b234efd8f6f7c41631a49d04
|
||||
Goodbye
|
||||
World
|
||||
-----
|
||||
cp ${TMP}/package :
|
||||
ls :
|
||||
0 package/
|
||||
ls :package
|
||||
0 subpackage/
|
||||
43 __init__.py
|
||||
22 x.py
|
||||
ls :package/subpackage
|
||||
17 __init__.py
|
||||
22 y.py
|
||||
x
|
||||
y
|
||||
-----
|
||||
cp ${TMP}/package :package2
|
||||
ls :
|
||||
0 package2/
|
||||
ls :package2
|
||||
0 subpackage/
|
||||
43 __init__.py
|
||||
22 x.py
|
||||
ls :package2/subpackage
|
||||
17 __init__.py
|
||||
22 y.py
|
||||
x
|
||||
y
|
||||
-----
|
||||
mkdir :test
|
||||
cp ${TMP}/package :test
|
||||
ls :test
|
||||
0 package/
|
||||
ls :test/package
|
||||
0 subpackage/
|
||||
43 __init__.py
|
||||
22 x.py
|
||||
ls :test/package/subpackage
|
||||
17 __init__.py
|
||||
22 y.py
|
||||
-----
|
||||
cp ${TMP}/package :test/package2
|
||||
ls :test
|
||||
0 package/
|
||||
0 package2/
|
||||
ls :test/package2
|
||||
0 subpackage/
|
||||
43 __init__.py
|
||||
22 x.py
|
||||
ls :test/package2/subpackage
|
||||
17 __init__.py
|
||||
22 y.py
|
||||
-----
|
||||
cp :test/package ${TMP}/copy
|
||||
${TMP}/copy:
|
||||
package
|
||||
|
||||
${TMP}/copy/package:
|
||||
__init__.py
|
||||
subpackage
|
||||
x.py
|
||||
|
||||
${TMP}/copy/package/subpackage:
|
||||
__init__.py
|
||||
y.py
|
||||
-----
|
||||
cp :test/package ${TMP}/copy/package2
|
||||
${TMP}/copy:
|
||||
package
|
||||
package2
|
||||
|
||||
${TMP}/copy/package2:
|
||||
__init__.py
|
||||
subpackage
|
||||
x.py
|
||||
|
||||
${TMP}/copy/package2/subpackage:
|
||||
__init__.py
|
||||
y.py
|
||||
-----
|
||||
cp ${TMP}/package :
|
||||
cp :package :package3
|
||||
ls :
|
||||
0 package/
|
||||
0 package3/
|
||||
ls :package3
|
||||
0 subpackage/
|
||||
43 __init__.py
|
||||
22 x.py
|
||||
ls :package3/subpackage
|
||||
17 __init__.py
|
||||
22 y.py
|
||||
-----
|
||||
cp ${TMP}/package :
|
||||
mkdir :package4
|
||||
cp :package :package4
|
||||
ls :
|
||||
0 package/
|
||||
0 package4/
|
||||
ls :package4
|
||||
0 package/
|
||||
ls :package4/package
|
||||
0 subpackage/
|
||||
43 __init__.py
|
||||
22 x.py
|
||||
ls :package4/package/subpackage
|
||||
17 __init__.py
|
||||
22 y.py
|
||||
-----
|
||||
cp ${TMP}/package :
|
||||
Up to date: ./package/__init__.py
|
||||
Up to date: ./package/subpackage/__init__.py
|
||||
Up to date: ./package/x.py
|
||||
ls :
|
||||
0 package/
|
||||
0 package4/
|
||||
ls :package
|
||||
0 subpackage/
|
||||
43 __init__.py
|
||||
22 x.py
|
||||
ls :package/subpackage
|
||||
17 __init__.py
|
||||
23 y.py
|
||||
x
|
||||
y2
|
28
tools/mpremote/tests/test_mount.sh
Executable file
28
tools/mpremote/tests/test_mount.sh
Executable file
@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Create a local directory structure and mount the parent directory on the device.
|
||||
echo -----
|
||||
mkdir -p "${TMP}/mount_package"
|
||||
mkdir -p "${TMP}/mount_package/subpackage"
|
||||
cat << EOF > "${TMP}/mount_package/__init__.py"
|
||||
from .x import x
|
||||
from .subpackage import y
|
||||
EOF
|
||||
cat << EOF > "${TMP}/mount_package/x.py"
|
||||
def x():
|
||||
print("x")
|
||||
EOF
|
||||
cat << EOF > "${TMP}/mount_package/subpackage/__init__.py"
|
||||
from .y import y
|
||||
EOF
|
||||
cat << EOF > "${TMP}/mount_package/subpackage/y.py"
|
||||
def y():
|
||||
print("y")
|
||||
EOF
|
||||
$MPREMOTE mount ${TMP} exec "import mount_package; mount_package.x(); mount_package.y()"
|
||||
|
||||
# Write to a file on the device and see that it's written locally.
|
||||
echo -----
|
||||
$MPREMOTE mount ${TMP} exec "open('test.txt', 'w').write('hello world\n')"
|
||||
cat "${TMP}/test.txt"
|
7
tools/mpremote/tests/test_mount.sh.exp
Normal file
7
tools/mpremote/tests/test_mount.sh.exp
Normal file
@ -0,0 +1,7 @@
|
||||
-----
|
||||
x
|
||||
y
|
||||
Local directory ${TMP} is mounted at /remote
|
||||
-----
|
||||
Local directory ${TMP} is mounted at /remote
|
||||
hello world
|
60
tools/mpremote/tests/test_recursive_cp.sh
Executable file
60
tools/mpremote/tests/test_recursive_cp.sh
Executable file
@ -0,0 +1,60 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo -----
|
||||
mkdir -p $TMP/a $TMP/a/b
|
||||
touch $TMP/a/x.py $TMP/a/b/y.py
|
||||
ls $TMP/a | sort
|
||||
ls $TMP/a/b | sort
|
||||
|
||||
# TODO
|
||||
echo -----
|
||||
touch $TMP/y.py
|
||||
ls $TMP | sort
|
||||
|
||||
# Recursive copy to a directory that doesn't exist. The source directory will
|
||||
# be copied to the destination (i.e. bX will the same as a).
|
||||
echo -----
|
||||
cp -r $TMP/a $TMP/b1
|
||||
cp -r $TMP/a/ $TMP/b2
|
||||
cp -r $TMP/a $TMP/b3/
|
||||
cp -r $TMP/a/ $TMP/b4/
|
||||
|
||||
# Recursive copy to a directory that does exist. The source directory will be
|
||||
# copied into the destination (i.e. bX will contain a copy of a).
|
||||
echo -----
|
||||
mkdir $TMP/c{1,2,3,4}
|
||||
cp -r $TMP/a $TMP/c1
|
||||
cp -r $TMP/a/ $TMP/c2
|
||||
cp -r $TMP/a $TMP/c3/
|
||||
cp -r $TMP/a/ $TMP/c4/
|
||||
|
||||
echo -----
|
||||
find $TMP | sort
|
||||
|
||||
echo -----
|
||||
rm -rf $TMP/b{1,2,3,4} $TMP/c{1,2,3,4}
|
||||
|
||||
|
||||
|
||||
# Now replicate the same thing using `mpremote cp`.
|
||||
|
||||
# Recursive copy to a directory that doesn't exist. The source directory will
|
||||
# be copied to the destination (i.e. bX will the same as a).
|
||||
echo -----
|
||||
$MPREMOTE cp --no-verbose -r $TMP/a $TMP/b1
|
||||
$MPREMOTE cp --no-verbose -r $TMP/a/ $TMP/b2
|
||||
$MPREMOTE cp --no-verbose -r $TMP/a $TMP/b3/
|
||||
$MPREMOTE cp --no-verbose -r $TMP/a/ $TMP/b4/
|
||||
|
||||
# Recursive copy to a directory that does exist. The source directory will be
|
||||
# copied into the destination (i.e. bX will contain a copy of a).
|
||||
echo -----
|
||||
mkdir $TMP/c{1,2,3,4}
|
||||
$MPREMOTE cp --no-verbose -r $TMP/a $TMP/c1
|
||||
$MPREMOTE cp --no-verbose -r $TMP/a/ $TMP/c2
|
||||
$MPREMOTE cp --no-verbose -r $TMP/a $TMP/c3/
|
||||
$MPREMOTE cp --no-verbose -r $TMP/a/ $TMP/c4/
|
||||
|
||||
echo -----
|
||||
find $TMP | sort
|
98
tools/mpremote/tests/test_recursive_cp.sh.exp
Normal file
98
tools/mpremote/tests/test_recursive_cp.sh.exp
Normal file
@ -0,0 +1,98 @@
|
||||
-----
|
||||
b
|
||||
x.py
|
||||
y.py
|
||||
-----
|
||||
a
|
||||
y.py
|
||||
-----
|
||||
-----
|
||||
-----
|
||||
${TMP}
|
||||
${TMP}/a
|
||||
${TMP}/a/b
|
||||
${TMP}/a/b/y.py
|
||||
${TMP}/a/x.py
|
||||
${TMP}/b1
|
||||
${TMP}/b1/b
|
||||
${TMP}/b1/b/y.py
|
||||
${TMP}/b1/x.py
|
||||
${TMP}/b2
|
||||
${TMP}/b2/b
|
||||
${TMP}/b2/b/y.py
|
||||
${TMP}/b2/x.py
|
||||
${TMP}/b3
|
||||
${TMP}/b3/b
|
||||
${TMP}/b3/b/y.py
|
||||
${TMP}/b3/x.py
|
||||
${TMP}/b4
|
||||
${TMP}/b4/b
|
||||
${TMP}/b4/b/y.py
|
||||
${TMP}/b4/x.py
|
||||
${TMP}/c1
|
||||
${TMP}/c1/a
|
||||
${TMP}/c1/a/b
|
||||
${TMP}/c1/a/b/y.py
|
||||
${TMP}/c1/a/x.py
|
||||
${TMP}/c2
|
||||
${TMP}/c2/a
|
||||
${TMP}/c2/a/b
|
||||
${TMP}/c2/a/b/y.py
|
||||
${TMP}/c2/a/x.py
|
||||
${TMP}/c3
|
||||
${TMP}/c3/a
|
||||
${TMP}/c3/a/b
|
||||
${TMP}/c3/a/b/y.py
|
||||
${TMP}/c3/a/x.py
|
||||
${TMP}/c4
|
||||
${TMP}/c4/a
|
||||
${TMP}/c4/a/b
|
||||
${TMP}/c4/a/b/y.py
|
||||
${TMP}/c4/a/x.py
|
||||
${TMP}/y.py
|
||||
-----
|
||||
-----
|
||||
-----
|
||||
-----
|
||||
${TMP}
|
||||
${TMP}/a
|
||||
${TMP}/a/b
|
||||
${TMP}/a/b/y.py
|
||||
${TMP}/a/x.py
|
||||
${TMP}/b1
|
||||
${TMP}/b1/b
|
||||
${TMP}/b1/b/y.py
|
||||
${TMP}/b1/x.py
|
||||
${TMP}/b2
|
||||
${TMP}/b2/b
|
||||
${TMP}/b2/b/y.py
|
||||
${TMP}/b2/x.py
|
||||
${TMP}/b3
|
||||
${TMP}/b3/b
|
||||
${TMP}/b3/b/y.py
|
||||
${TMP}/b3/x.py
|
||||
${TMP}/b4
|
||||
${TMP}/b4/b
|
||||
${TMP}/b4/b/y.py
|
||||
${TMP}/b4/x.py
|
||||
${TMP}/c1
|
||||
${TMP}/c1/a
|
||||
${TMP}/c1/a/b
|
||||
${TMP}/c1/a/b/y.py
|
||||
${TMP}/c1/a/x.py
|
||||
${TMP}/c2
|
||||
${TMP}/c2/a
|
||||
${TMP}/c2/a/b
|
||||
${TMP}/c2/a/b/y.py
|
||||
${TMP}/c2/a/x.py
|
||||
${TMP}/c3
|
||||
${TMP}/c3/a
|
||||
${TMP}/c3/a/b
|
||||
${TMP}/c3/a/b/y.py
|
||||
${TMP}/c3/a/x.py
|
||||
${TMP}/c4
|
||||
${TMP}/c4/a
|
||||
${TMP}/c4/a/b
|
||||
${TMP}/c4/a/b/y.py
|
||||
${TMP}/c4/a/x.py
|
||||
${TMP}/y.py
|
23
tools/mpremote/tests/test_resume.sh
Executable file
23
tools/mpremote/tests/test_resume.sh
Executable file
@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# The eval command will continue the state of the exec.
|
||||
echo -----
|
||||
$MPREMOTE exec "a = 'hello'" eval "a"
|
||||
|
||||
# Automatic soft reset. `a` will trigger NameError.
|
||||
echo -----
|
||||
$MPREMOTE eval "a" || true
|
||||
|
||||
# Resume will skip soft reset.
|
||||
echo -----
|
||||
$MPREMOTE exec "a = 'resume'"
|
||||
$MPREMOTE resume eval "a"
|
||||
|
||||
# The eval command will continue the state of the exec.
|
||||
echo -----
|
||||
$MPREMOTE exec "a = 'soft-reset'" eval "a" soft-reset eval "1+1" eval "a" || true
|
||||
|
||||
# A disconnect will trigger auto-reconnect.
|
||||
echo -----
|
||||
$MPREMOTE eval "1+2" disconnect eval "2+3"
|
17
tools/mpremote/tests/test_resume.sh.exp
Normal file
17
tools/mpremote/tests/test_resume.sh.exp
Normal file
@ -0,0 +1,17 @@
|
||||
-----
|
||||
hello
|
||||
-----
|
||||
Traceback (most recent call last):
|
||||
File "<stdin>", line 1, in <module>
|
||||
NameError: name 'a' isn't defined
|
||||
-----
|
||||
resume
|
||||
-----
|
||||
soft-reset
|
||||
2
|
||||
Traceback (most recent call last):
|
||||
File "<stdin>", line 1, in <module>
|
||||
NameError: name 'a' isn't defined
|
||||
-----
|
||||
3
|
||||
5
|
Loading…
Reference in New Issue
Block a user