You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
4.0 KiB
116 lines
4.0 KiB
# Create temporary profile directory name. |
|
TEMP_PROFILE:=$(shell echo `pwd`)/test_reports/temp_profile |
|
|
|
# These are the Firefox command line arguments. |
|
FIREFOX_ARGS:=-no-remote -profile $(TEMP_PROFILE) |
|
|
|
# These are the Chrome command line arguments. |
|
CHROME_ARGS:=--user-data-dir=$(TEMP_PROFILE) --no-first-run --disable-sync |
|
|
|
# Unit test uses the manifest from ref test to determine which browsers will |
|
# be used for running the unit tests. |
|
MANIFEST:=../resources/browser_manifests/browser_manifest.json |
|
|
|
# This is a helper command to separate multiple browsers to their own lines |
|
# for an easier sed operation. |
|
SPLIT_LINES:=sed 's|,|,@|g' | tr '@' '\n' |
|
|
|
# This is a helper command to join multiple lines together. |
|
JOIN_LINES:=tr -d '\n' |
|
|
|
# Fetch the paths to browsers that are going to be used in testing. |
|
# For OS X the path to the binary needs to be added. |
|
# Add the browser arguments for each browser. |
|
# Create random profile directory for each browser. |
|
BROWSERS_PATHS:=$(shell echo `\ |
|
sed -n 's|.*"path":\(.*\)|\1,|p' $(MANIFEST) | \ |
|
$(JOIN_LINES) \ |
|
`) |
|
|
|
# The browser_manifest.json file has only the app directory for mac browsers. |
|
# The absolute path to the browser binary needs to be used. |
|
BROWSERS_PATHS_WITH_MAC_CORRECTION:=$(shell echo '$(BROWSERS_PATHS)' | \ |
|
$(SPLIT_LINES) | \ |
|
sed 's|\(Aurora\.app\)|\1/Contents/MacOS/firefox-bin|' | \ |
|
sed 's|\(Firefox.*\.app\)|\1/Contents/MacOS/firefox-bin|' | \ |
|
sed 's|\(Google Chrome\.app\)|\1/Contents/MacOS/Google Chrome|' | \ |
|
$(JOIN_LINES) \ |
|
) |
|
|
|
# Replace " with @@@@ so that echoing do not destroy the quotation marks. |
|
QUOTATION_MARK:=\" |
|
SUBSTITUTE_FOR_QUOTATION_MARK:=@@@@ |
|
|
|
# Each of the browser can have their own separate arguments. |
|
BROWSERS_WITH_ARGUMENTS:=$(shell echo '$(BROWSERS_PATHS_WITH_MAC_CORRECTION)' | \ |
|
$(SPLIT_LINES) | \ |
|
sed "s|\(irefox.*\)\($(QUOTATION_MARK)\),|\1;$(FIREFOX_ARGS)\2,|" | \ |
|
sed "s|\(hrome.*\)\($(QUOTATION_MARK)\),|\1;$(CHROME_ARGS)\2,|" | \ |
|
$(JOIN_LINES) \ |
|
) |
|
|
|
# A temporary profile directory is needed for each of the browser. In this way |
|
# a unit test run will not disturb the main browsing session of the user. The |
|
# $RANDOM shell variable is used to generate non-conflicting temporary |
|
# directories. |
|
BROWSERS_WITH_UKNOWN_RANDOM_PROFILE_PATHS:=$(shell echo '$(BROWSERS_WITH_ARGUMENTS)' | \ |
|
$(SPLIT_LINES) | \ |
|
sed 's|\(temp_profile\)|\1_$$RANDOM$$RANDOM|' | \ |
|
sed "s|$(QUOTATION_MARK)|$(SUBSTITUTE_FOR_QUOTATION_MARK)|g" | \ |
|
$(JOIN_LINES) \ |
|
) |
|
|
|
# Echo the variable so that the unknown random directories become known. |
|
# Replace @@@@ with " so that jsTestDriver will work properly. |
|
BROWSERS:=$(shell echo "$(BROWSERS_WITH_UKNOWN_RANDOM_PROFILE_PATHS)" | \ |
|
sed "s|$(SUBSTITUTE_FOR_QUOTATION_MARK)|$(QUOTATION_MARK)|g" \ |
|
) |
|
|
|
# Get the known random directories for browsers. This information will be used |
|
# to create the profile directories beforehand. Create also the dummy temp |
|
# profile directory so that the mkdir command would not fail for browsers that |
|
# do not need it. |
|
PROFILES:=$(TEMP_PROFILE) $(shell echo '$(BROWSERS)' | \ |
|
$(SPLIT_LINES) | \ |
|
sed -n "s|.*\( $(TEMP_PROFILE)_[0-9]\+\).*|\1|p" | \ |
|
$(JOIN_LINES) \ |
|
) |
|
|
|
# This is the command to invoke the unit test. |
|
PROG:=java \ |
|
-Xms512m \ |
|
-Xmx1024m \ |
|
-jar ../../external/jsTestDriver/JsTestDriver-1.3.3d.jar \ |
|
--config ./jsTestDriver.conf \ |
|
--reset \ |
|
--port 4224 \ |
|
--browser $(BROWSERS) \ |
|
--tests all \ |
|
--testOutput ./test_reports/ |
|
|
|
# This default rule runs the unit tests with the constructed command. |
|
test: |
|
@mkdir -p $(PROFILES) |
|
$(PROG) |
|
@rm -rf $(PROFILES) |
|
|
|
# In case this Makefile needs to be debugged then this rule will provide all |
|
# the information from intermediate steps. |
|
debug: |
|
@echo 'Debug browsers paths: $(BROWSERS_PATHS)' |
|
@echo |
|
@echo 'Debug browsers paths with mac correction: $(BROWSERS_PATHS_WITH_MAC_CORRECTION)' |
|
@echo |
|
@echo 'Debug browsers with arguments: $(BROWSERS_WITH_ARGUMENTS)' |
|
@echo |
|
@echo 'Debug browsers random profile paths: $(BROWSERS_WITH_UKNOWN_RANDOM_PROFILE_PATHS)' |
|
@echo |
|
@echo 'Debug browsers: $(BROWSERS)' |
|
@echo |
|
@echo 'Debug profiles: $(PROFILES)' |
|
@echo |
|
@echo 'Command to be run: $(PROG)' |
|
@echo |
|
|
|
.phony:: test |
|
|
|
|