Quellcode durchsuchen

Add limited test suite.

tags/2.5.0
Matthew Petroff vor 4 Jahren
Ursprung
Commit
18f931639a
7 geänderte Dateien mit 218 neuen und 0 gelöschten Zeilen
  1. +3
    -0
      .gitignore
  2. +3
    -0
      readme.md
  3. BIN
      tests/cube.png
  4. BIN
      tests/equirectangular.png
  5. BIN
      tests/multires.png
  6. +125
    -0
      tests/run_tests.py
  7. +87
    -0
      tests/tests.html

+ 3
- 0
.gitignore Datei anzeigen

@@ -9,3 +9,6 @@ utils/doc/generated_docs

# Ignore IntelliJ Files
.idea

# Ignore logs
tests/*.log

+ 3
- 0
readme.md Datei anzeigen

@@ -56,6 +56,9 @@ All user-facing strings can be changed using the `strings` configuration paramet
## Building
The `utils` folder contains the required build tools, with the exception of Python 3.2+ and Java installations. To build a minified version of Pannellum, run either `build.sh` or `build.bat` depending on your platform.

## Tests
A limited [Selenium](https://www.seleniumhq.org/)-based test suite is located in the `tests` directory. The tests can be executed by running `python3 run_tests.py`. Running the tests requires Python 3, the Selenium Python bindings, Firefox, [geckodriver](https://github.com/mozilla/geckodriver), [Pillow](https://pillow.readthedocs.io/), and [NumPy](https://www.numpy.org/).

## License
Pannellum is distributed under the MIT License. For more information, read the file `COPYING` or peruse the license [online](https://github.com/mpetroff/pannellum/blob/master/COPYING).



BIN
tests/cube.png Datei anzeigen

Vorher Nachher
Breite: 300  |  Höhe: 200  |  Größe: 6.4 KiB

BIN
tests/equirectangular.png Datei anzeigen

Vorher Nachher
Breite: 300  |  Höhe: 200  |  Größe: 109 KiB

BIN
tests/multires.png Datei anzeigen

Vorher Nachher
Breite: 300  |  Höhe: 200  |  Größe: 6.0 KiB

+ 125
- 0
tests/run_tests.py Datei anzeigen

@@ -0,0 +1,125 @@
"""
Selenium-based test suite for Pannellum

Dependencies:
Python 3, Selenium Python bindings, Firefox, geckodriver, Pillow, NumPy
"""

import http.server
import time
import threading
import io
import subprocess
import os
import numpy as np
from PIL import Image, ImageChops
from selenium import webdriver


# Set to true to create a new set of reference images
CREATE_REF = False


# Run web server
print("Starting web server...")
os.chdir(os.path.dirname(os.path.abspath(__file__))) # cd to script dir
os.chdir("..")
httpd = http.server.HTTPServer(
("127.0.0.1", 12345), http.server.SimpleHTTPRequestHandler
)
thread = threading.Thread(None, httpd.serve_forever)
thread.start()


# Create a new instance of the Firefox driver
print("Starting web driver...")
fp = webdriver.FirefoxProfile()
fp.set_preference("layout.css.devPixelsPerPx", "1.0")
driver = webdriver.Firefox(firefox_profile=fp)
driver.set_window_size(800, 600)


# Load page
print("Loading page...")
driver.get("http://127.0.0.1:8000/tests/tests.html")


# Make sure viewer loaded
print("Running tests...")
time.sleep(5)
viewer = driver.find_element_by_id("panorama")
assert driver.execute_script("return viewer.isLoaded()") == True


# Check equirectangular
assert driver.execute_script("return viewer.getScene() == 'equirectangular'")
if CREATE_REF:
viewer.screenshot("tests/equirectangular.png")
subprocess.call(["optipng", "-o7", "-strip", "all", "equirectangular.png"])
else:
reference = Image.open("tests/equirectangular.png")
screenshot = Image.open(io.BytesIO(viewer.screenshot_as_png)).convert("RGB")
assert np.mean(np.array(ImageChops.difference(screenshot, reference))) < 1
print("PASS: equirectangular")


# Check movement
driver.execute_script("viewer.setPitch(30).setYaw(-20).setHfov(90)")
time.sleep(2)
assert driver.execute_script(
"return viewer.getPitch() == 30 && viewer.getYaw() == -20 && viewer.getHfov() == 90"
)
driver.find_element_by_class_name("pnlm-zoom-in").click()
time.sleep(1)
assert driver.execute_script("return viewer.getHfov() == 85")
driver.find_element_by_class_name("pnlm-zoom-out").click()
time.sleep(1)
assert driver.execute_script("return viewer.getHfov() == 90")
print("PASS: movement")


# Check look at
driver.execute_script("viewer.lookAt(-10, 90, 100)")
time.sleep(2)
assert driver.execute_script(
"return viewer.getPitch() == -10 && viewer.getYaw() == 90 && viewer.getHfov() == 100"
)
print("PASS: look at")


# Check cube
driver.execute_script("viewer.loadScene('cube')")
time.sleep(5)
assert driver.execute_script("return viewer.getScene() == 'cube'")
if CREATE_REF:
viewer.screenshot("tests/cube.png")
subprocess.call(["optipng", "-o7", "-strip", "all", "cube.png"])
else:
reference = Image.open("tests/cube.png")
screenshot = Image.open(io.BytesIO(viewer.screenshot_as_png)).convert("RGB")
assert np.mean(np.array(ImageChops.difference(screenshot, reference))) < 1
print("PASS: cube")


# Check hot spot
driver.find_element_by_class_name("pnlm-scene").click()
time.sleep(5)
assert driver.execute_script("return viewer.getScene() == 'multires'")
print("PASS: hot spot")


# Check multires
if CREATE_REF:
viewer.screenshot("tests/multires.png")
subprocess.call(["optipng", "-o7", "-strip", "all", "multires.png"])
else:
reference = Image.open("tests/multires.png")
screenshot = Image.open(io.BytesIO(viewer.screenshot_as_png)).convert("RGB")
assert np.mean(np.array(ImageChops.difference(screenshot, reference))) < 1
print("PASS: multires")


# Done
driver.quit()
httpd.shutdown()
thread.join()

+ 87
- 0
tests/tests.html Datei anzeigen

@@ -0,0 +1,87 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pannellum Tests</title>
<link rel="stylesheet" href="../src/css/pannellum.css"/>
<script type="text/javascript" src="../src/js/libpannellum.js"></script>
<script type="text/javascript" src="../src/js/pannellum.js"></script>
<style>
#panorama {
width: 300px;
height: 200px;
}
</style>
</head>
<body>

<div id="panorama"></div>
<script>
viewer = pannellum.viewer('panorama', {
"default": {
"author": "testauthor",
"firstScene": "equirectangular",
"autoLoad": true
},
"scenes": {
"cube": {
"title": "cube title",
"type": "cubemap",
"cubeMap": [
"../examples/multires/1/f00.png",
"../examples/multires/1/r00.png",
"../examples/multires/1/b00.png",
"../examples/multires/1/l00.png",
"../examples/multires/1/u00.png",
"../examples/multires/1/d00.png"
],
"hotSpots": [
{
"pitch": -12,
"yaw": 170,
"type": "info",
"text": "info test"
},
{
"pitch": -10,
"yaw": -50,
"type": "info",
"text": "link test",
"URL": "https://github.com/mpetroff/pannellum"
},
{
"pitch": 0,
"yaw": -10,
"type": "scene",
"text": "scene test",
"sceneId": "multires"
}
]
},

"equirectangular": {
"title": "equirectangular title",
"panorama": "../examples/examplepano.jpg"
},

"multires": {
"title": "multires title",
"type": "multires",
"multiRes": {
"basePath": "../examples/multires",
"path": "/%l/%s%x%y",
"fallbackPath": "/fallback/%s",
"extension": "png",
"tileResolution": 256,
"maxLevel": 4,
"cubeResolution": 2048
}
}
}
});
</script>

</body>
</html>

Laden…
Abbrechen
Speichern