Make the libraries only used for reftesting opt-in.

Closes #56.
This commit is contained in:
Patrick Walton 2018-01-04 15:10:23 -08:00
parent 4a71f79a78
commit aa7e0df514
3 changed files with 41 additions and 7 deletions

View File

@ -57,6 +57,14 @@ To run the demo, make sure NPM and nightly Rust are installed, and run the follo
Then navigate to http://localhost:8000/.
## Testing
Pathfinder contains reference tests that compare its output to that of other rendering libraries,
such as Cairo. To run them, install Cairo and FreeType if necessary, then perform the above steps,
substituting the last line with:
$ cargo run --release --features reftests
## Authors
The primary author is Patrick Walton (@pcwalton), with contributions from the Servo development

View File

@ -3,6 +3,10 @@ name = "pathfinder_server"
version = "0.1.0"
authors = ["Patrick Walton <pcwalton@mimiga.net>"]
[features]
default = []
reftests = ["rsvg", "cairo-rs", "pathfinder_font_renderer/freetype"]
[dependencies]
app_units = "0.5"
base64 = "0.6"
@ -16,7 +20,6 @@ lru-cache = "0.1"
rocket = "0.3"
rocket_codegen = "0.3"
rocket_contrib = "0.3"
rsvg = "0.3"
serde = "1.0"
serde_derive = "1.0"
serde_json = "1.0"
@ -24,13 +27,17 @@ serde_json = "1.0"
[dependencies.cairo-rs]
version = "0.3"
features = ["png"]
optional = true
[dependencies.rsvg]
version = "0.3"
optional = true
[dependencies.fontsan]
git = "https://github.com/servo/fontsan.git"
[dependencies.pathfinder_font_renderer]
path = "../../font-renderer"
features = ["freetype"]
[dependencies.pathfinder_partitioner]
path = "../../partitioner"

View File

@ -13,7 +13,6 @@
extern crate app_units;
extern crate base64;
extern crate cairo;
extern crate env_logger;
extern crate euclid;
extern crate fontsan;
@ -24,16 +23,19 @@ extern crate pathfinder_partitioner;
extern crate pathfinder_path_utils;
extern crate rocket;
extern crate rocket_contrib;
extern crate rsvg;
#[macro_use]
extern crate lazy_static;
#[macro_use]
extern crate serde_derive;
#[cfg(feature = "reftests")]
extern crate cairo;
#[cfg(feature = "reftests")]
extern crate rsvg;
use app_units::Au;
use cairo::{Format, ImageSurface};
use euclid::{Point2D, Size2D, Transform2D};
use euclid::{Point2D, Transform2D};
use image::{DynamicImage, ImageBuffer, ImageFormat, ImageRgba8};
use lru_cache::LruCache;
use pathfinder_font_renderer::{FontContext, FontInstance, FontKey, GlyphImage};
@ -49,7 +51,6 @@ use rocket::http::{ContentType, Header, Status};
use rocket::request::Request;
use rocket::response::{NamedFile, Redirect, Responder, Response};
use rocket_contrib::json::Json;
use rsvg::{Handle, HandleExt};
use std::fs::File;
use std::io::{self, Cursor, Read};
use std::ops::Range;
@ -61,6 +62,13 @@ use std::u32;
#[cfg(target_os = "macos")]
use pathfinder_font_renderer::core_graphics;
#[cfg(feature = "reftests")]
use euclid::Size2D;
#[cfg(feature = "reftests")]
use cairo::{Format, ImageSurface};
#[cfg(feature = "reftests")]
use rsvg::{Handle, HandleExt};
const SUGGESTED_JSON_SIZE_LIMIT: u64 = 32 * 1024 * 1024;
const CUBIC_ERROR_TOLERANCE: f32 = 0.1;
@ -192,6 +200,7 @@ enum FontError {
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
enum SvgError {
ReftestsDisabled,
UnknownBuiltinSvg,
LoadingFailed,
ImageWritingFailed,
@ -353,6 +362,7 @@ fn otf_data_from_request(face: &FontRequestFace) -> Result<Arc<Vec<u8>>, FontErr
}
// Fetches the SVG data.
#[cfg(feature = "reftests")]
fn svg_data_from_request(builtin_svg_name: &str) -> Result<Arc<Vec<u8>>, SvgError> {
// Read in the builtin SVG.
match BUILTIN_SVGS.iter().filter(|& &(name, _)| name == builtin_svg_name).next() {
@ -619,6 +629,7 @@ fn render_reference_text(request: Json<RenderTextReferenceRequest>)
Ok(reference_image)
}
#[cfg(feature = "reftests")]
#[post("/render-reference/svg", format = "application/json", data = "<request>")]
fn render_reference_svg(request: Json<RenderSvgReferenceRequest>)
-> Result<ReferenceImage, SvgError> {
@ -656,6 +667,14 @@ fn render_reference_svg(request: Json<RenderSvgReferenceRequest>)
})
}
#[cfg(not(feature = "reftests"))]
#[post("/render-reference/svg", format = "application/json", data = "<request>")]
#[allow(unused_variables)]
fn render_reference_svg(request: Json<RenderSvgReferenceRequest>)
-> Result<ReferenceImage, SvgError> {
Err(SvgError::ReftestsDisabled)
}
// Static files
#[get("/")]
fn static_index() -> io::Result<NamedFile> {